2 Commits

Author SHA1 Message Date
ad2f9553d1 add hank-godot gitignore
Some checks failed
/ test (push) Failing after 8s
2025-10-30 19:40:12 -05:00
f93786ed91 Fix Random.hx for GDScript 2025-10-30 19:40:11 -05:00
4 changed files with 79 additions and 25 deletions

1
hank-godot/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.uid

View File

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

View File

@@ -53,7 +53,7 @@
"CallStack.gd",
"Alt.gd"
],
"id": 16,
"id": 25,
"wasCached": false,
"version": 1
}

View File

@@ -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): 105110.
*/
static inline var MULTIPLIER:Float = 48271.0;
static inline var MULTIPLIER:Float = 48271;
static inline var MODULUS:Int = MAX_VALUE_INT;