Fix Random.hx for GDScript
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
"CallStack.gd",
|
||||
"Alt.gd"
|
||||
],
|
||||
"id": 16,
|
||||
"id": 25,
|
||||
"wasCached": false,
|
||||
"version": 1
|
||||
}
|
||||
@@ -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<Float> = null;
|
||||
static var _arrayFloatHelper:Array<Float> = [];
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user