diff --git a/hank-godot/scripts/Random.gd b/hank-godot/scripts/Random.gd index a8b3a31..fd1a540 100644 --- a/hank-godot/scripts/Random.gd +++ b/hank-godot/scripts/Random.gd @@ -1,6 +1,6 @@ class_name Random -static var _arrayFloatHelper: Array[float] = null +static var _arrayFloatHelper: Array[float] = [] var initialSeed: int = 1 var _hasFloatNormalSpare: bool = false @@ -132,14 +132,20 @@ func resetInitialSeed() -> int: self.internalSeed = int(tempNumber2) var tempRight: int = int(self.internalSeed) - var tempResult: int = self.initialSeed = tempRight - return tempResult + self.initialSeed = tempRight + + return self.initialSeed func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int: if (Min == 0 && Max == 2147483647 && Excludes == null): - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - return int(self.internalSeed) + var tempNumber + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempNumber = self.internalSeed + return int(tempNumber) else: if (Min == Max): return Min @@ -151,8 +157,13 @@ func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int: if (Excludes == null): var tempResult if true: - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - var v: float = Min + (self.internalSeed) / 2147483647 * (Max - Min + 1) + var tempLeft + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft = self.internalSeed + var v: float = Min + tempLeft / 2147483647 * (Max - Min + 1) tempResult = int(floor(v)) return tempResult else: @@ -160,8 +171,13 @@ func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int: while true: var tempRight if true: - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - var v: float = Min + (self.internalSeed) / 2147483647 * (Max - Min + 1) + var tempLeft1 + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft1 = self.internalSeed + var v: float = Min + tempLeft1 / 2147483647 * (Max - Min + 1) tempRight = int(floor(v)) result = tempRight if !(Excludes.find(result) >= 0): @@ -172,8 +188,13 @@ func _float(Min: float = 0, Max: float = 1, Excludes = null) -> float: var result: float = 0 if (Min == 0 && Max == 1 && Excludes == null): - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - return (self.internalSeed) / 2147483647 + var tempLeft + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft = self.internalSeed + return tempLeft / 2147483647 else: if (Min == Max): result = Min @@ -183,12 +204,22 @@ func _float(Min: float = 0, Max: float = 1, Excludes = null) -> float: Max = Min - Max Min = Min - Max if (Excludes == null): - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - result = Min + (self.internalSeed) / 2147483647 * (Max - Min) + var tempLeft1 + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft1 = self.internalSeed + result = Min + tempLeft1 / 2147483647 * (Max - Min) else: while true: - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - result = Min + (self.internalSeed) / 2147483647 * (Max - Min) + var tempLeft2 + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft2 = self.internalSeed + result = Min + tempLeft2 / 2147483647 * (Max - Min) if !(Excludes.find(result) >= 0): break @@ -201,12 +232,25 @@ func floatNormal(Mean: float = 0, StdDev: float = 1) -> float: return Mean + scale * self._floatNormalRand2 self._hasFloatNormalSpare = true - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - var theta: float = self._twoPI * ((self.internalSeed) / 2147483647) + var tempLeft - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 - self._floatNormalRho = sqrt(-2 * log(1 - (self.internalSeed) / 2147483647)) + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft = self.internalSeed + + var theta: float = self._twoPI * (tempLeft / 2147483647) + var tempLeft1 + + if true: + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + self.internalSeed = intermediate2 % 2147483647 + tempLeft1 = self.internalSeed + + self._floatNormalRho = sqrt(-2 * log(1 - tempLeft1 / 2147483647)) var scale: float = StdDev * self._floatNormalRho @@ -258,7 +302,10 @@ func weightedPick(WeightsArray: Array[float]) -> int: return pick func generate() -> float: - self.internalSeed = self.internalSeed * 48271.0 % 2147483647 + var intermediate: float = self.internalSeed * 48271.0 + var intermediate2: int = int(intermediate) + + self.internalSeed = intermediate2 % 2147483647 return self.internalSeed diff --git a/hank-godot/scripts/_GeneratedFiles.json b/hank-godot/scripts/_GeneratedFiles.json index 7de6539..5665cc5 100644 --- a/hank-godot/scripts/_GeneratedFiles.json +++ b/hank-godot/scripts/_GeneratedFiles.json @@ -53,7 +53,7 @@ "CallStack.gd", "Alt.gd" ], - "id": 16, + "id": 25, "wasCached": false, "version": 1 } \ No newline at end of file diff --git a/hank/Random.hx b/hank/Random.hx index a3c87ed..df76060 100644 --- a/hank/Random.hx +++ b/hank/Random.hx @@ -44,7 +44,8 @@ class Random { * @return The new initial seed. */ public inline function resetInitialSeed():Int { - return initialSeed = rangeBound(Std.int(Math.random() * MAX_VALUE_INT)); + initialSeed = rangeBound(Std.int(Math.random() * MAX_VALUE_INT)); + return initialSeed; } /** @@ -280,7 +281,12 @@ class Random { * @return A new pseudorandom number. */ inline function generate():Float { - return internalSeed = (internalSeed * MULTIPLIER) % MODULUS; + var intermediate = (internalSeed * MULTIPLIER); + #if gdscript + var intermediate = Std.int(intermediate); + #end + internalSeed = intermediate % MODULUS; + return internalSeed; } /** @@ -321,7 +327,7 @@ class Random { /** * Internal shared helper variable. Used by getObject(). */ - static var _arrayFloatHelper:Array = null; + static var _arrayFloatHelper:Array = []; /** * Constants used in the pseudorandom number generation equation. @@ -332,7 +338,7 @@ class Random { * @see Stephen K. Park and Keith W. Miller and Paul K. Stockmeyer (1988). * "Technical Correspondence". Communications of the ACM 36 (7): 105–110. */ - static inline var MULTIPLIER:Float = 48271.0; + static inline var MULTIPLIER:Float = 48271; static inline var MODULUS:Int = MAX_VALUE_INT;