Fix Random.hx for GDScript
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
class_name Random
|
class_name Random
|
||||||
|
|
||||||
static var _arrayFloatHelper: Array[float] = null
|
static var _arrayFloatHelper: Array[float] = []
|
||||||
|
|
||||||
var initialSeed: int = 1
|
var initialSeed: int = 1
|
||||||
var _hasFloatNormalSpare: bool = false
|
var _hasFloatNormalSpare: bool = false
|
||||||
@@ -132,14 +132,20 @@ func resetInitialSeed() -> int:
|
|||||||
self.internalSeed = int(tempNumber2)
|
self.internalSeed = int(tempNumber2)
|
||||||
|
|
||||||
var tempRight: int = int(self.internalSeed)
|
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:
|
func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int:
|
||||||
if (Min == 0 && Max == 2147483647 && Excludes == null):
|
if (Min == 0 && Max == 2147483647 && Excludes == null):
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempNumber
|
||||||
return int(self.internalSeed)
|
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:
|
else:
|
||||||
if (Min == Max):
|
if (Min == Max):
|
||||||
return Min
|
return Min
|
||||||
@@ -151,8 +157,13 @@ func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int:
|
|||||||
if (Excludes == null):
|
if (Excludes == null):
|
||||||
var tempResult
|
var tempResult
|
||||||
if true:
|
if true:
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempLeft
|
||||||
var v: float = Min + (self.internalSeed) / 2147483647 * (Max - Min + 1)
|
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))
|
tempResult = int(floor(v))
|
||||||
return tempResult
|
return tempResult
|
||||||
else:
|
else:
|
||||||
@@ -160,8 +171,13 @@ func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int:
|
|||||||
while true:
|
while true:
|
||||||
var tempRight
|
var tempRight
|
||||||
if true:
|
if true:
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempLeft1
|
||||||
var v: float = Min + (self.internalSeed) / 2147483647 * (Max - Min + 1)
|
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))
|
tempRight = int(floor(v))
|
||||||
result = tempRight
|
result = tempRight
|
||||||
if !(Excludes.find(result) >= 0):
|
if !(Excludes.find(result) >= 0):
|
||||||
@@ -172,8 +188,13 @@ func _float(Min: float = 0, Max: float = 1, Excludes = null) -> float:
|
|||||||
var result: float = 0
|
var result: float = 0
|
||||||
|
|
||||||
if (Min == 0 && Max == 1 && Excludes == null):
|
if (Min == 0 && Max == 1 && Excludes == null):
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempLeft
|
||||||
return (self.internalSeed) / 2147483647
|
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:
|
else:
|
||||||
if (Min == Max):
|
if (Min == Max):
|
||||||
result = Min
|
result = Min
|
||||||
@@ -183,12 +204,22 @@ func _float(Min: float = 0, Max: float = 1, Excludes = null) -> float:
|
|||||||
Max = Min - Max
|
Max = Min - Max
|
||||||
Min = Min - Max
|
Min = Min - Max
|
||||||
if (Excludes == null):
|
if (Excludes == null):
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempLeft1
|
||||||
result = Min + (self.internalSeed) / 2147483647 * (Max - Min)
|
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:
|
else:
|
||||||
while true:
|
while true:
|
||||||
self.internalSeed = self.internalSeed * 48271.0 % 2147483647
|
var tempLeft2
|
||||||
result = Min + (self.internalSeed) / 2147483647 * (Max - Min)
|
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):
|
if !(Excludes.find(result) >= 0):
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -201,12 +232,25 @@ func floatNormal(Mean: float = 0, StdDev: float = 1) -> float:
|
|||||||
return Mean + scale * self._floatNormalRand2
|
return Mean + scale * self._floatNormalRand2
|
||||||
|
|
||||||
self._hasFloatNormalSpare = true
|
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
|
if true:
|
||||||
self._floatNormalRho = sqrt(-2 * log(1 - (self.internalSeed) / 2147483647))
|
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
|
var scale: float = StdDev * self._floatNormalRho
|
||||||
|
|
||||||
@@ -258,7 +302,10 @@ func weightedPick(WeightsArray: Array[float]) -> int:
|
|||||||
return pick
|
return pick
|
||||||
|
|
||||||
func generate() -> float:
|
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
|
return self.internalSeed
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
"CallStack.gd",
|
"CallStack.gd",
|
||||||
"Alt.gd"
|
"Alt.gd"
|
||||||
],
|
],
|
||||||
"id": 16,
|
"id": 25,
|
||||||
"wasCached": false,
|
"wasCached": false,
|
||||||
"version": 1
|
"version": 1
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,8 @@ class Random {
|
|||||||
* @return The new initial seed.
|
* @return The new initial seed.
|
||||||
*/
|
*/
|
||||||
public inline function resetInitialSeed():Int {
|
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.
|
* @return A new pseudorandom number.
|
||||||
*/
|
*/
|
||||||
inline function generate():Float {
|
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().
|
* Internal shared helper variable. Used by getObject().
|
||||||
*/
|
*/
|
||||||
static var _arrayFloatHelper:Array<Float> = null;
|
static var _arrayFloatHelper:Array<Float> = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constants used in the pseudorandom number generation equation.
|
* 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).
|
* @see Stephen K. Park and Keith W. Miller and Paul K. Stockmeyer (1988).
|
||||||
* "Technical Correspondence". Communications of the ACM 36 (7): 105–110.
|
* "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;
|
static inline var MODULUS:Int = MAX_VALUE_INT;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user