diff options
Diffstat (limited to 'src/entity.rs')
-rw-r--r-- | src/entity.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/entity.rs b/src/entity.rs new file mode 100644 index 0000000..bd29a84 --- /dev/null +++ b/src/entity.rs @@ -0,0 +1,45 @@ +use ggez::graphics::{spritebatch::SpriteBatch, DrawParam, Rect}; +use ggez::nalgebra::{Point2, Vector2}; + +use crate::constants; +use crate::map::Map; +use crate::tileset::Tileset; + +#[derive(Clone)] +pub struct Entity { + position: Point2<f32>, + source: Rect, + spawn: Point2<f32>, +} + +impl Entity { + pub fn new(tileset: &Tileset, spawn: Point2<f32>) -> Entity { + let mut source = tileset.get_tile_by_entity_keyframe("player-top", 0); + source.h += tileset.get_tile_by_entity_keyframe("player-bottom", 0).h; + + Entity { + position: spawn, + source, + spawn, + } + } + + pub fn draw(&self, spritebatch: &mut SpriteBatch) { + let draw_param = DrawParam::default() + .src(self.source) + .dest(self.position) + .scale(Vector2::new(constants::TILE_SCALE, constants::TILE_SCALE)); + + spritebatch.add(draw_param); + } + + pub fn build_entities(tileset: &Tileset, map: &Map) -> Vec<Entity> { + let mut entities = Vec::new(); + + for (_name, position) in map.get_spawns() { + entities.push(Entity::new(tileset, position)); + } + + entities + } +} |