|
|
|
|
@@ -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
|
|
|
|
|
|
|
|
|
|
|