Invoked like so:
// State
MapSpawner::spawn_world(&mut data.world, asset_id);
// System
MapSpawner::spawn(&mut system_data, asset_id);Spawn functions:
pub struct MapSpawner;
impl MapSpawner {
pub fn spawn_world(world: &mut World, asset_id: AssetId) -> Entity {
Self::spawn(&mut world.system_data::<MapSpawnerResources>(), asset_id)
}
pub fn spawn(
MapSpawnerResources {
entities,
asset_id_mappings,
asset_item_ids,
asset_ids,
item_ids,
}: &mut MapSpawnerResources,
asset_id: AssetId,
) -> Entity {
entities.create_entity()
.with(item_id, item_ids)
// ..
.build()
}
}System data:
use amethyst::{
ecs::{Entities, Read, World, WriteStorage},
shred::{ResourceId, SystemData},
};
use asset_model::loaded::{AssetId, AssetIdMappings, AssetItemIds, ItemId};
#[derive(SystemData)]
pub struct MapSpawnerResources<'s> {
pub entities: Entities<'s>,
pub asset_id_mappings: Read<'s, AssetIdMappings>,
pub asset_item_ids: Read<'s, AssetItemIds>,
pub asset_ids: WriteStorage<'s, AssetId>,
pub item_ids: WriteStorage<'s, ItemId>,
}