origin-sdk 0.2.0

A Rust implementation of the Origin SDK, which is used in games to communicate with the EA Desktop client.
Documentation
use tracing::debug;

const RAND_MAX: u32 = 32767;
const MULTIPLIER: u32 = 214013;
const INCREMENT: u32 = 2531011;

pub struct Random {
    seed: u32,
}

impl Random {
    pub fn new(seed: u32) -> Self {
        Self { seed }
    }

    pub fn next(&mut self) -> u32 {
        self.seed = self.seed.wrapping_mul(MULTIPLIER).wrapping_add(INCREMENT);
        (self.seed >> 16) & RAND_MAX
    }

    pub fn set_seed(&mut self, seed: u32) {
        debug!("Setting new random seed: {}", seed);
        self.seed = seed;
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        let mut rng = Random::new(1337);

        let random_number = rng.next();
        assert_eq!(random_number, 4404);

        let random_number = rng.next();
        assert_eq!(random_number, 25954);
    }
}