use crate::entities::motion::Velocity; use crate::entities::Player; use crate::system::Background; use bevy::ecs::system::SystemParam; use bevy::prelude::{AssetServer, Commands, Entity, Res, SpriteBundle, Transform, Vec2}; static Z_PLAYER: f32 = 300.0; static Z_ITEMS: f32 = 200.0; static Z_ENEMY: f32 = 250.0; static Z_BACKGROUND: f32 = 50.0; #[derive(SystemParam)] pub struct EntitySpawner<'w, 's> { commands: Commands<'w, 's>, assets: Res<'w, AssetServer>, } impl<'w, 's> EntitySpawner<'w, 's> { pub fn spawn_player_at(&mut self, position: Vec2) -> Entity { self.commands .spawn(( SpriteBundle { texture: self.assets.load("sprites/ship.png"), transform: Transform::from_translation(position.extend(Z_PLAYER)), ..Default::default() }, Velocity::ZERO, Player, )) .id() } pub fn spawn_background_at(&mut self, position: Vec2) -> Entity { self.commands .spawn(( SpriteBundle { texture: self.assets.load("sprites/background.png"), transform: Transform::from_translation(position.extend(Z_BACKGROUND)), ..Default::default() }, Velocity::from(Vec2::new(-75.0, 0.0)), Background, )) .id() } }