diff options
| author | LLLL Colonq <llll@colonq> | 2026-08-04 04:35:44 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2026-08-04 04:35:44 -0400 |
| commit | 3c7796f066647090ed8436778bdfe25f11844c05 (patch) | |
| tree | 0644a101004d91af4fcdc2f51fcc2e03f7f255ce /2026/games/asrael_io/source/src/rng.rs | |
| parent | a75221ab93f59d688f90cd83f0284ff98951fcfa (diff) | |
Prepare for upload
Diffstat (limited to '2026/games/asrael_io/source/src/rng.rs')
| -rw-r--r-- | 2026/games/asrael_io/source/src/rng.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/2026/games/asrael_io/source/src/rng.rs b/2026/games/asrael_io/source/src/rng.rs new file mode 100644 index 0000000..6e46de0 --- /dev/null +++ b/2026/games/asrael_io/source/src/rng.rs @@ -0,0 +1,35 @@ +pub struct Rng(u32);
+
+impl Rng {
+ pub fn new(seed: u32) -> Self {
+ let mut rng = Self(seed.max(1));
+ rng.next();
+ rng
+ }
+
+ pub fn next(&mut self) -> u32 {
+ self.0 ^= self.0 << 13;
+ self.0 ^= self.0 >> 17;
+ self.0 ^= self.0 << 5;
+
+ self.0
+ }
+
+ pub fn range(&mut self, n: u32) -> u32 {
+ self.next() % n
+ }
+
+ pub fn f32(&mut self) -> f32 {
+ self.next() as f32 / u32::MAX as f32
+ }
+
+ pub fn chance(&mut self, p: f32) -> bool {
+ self.f32() < p
+ }
+}
+
+impl Default for Rng {
+ fn default() -> Self {
+ Self::new(u32::from_be_bytes(*b"CLNK"))
+ }
+}
|
