Skip to content
Snippets Groups Projects
spawning.rs 3.09 KiB
Newer Older
Louis's avatar
Louis committed
// use std::marker::PhantomData;
//
// use bevy::app::{App, Plugin};
// use bevy::ecs::system::{SystemParam, SystemState};
// use bevy::prelude::{
// 	Commands, Component, DespawnRecursiveExt, Entity, In, Query, Res, ResMut, Resource, System,
// 	With, World,
// };
// use ldtk_rust::{EntityInstance, Level};
//
// use crate::utils::SerdeClone;
// use crate::{ActiveLevel, LevelIndex, MapQuery};
//
// #[derive(Component, Copy, Clone, Debug)]
// pub struct LdtkDespawnTag;
//
// pub type TileSpawnerInput = (Level, LdtkDespawnTag);
// pub type EntitySpawnerInput = Vec<EntityInstance>;
//
// fn noop_tile_system(_: In<TileSpawnerInput>) {}
// fn noop_entity_system(_: In<EntitySpawnerInput>) {}
//
// #[derive(Resource)]
// pub struct MapSpawner {
// 	tile_spawner: Option<Box<dyn System<In = TileSpawnerInput, Out = ()>>>,
// 	entity_spawner: Option<Box<dyn System<In = EntitySpawnerInput, Out = ()>>>,
// }
//
// impl MapSpawner {
// 	pub fn new(
// 		tile_spawner: impl System<In = TileSpawnerInput, Out = ()>,
// 		entity_spawner: impl System<In = EntitySpawnerInput, Out = ()>,
// 	) -> Self {
// 		MapSpawner {
// 			tile_spawner: Some(Box::new(tile_spawner)),
// 			entity_spawner: Some(Box::new(entity_spawner)),
// 		}
// 	}
//
// 	pub fn with_tile_spawner(tile_spawner: impl System<In = TileSpawnerInput, Out = ()>) -> Self {
// 		MapSpawner {
// 			tile_spawner: Some(Box::new(tile_spawner)),
// 			entity_spawner: None,
// 		}
// 	}
// 	pub fn with_entity_spawner(
// 		entity_spawner: impl System<In = EntitySpawnerInput, Out = ()>,
// 	) -> Self {
// 		MapSpawner {
// 			entity_spawner: Some(Box::new(entity_spawner)),
// 			tile_spawner: None,
// 		}
// 	}
//
// 	pub fn run_tile_system(&mut self, level: &Level, world: &mut World) {
// 		match self.tile_spawner {
// 			Some(ref mut system) => {
// 				system.run((level.serde_clone(), LdtkDespawnTag), world);
// 			}
// 			None => {}
// 		}
// 	}
// 	pub fn run_entity_system(&mut self, level: &Level, world: &mut World) {
// 		match self.entity_spawner {
// 			Some(ref mut system) => {
// 				let entity_list = MapQuery::get_owned_entities_of(level);
// 				system.run(entity_list, world);
// 			}
// 			None => {}
// 		}
// 	}
// }
//
// pub fn ldtk_spawning_system(
// 	world: &mut World,
// 	systems: &mut SystemState<(
// 		Commands,
// 		Option<Res<ActiveLevel>>,
// 		Option<ResMut<MapSpawner>>,
// 		Res<LevelIndex>,
// 		Query<Entity, With<LdtkDespawnTag>>,
// 	)>,
// ) {
// 	let (mut commands, active_level, mut spawning_systems, level_index, existing_query) =
// 		systems.get_mut(world);
//
// 	let active_level = match active_level {
// 		Some(res) => res,
// 		None => return,
// 	};
//
// 	if active_level.is_added() || (active_level.is_changed() && active_level.dirty) {
// 		for entity in &existing_query {
// 			commands.entity(entity).despawn_recursive();
// 		}
//
// 		let level = match level_index.get(&active_level.map) {
// 			Some(level) => level,
// 			None => return,
// 		};
//
// 		if let Some(mut spawning_systems) = spawning_systems {
// 			spawning_systems.run_tile_system(level, world);
// 			spawning_systems.run_entity_system(level, world);
// 		}
// 	}
// }