Skip to main content

lotus_script/
rand.rs

1//! Zufallszahlen-Generierung für Scripts.
2//!
3//! Random number generation for scripts.
4
5use std::ops::{Bound, RangeBounds};
6
7/// Setzt den Zufallsgenerator mit einem zufälligen Startwert.
8///
9/// Seeds the random number generator with a random seed.
10pub fn random_seed() {
11    unsafe { lotus_script_sys::rand::random_seed() }
12}
13
14/// Setzt den Zufallsgenerator mit dem angegebenen Startwert.
15///
16/// Seeds the random number generator with the given seed.
17pub fn seed(seed: u64) {
18    unsafe { lotus_script_sys::rand::seed(seed) }
19}
20
21/// Erzeugt eine Zufallszahl `f64` im Bereich 0 bis 1.
22///
23/// Generates a random `f64` in the range 0 to 1.
24pub fn gen_f64() -> f64 {
25    unsafe { lotus_script_sys::rand::f64() }
26}
27
28/// Erzeugt eine Zufallszahl `u64` im angegebenen Bereich.
29///
30/// Generates a random `u64` for the given range.
31pub fn gen_u64(range: impl RangeBounds<u64>) -> u64 {
32    let min = match range.start_bound() {
33        Bound::Included(min) => *min,
34        Bound::Excluded(min) => min + 1,
35        Bound::Unbounded => 0,
36    };
37
38    let max = match range.end_bound() {
39        Bound::Included(max) => *max,
40        Bound::Excluded(max) => max - 1,
41        Bound::Unbounded => u64::MAX,
42    };
43
44    assert!(min <= max, "min must be less than or equal to max");
45
46    unsafe { lotus_script_sys::rand::u64(min, max) }
47}