mirror of
https://github.com/GayPizzaSpecifications/voxelotl-engine.git
synced 2025-08-03 13:11:33 +00:00
34 lines
669 B
Swift
34 lines
669 B
Swift
|
public struct DarwinRandom: RandomProvider {
|
||
|
public typealias Output = Int
|
||
|
|
||
|
public static var min: Int { 0x00000000 }
|
||
|
public static var max: Int { 0x7FFFFFFF }
|
||
|
|
||
|
private var state: Int
|
||
|
|
||
|
init() {
|
||
|
self.state = 0
|
||
|
}
|
||
|
|
||
|
public init(seed: Int) {
|
||
|
self.state = seed
|
||
|
}
|
||
|
|
||
|
mutating public func seed(with seed: Int) {
|
||
|
self.state = seed
|
||
|
}
|
||
|
|
||
|
mutating public func next() -> Int {
|
||
|
if self.state == 0 {
|
||
|
self.state = 123459876
|
||
|
}
|
||
|
let hi = self.state / 127773
|
||
|
let lo = self.state - hi * 127773
|
||
|
self.state = 16807 * lo - 2836 * hi
|
||
|
if self.state < 0 {
|
||
|
self.state += Self.max
|
||
|
}
|
||
|
return self.state % (Self.max + 1)
|
||
|
}
|
||
|
}
|