use crate::components::*; use specs::{Builder, EntityBuilder, World, WorldExt}; /// Cut down on the common syntax boilerplate fn common_entity<'w>( world: &'w mut World, position: Position, z: u8, sprite_path: &str, ) -> EntityBuilder<'w> { return world .create_entity() .with(position.with_z(z)) .with(Renderable { path: sprite_path.to_string(), }); } pub fn create_wall(world: &mut World, position: Position) { common_entity(world, position, 10, "/images/wall.png") .with(Wall {}) .with(Immovable) .build(); } pub fn create_floor(world: &mut World, position: Position) { common_entity(world, position, 5, "/images/floor.png").build(); } pub fn create_box(world: &mut World, position: Position, color: BoxColor) { let path = format!("/images/box_{}.png", color); common_entity(world, position, 10, &path) .with(Box { color }) .with(Movable) .build(); } pub fn create_box_spot(world: &mut World, position: Position, color: BoxColor) { let path = format!("/images/box_spot_{}.png", color); common_entity(world, position, 9, &path) .with(BoxSpot { color }) .build(); } pub fn create_player(world: &mut World, position: Position) { common_entity(world, position, 10, "/images/player.png") .with(Player {}) .with(Movable) .build(); }