From 6bf9e96140c91340d6ae643b6e0896aa734d8605 Mon Sep 17 00:00:00 2001 From: tom barrett Date: Tue, 2 Jul 2019 04:23:33 -0500 Subject: entities now spawn on points --- src/entity.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/entity.rs (limited to 'src/entity.rs') 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, + source: Rect, + spawn: Point2, +} + +impl Entity { + pub fn new(tileset: &Tileset, spawn: Point2) -> 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 { + let mut entities = Vec::new(); + + for (_name, position) in map.get_spawns() { + entities.push(Entity::new(tileset, position)); + } + + entities + } +} -- cgit v1.2.3