From bdd3d4db3abc22186b111a7c56bef231cecb52a3 Mon Sep 17 00:00:00 2001 From: logaritmisk Date: Tue, 7 Jun 2016 23:46:13 +0200 Subject: [PATCH] And he can stand still! --- src/main.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1504dc4..5551615 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ extern crate sdl2_image; use std::path::Path; -use std::cell::RefCell; +use std::cell::{Cell, RefCell}; use std::collections::HashMap; use sdl2_image::LoadTexture; @@ -105,12 +105,16 @@ impl Updatable for PlayerPhysicsComponent { struct PlayerGraphicsComponent<'a> { + flip_horizontal: Cell, + sprite_standing: RefCell>, sprite_running: RefCell> } impl<'a> PlayerGraphicsComponent<'a> { pub fn new(texture: &'a Texture) -> PlayerGraphicsComponent<'a> { PlayerGraphicsComponent { + flip_horizontal: Cell::new(false), + sprite_standing: RefCell::new(StaticSprite::new(&texture, 80, 32)), sprite_running: RefCell::new(AnimatedSprite::new(&texture, 96, 32, 3, 10.0)) } } @@ -118,15 +122,25 @@ impl<'a> PlayerGraphicsComponent<'a> { impl<'a> Renderable for PlayerGraphicsComponent<'a> { fn render(&self, object: &GameObject, elapsed: f64, renderer: &mut Renderer, destination: &Rect) { - let mut sprite = self.sprite_running.borrow_mut(); + if object.dx == 0.0 { + let mut sprite = self.sprite_standing.borrow_mut(); - if object.dx < 0.0 { - sprite.flip_horizontal = true; - } else if object.dx > 0.0 { - sprite.flip_horizontal = false; - } + sprite.flip_horizontal = self.flip_horizontal.get(); - sprite.render(elapsed, renderer, destination); + sprite.render(elapsed, renderer, destination); + } else { + let mut sprite = self.sprite_running.borrow_mut(); + + if object.dx < 0.0 { + sprite.flip_horizontal = true; + self.flip_horizontal.set(true); + } else if object.dx > 0.0 { + sprite.flip_horizontal = false; + self.flip_horizontal.set(false); + } + + sprite.render(elapsed, renderer, destination); + }; } }