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
348349module . exports = RandomDataGenerator ;
0 commit comments