Skip to content

Instantly share code, notes, and snippets.

@azriel91
Last active January 26, 2020 20:33
Show Gist options
  • Select an option

  • Save azriel91/e23e601a49903891a20fe3d856d1da53 to your computer and use it in GitHub Desktop.

Select an option

Save azriel91/e23e601a49903891a20fe3d856d1da53 to your computer and use it in GitHub Desktop.

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>,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment