rust-sokoban/src/entities.rs

51 lines
1.4 KiB
Rust

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();
}