Newer
Older
use bevy::ecs::system::SystemParam;
use bevy::prelude::*;
use crate::assets::AssetHandles;
use crate::entities::lifecycle::GameEntity;
use crate::system::camera::ChaseCam;
use crate::system::graphics::LAYER_CREATURE;
use crate::world::level_map::GridPosition;
const PLAYER_SPRITE: usize = 2;
#[derive(SystemParam)]
pub struct EntitySpawner<'w, 's> {
pub commands: Commands<'w, 's>,
pub handles: Res<'w, AssetHandles>,
}
impl<'w, 's> EntitySpawner<'w, 's> {
pub fn spawn_player(&mut self, grid_position: UVec2) {
let mut entity = self.commands.spawn();
entity
.insert(ChaseCam)
.insert(GameEntity)
.insert(GridPosition(grid_position));
entity.insert_bundle(SpriteSheetBundle {
texture_atlas: self.handles.atlas("creatures"),
transform: Transform::from_translation(grid_position.as_vec2().extend(LAYER_CREATURE)),
sprite: TextureAtlasSprite {
index: PLAYER_SPRITE,
..Default::default()
},
..Default::default()
});
}
}