Skip to content

Commit f141b6b

Browse files
committed
RDG now proper class.
1 parent 5d1393b commit f141b6b

1 file changed

Lines changed: 104 additions & 103 deletions

File tree

v3/src/math/random-data-generator/RandomDataGenerator.js

Lines changed: 104 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,95 @@
1-
/**
2-
* @property {number} c - Internal var.
3-
* @private
4-
*/
5-
var c = 1;
6-
7-
/**
8-
* @property {number} s0 - Internal var.
9-
* @private
10-
*/
11-
var s0 = 0;
12-
13-
/**
14-
* @property {number} s1 - Internal var.
15-
* @private
16-
*/
17-
var s1 = 0;
18-
19-
/**
20-
* @property {number} s2 - Internal var.
21-
* @private
22-
*/
23-
var s2 = 0;
24-
25-
/**
26-
* @property {Array} sign - Internal var.
27-
* @private
28-
*/
29-
var sign = [ -1, 1 ];
30-
31-
/**
32-
* Private random helper.
33-
*
34-
* @method Phaser.RandomDataGenerator#rnd
35-
* @private
36-
* @return {number}
37-
*/
38-
var rnd = function ()
39-
{
40-
var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32
41-
42-
c = t | 0;
43-
s0 = s1;
44-
s1 = s2;
45-
s2 = t - c;
46-
47-
return s2;
48-
};
49-
50-
/**
51-
* Internal method that creates a seed hash.
52-
*
53-
* @method Phaser.RandomDataGenerator#hash
54-
* @private
55-
* @param {any} data
56-
* @return {number} hashed value.
57-
*/
58-
var hash = function (data)
59-
{
60-
var h, i, n;
61-
n = 0xefc8249d;
62-
data = data.toString();
63-
64-
for (i = 0; i < data.length; i++)
1+
var Class = require('../../utils/Class');
2+
3+
var RandomDataGenerator = new Class({
4+
5+
initialize:
6+
7+
function RandomDataGenerator (seeds)
658
{
66-
n += data.charCodeAt(i);
67-
h = 0.02519603282416938 * n;
68-
n = h >>> 0;
69-
h -= n;
70-
h *= n;
71-
n = h >>> 0;
72-
h -= n;
73-
n += h * 0x100000000;// 2^32
74-
}
9+
/**
10+
* @property {number} c - Internal var.
11+
* @private
12+
*/
13+
this.c = 1;
14+
15+
/**
16+
* @property {number} s0 - Internal var.
17+
* @private
18+
*/
19+
this.s0 = 0;
20+
21+
/**
22+
* @property {number} s1 - Internal var.
23+
* @private
24+
*/
25+
this.s1 = 0;
26+
27+
/**
28+
* @property {number} s2 - Internal var.
29+
* @private
30+
*/
31+
this.s2 = 0;
32+
33+
/**
34+
* @property {Array} sign - Internal var.
35+
* @private
36+
*/
37+
this.sign = [ -1, 1 ];
38+
39+
if (seeds)
40+
{
41+
this.init(seeds);
42+
}
43+
},
44+
45+
/**
46+
* Private random helper.
47+
*
48+
* @method Phaser.RandomDataGenerator#rnd
49+
* @private
50+
* @return {number}
51+
*/
52+
rnd: function ()
53+
{
54+
var t = 2091639 * this.s0 + this.c * 2.3283064365386963e-10; // 2^-32
7555

76-
return (n >>> 0) * 2.3283064365386963e-10;// 2^-32
77-
};
56+
this.c = t | 0;
57+
this.s0 = this.s1;
58+
this.s1 = this.s2;
59+
this.s2 = t - this.c;
7860

61+
return this.s2;
62+
},
7963

80-
var RandomDataGenerator = function (seeds)
81-
{
82-
if (seeds)
64+
/**
65+
* Internal method that creates a seed hash.
66+
*
67+
* @method Phaser.RandomDataGenerator#hash
68+
* @private
69+
* @param {any} data
70+
* @return {number} hashed value.
71+
*/
72+
hash: function (data)
8373
{
84-
this.init(seeds);
85-
}
86-
};
74+
var h;
75+
var n = 0xefc8249d;
8776

88-
RandomDataGenerator.prototype.constructor = RandomDataGenerator;
77+
data = data.toString();
8978

90-
RandomDataGenerator.prototype = {
79+
for (var i = 0; i < data.length; i++)
80+
{
81+
n += data.charCodeAt(i);
82+
h = 0.02519603282416938 * n;
83+
n = h >>> 0;
84+
h -= n;
85+
h *= n;
86+
n = h >>> 0;
87+
h -= n;
88+
n += h * 0x100000000;// 2^32
89+
}
90+
91+
return (n >>> 0) * 2.3283064365386963e-10;// 2^-32
92+
},
9193

9294
init: function (seeds)
9395
{
@@ -112,10 +114,10 @@ RandomDataGenerator.prototype = {
112114
sow: function (seeds)
113115
{
114116
// Always reset to default seed
115-
s0 = hash(' ');
116-
s1 = hash(s0);
117-
s2 = hash(s1);
118-
c = 1;
117+
this.s0 = this.hash(' ');
118+
this.s1 = this.hash(this.s0);
119+
this.s2 = this.hash(this.s1);
120+
this.c = 1;
119121

120122
if (!seeds)
121123
{
@@ -127,14 +129,13 @@ RandomDataGenerator.prototype = {
127129
{
128130
var seed = seeds[i];
129131

130-
s0 -= hash(seed);
131-
s0 += ~~(s0 < 0);
132-
s1 -= hash(seed);
133-
s1 += ~~(s1 < 0);
134-
s2 -= hash(seed);
135-
s2 += ~~(s2 < 0);
132+
this.s0 -= this.hash(seed);
133+
this.s0 += ~~(this.s0 < 0);
134+
this.s1 -= this.hash(seed);
135+
this.s1 += ~~(this.s1 < 0);
136+
this.s2 -= this.hash(seed);
137+
this.s2 += ~~(this.s2 < 0);
136138
}
137-
138139
},
139140

140141
/**
@@ -146,7 +147,7 @@ RandomDataGenerator.prototype = {
146147
integer: function ()
147148
{
148149
// 2^32
149-
return rnd() * 0x100000000;
150+
return this.rnd() * 0x100000000;
150151
},
151152

152153
/**
@@ -158,7 +159,7 @@ RandomDataGenerator.prototype = {
158159
frac: function ()
159160
{
160161
// 2^-53
161-
return rnd() + (rnd() * 0x200000 | 0) * 1.1102230246251565e-16;
162+
return this.rnd() + (this.rnd() * 0x200000 | 0) * 1.1102230246251565e-16;
162163
},
163164

164165
/**
@@ -261,7 +262,7 @@ RandomDataGenerator.prototype = {
261262
*/
262263
sign: function ()
263264
{
264-
return this.pick(sign);
265+
return this.pick(this.sign);
265266
},
266267

267268
/**
@@ -334,15 +335,15 @@ RandomDataGenerator.prototype = {
334335
{
335336
state = state.split(',');
336337

337-
c = parseFloat(state[1]);
338-
s0 = parseFloat(state[2]);
339-
s1 = parseFloat(state[3]);
340-
s2 = parseFloat(state[4]);
338+
this.c = parseFloat(state[1]);
339+
this.s0 = parseFloat(state[2]);
340+
this.s1 = parseFloat(state[3]);
341+
this.s2 = parseFloat(state[4]);
341342
}
342343

343-
return [ '!rnd', c, s0, s1, s2 ].join(',');
344+
return [ '!rnd', this.c, this.s0, this.s1, this.s2 ].join(',');
344345
}
345346

346-
};
347+
});
347348

348349
module.exports = RandomDataGenerator;

0 commit comments

Comments
 (0)