use sdl2::pixels::Color; use rand::prelude::*; use crate::Point; pub struct GameState { player: Point, pub p_dx: i16, pub p_dy: i16, pub p_rot: f32, pub p_color: Color, pub rng: ThreadRng, } impl GameState { pub fn init() -> Self { let mut new_rng = rand::thread_rng(); Self { player: Point { x: new_rng.gen_range(0..800), y: new_rng.gen_range(0..600), }, p_dx: new_rng.gen_range(1..=5), p_dy: new_rng.gen_range(1..=5), p_rot: 90.0, p_color: Color::RGB( new_rng.gen_range(0..=255), new_rng.gen_range(0..=255), new_rng.gen_range(0..=255), ), rng: new_rng, } } pub fn update(&mut self) { self.player.x += self.p_dx; if self.player.x < 0 { self.player.x = 0; self.p_color = Color::RGB( self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), ); self.p_dx = self.rng.gen_range(1..=5); } else if self.player.x > 800 { self.player.x = 800; self.p_color = Color::RGB( self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), ); self.p_dx = self.rng.gen_range(-5..=-1); } self.player.y += self.p_dy; if self.player.y < 0 { self.player.y = 0; self.p_color = Color::RGB( self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), ); self.p_dy = self.rng.gen_range(1..=5); } else if self.player.y > 600 { self.player.y = 600; self.p_color = Color::RGB( self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), self.rng.gen_range(0..=255), ); self.p_dy = self.rng.gen_range(-5..=-1); } } pub fn player(&self) -> &Point { &self.player } }