diff --git a/src/main.rs b/src/main.rs index bcb4989..a99a6b8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -442,6 +442,7 @@ fn main() { let player_rect = camera_relative_rect(&camera.to_rect(), &player.to_rect()); + player_sprite.flip = (true, false); player_sprite.render(&mut renderer, &player_rect); renderer.present(); diff --git a/src/player.rs b/src/player.rs index c178ddd..06891f0 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,5 +1,9 @@ use sdl2::rect::Rect; +pub enum PlayerFacing { + Left, + Right +} pub struct Player { pub x: f32, @@ -9,7 +13,8 @@ pub struct Player { pub dx: f32, pub dy: f32, pub gravity: f32, - pub on_ground: bool + pub on_ground: bool, + pub facing: PlayerFacing } impl Player { @@ -22,11 +27,25 @@ impl Player { dx: 0.0, dy: 0.0, gravity: 0.3, - on_ground: false + on_ground: false, + facing: PlayerFacing::Right } } pub fn update(&mut self) { + match self.facing { + PlayerFacing::Right => { + if self.dx < 0.0 { + self.facing = PlayerFacing::Left; + } + }, + PlayerFacing::Left => { + if self.dx > 0.0 { + self.facing = PlayerFacing::Right; + } + } + } + self.dy += self.gravity; if self.dy > 8.0 { diff --git a/src/sprite.rs b/src/sprite.rs index 6d489d1..2498593 100644 --- a/src/sprite.rs +++ b/src/sprite.rs @@ -11,7 +11,8 @@ pub trait Sprite { pub struct StaticSprite<'a> { texture: &'a Texture, x: i32, - y: i32 + y: i32, + flip: (bool, bool) } impl<'a> StaticSprite<'a> { @@ -19,14 +20,15 @@ impl<'a> StaticSprite<'a> { StaticSprite { texture: texture, x: x, - y: y + y: y, + flip: (false, false) } } } impl<'a> Sprite for StaticSprite<'a> { fn render(&self, drawer: &mut Renderer, destination: &Rect) { - drawer.copy(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination)); + drawer.copy_ex(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination), 0.0, None, self.flip); } } @@ -35,6 +37,7 @@ pub struct AnimatedSprite<'a> { texture: &'a Texture, x: i32, y: i32, + flip: (bool, bool), frame: u32, frames: u32, time: u64, @@ -47,6 +50,7 @@ impl<'a> AnimatedSprite<'a> { texture: texture, x: x, y: y, + flip: (false, false), frame: 0, frames: frames, time: 0, @@ -74,6 +78,6 @@ impl<'a> Sprite for AnimatedSprite<'a> { } fn render(&self, drawer: &mut Renderer, destination: &Rect) { - drawer.copy_ex(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination), 0.0, None, (false, false)); + drawer.copy_ex(self.texture, Some(Rect::new_unwrap(self.x, self.y, 16, 16)), Some(*destination), 0.0, None, self.flip); } }