diff options
Diffstat (limited to 'src/animations.rs')
-rw-r--r-- | src/animations.rs | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/animations.rs b/src/animations.rs index d19a8ff..e2cc009 100644 --- a/src/animations.rs +++ b/src/animations.rs @@ -1,9 +1,9 @@ -use ggez::graphics::{spritebatch::SpriteBatch, DrawParam}; -use ggez::nalgebra::{Point2, Vector2}; +use ggez::graphics::spritebatch::SpriteBatch; +use ggez::nalgebra::Point2; +use rand::Rng; use std::collections::HashMap; use std::time::Instant; -use crate::constants; use crate::entity::Action; use crate::tile::{flip, Tile}; use crate::tileset::Tileset; @@ -30,7 +30,13 @@ impl Animation { pub fn update(&mut self) { if let Some(mut i) = self.frames.iter().position(|a| a == &self.current) { - if let Some(delay) = self.current.properties.delay { + if let Some(mut delay) = self.current.properties.delay { + if let Some(scramble_delay) = self.current.properties.scramble_delay { + if scramble_delay { + delay = rand::thread_rng().gen_range(delay as f32 * 0.6, delay as f32 * 1.4) + as usize; + } + } if self.timer.elapsed().as_millis() > delay as u128 { i = if i == self.frames.len() - 1 { 0 } else { i + 1 }; self.current = self.frames[i].clone(); @@ -43,16 +49,7 @@ impl Animation { } pub fn draw(&self, spritebatch: &mut SpriteBatch, position: Point2<f32>) { - if self.current.properties.visible.is_none() { - spritebatch.add( - DrawParam::default() - .src(self.current.source) - .rotation(self.current.properties.rotation) - .offset(Point2::new(0.5, 0.5)) - .dest(position) - .scale(Vector2::new(constants::TILE_SCALE, constants::TILE_SCALE)), - ); - } + self.current.draw(spritebatch, position); } } |