Files
hank/hank-godot/scripts/Random.gd
Nat Quayle Nelson b0a3c0b3d9
Some checks failed
/ test (push) Failing after 41s
Make hank work in GDScript
2025-10-30 21:42:19 -05:00

408 lines
9.3 KiB
GDScript

class_name Random
static var _arrayFloatHelper: Array[float] = []
var initialSeed: int = 1
var _hasFloatNormalSpare: bool = false
var _floatNormalRand1: float = 0.0
var _floatNormalRand2: float = 0.0
var _twoPI: float = PI * 2
var _floatNormalRho: float = 0.0
var internalSeed: float = 1.0
func _init(InitialSeed = null) -> void:
if (InitialSeed != null):
var NewSeed: int = InitialSeed
var tempNumber
if (NewSeed < 1):
tempNumber = 1
else:
tempNumber = NewSeed
var lowerBound: float = tempNumber
var tempNumber1
if (lowerBound > 2147483646):
tempNumber1 = 2147483646
else:
tempNumber1 = lowerBound
var NewSeed2: int = int(tempNumber1)
var tempNumber2
if (NewSeed2 < 1):
tempNumber2 = 1
else:
tempNumber2 = NewSeed2
var lowerBound2: float = tempNumber2
if true:
var tempNumber3
if (lowerBound2 > 2147483646):
tempNumber3 = 2147483646
else:
tempNumber3 = lowerBound2
self.internalSeed = int(tempNumber3)
self.initialSeed = int(self.internalSeed)
else:
var Value: int = int(randf() * 2147483647)
var tempNumber3
if (Value < 1):
tempNumber3 = 1
else:
tempNumber3 = Value
var lowerBound: float = tempNumber3
var tempNumber4
if (lowerBound > 2147483646):
tempNumber4 = 2147483646
else:
tempNumber4 = lowerBound
var NewSeed: int = int(tempNumber4)
var tempNumber5
if (NewSeed < 1):
tempNumber5 = 1
else:
tempNumber5 = NewSeed
var lowerBound2: float = tempNumber5
var tempNumber6
if (lowerBound2 > 2147483646):
tempNumber6 = 2147483646
else:
tempNumber6 = lowerBound2
var NewSeed2: int = int(tempNumber6)
var tempNumber7
if (NewSeed2 < 1):
tempNumber7 = 1
else:
tempNumber7 = NewSeed2
var lowerBound3: float = tempNumber7
if true:
var tempNumber
if (lowerBound3 > 2147483646):
tempNumber = 2147483646
else:
tempNumber = lowerBound3
self.internalSeed = int(tempNumber)
self.initialSeed = int(self.internalSeed)
func resetInitialSeed() -> int:
var tempNumber
if true:
var Value: int = int(randf() * 2147483647)
var tempNumber1
if true:
var tempNumber2
if (Value < 1):
tempNumber2 = 1
else:
tempNumber2 = Value
var lowerBound: float = tempNumber2
if (lowerBound > 2147483646):
tempNumber1 = 2147483646
else:
tempNumber1 = lowerBound
tempNumber = int(tempNumber1)
var NewSeed: int = tempNumber
var tempNumber3
if true:
var tempNumber4
if (NewSeed < 1):
tempNumber4 = 1
else:
tempNumber4 = NewSeed
var lowerBound: float = tempNumber4
if (lowerBound > 2147483646):
tempNumber3 = 2147483646
else:
tempNumber3 = lowerBound
var NewSeed2: int = int(tempNumber3)
if true:
var tempNumber2
if true:
var tempNumber1
if (NewSeed2 < 1):
tempNumber1 = 1
else:
tempNumber1 = NewSeed2
var lowerBound: float = tempNumber1
if (lowerBound > 2147483646):
tempNumber2 = 2147483646
else:
tempNumber2 = lowerBound
self.internalSeed = int(tempNumber2)
var tempRight: int = int(self.internalSeed)
self.initialSeed = tempRight
return self.initialSeed
func _int(Min: int = 0, Max: int = 2147483647, Excludes = null) -> int:
if (Min == 0 && Max == 2147483647 && Excludes == null):
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
else:
if (Min > Max):
Min = Min + Max
Max = Min - Max
Min = Min - Max
if (Excludes == null):
var tempResult
if true:
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:
var result: int = 0
while true:
var tempRight
if true:
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):
break
return result
func _float(Min: float = 0, Max: float = 1, Excludes = null) -> float:
var result: float = 0
if (Min == 0 && Max == 1 && Excludes == null):
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
else:
if (Min > Max):
Min = Min + Max
Max = Min - Max
Min = Min - Max
if (Excludes == null):
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:
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
return result
func floatNormal(Mean: float = 0, StdDev: float = 1) -> float:
if (self._hasFloatNormalSpare):
self._hasFloatNormalSpare = false
var scale: float = StdDev * self._floatNormalRho
return Mean + scale * self._floatNormalRand2
self._hasFloatNormalSpare = true
var tempLeft
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
self._floatNormalRand1 = cos(theta)
self._floatNormalRand2 = sin(theta)
return Mean + scale * self._floatNormalRand1
func _bool(Chance: float = 50) -> bool:
return self._float(0, 100, null) < Chance
func _sign(Chance: float = 50) -> int:
var tempResult
if (self._float(0, 100, null) < Chance):
tempResult = 1
else:
tempResult = -1
return tempResult
func weightedPick(WeightsArray: Array[float]) -> int:
var totalWeight: float = 0
var pick: int = 0
if true:
var _g: int = 0
while (_g < WeightsArray.size()):
var i: float = WeightsArray[_g]
_g += 1
totalWeight += i
totalWeight = self._float(0, totalWeight, null)
if true:
var _g: int = 0
var _g1: int = WeightsArray.size()
while (_g < _g1):
var tempNumber
if true:
_g += 1
tempNumber = _g - 1
var i: int = tempNumber
if (totalWeight < WeightsArray[i]):
pick = i
break
totalWeight -= WeightsArray[i]
return pick
func generate() -> float:
var intermediate: float = self.internalSeed * 48271.0
var intermediate2: int = int(intermediate)
self.internalSeed = intermediate2 % 2147483647
return self.internalSeed
func set_initialSeed(NewSeed: int) -> int:
var tempNumber
if true:
var tempNumber1
if (NewSeed < 1):
tempNumber1 = 1
else:
tempNumber1 = NewSeed
var lowerBound: float = tempNumber1
if (lowerBound > 2147483646):
tempNumber = 2147483646
else:
tempNumber = lowerBound
var NewSeed2: int = int(tempNumber)
var tempNumber2
if true:
var tempNumber1
if (NewSeed2 < 1):
tempNumber1 = 1
else:
tempNumber1 = NewSeed2
var lowerBound: float = tempNumber1
if (lowerBound > 2147483646):
tempNumber2 = 2147483646
else:
tempNumber2 = lowerBound
self.internalSeed = int(tempNumber2)
var tempRight: int = int(self.internalSeed)
self.initialSeed = tempRight
return self.initialSeed
func get_currentSeed() -> int:
return int(self.internalSeed)
func set_currentSeed(NewSeed: int) -> int:
var tempNumber
var tempNumber1
if (NewSeed < 1):
tempNumber1 = 1
else:
tempNumber1 = NewSeed
var lowerBound: float = tempNumber1
if (lowerBound > 2147483646):
tempNumber = 2147483646
else:
tempNumber = lowerBound
self.internalSeed = int(tempNumber)
return int(self.internalSeed)
static func rangeBound(Value: int) -> int:
var tempNumber
var tempNumber1
if (Value < 1):
tempNumber1 = 1
else:
tempNumber1 = Value
var lowerBound: float = tempNumber1
if (lowerBound > 2147483646):
tempNumber = 2147483646
else:
tempNumber = lowerBound
return int(tempNumber)
static func bound(Value: float, Min = null, Max = null) -> float:
var tempNumber
if (Min != null && Value < Min):
tempNumber = Min
else:
tempNumber = Value
var lowerBound: float = tempNumber
var tempResult
if (Max != null && lowerBound > Max):
tempResult = Max
else:
tempResult = lowerBound
return tempResult