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