bevy_entitiles 0.4.0

A 2d tilemap library for bevy. With many useful algorithms/tools built in.
Documentation
use std::marker::PhantomData;

use bevy::{
    asset::AssetServer,
    ecs::{bundle::Bundle, system::EntityCommands},
    utils::HashMap,
};

use super::{
    resources::TiledAssets,
    xml::{layer::TiledObjectInstance, property::ClassInstance},
};

pub type TiledObjectRegistry = HashMap<String, Box<dyn PhantomTiledObjectTrait>>;

pub trait TiledObject {
    fn initialize(
        commands: &mut EntityCommands,
        object_instance: &TiledObjectInstance,
        components: &HashMap<String, ClassInstance>,
        asset_server: &AssetServer,
        tiled_assets: &TiledAssets,
        tiled_map: String,
    );
}

pub struct PhantomTiledObject<T: TiledObject + Bundle> {
    marker: PhantomData<T>,
}

impl<T: TiledObject + Bundle> PhantomTiledObject<T> {
    pub fn new() -> Self {
        Self {
            marker: PhantomData,
        }
    }
}

pub trait PhantomTiledObjectTrait {
    fn initialize(
        &self,
        commands: &mut EntityCommands,
        object_instance: &TiledObjectInstance,
        components: &HashMap<String, ClassInstance>,
        asset_server: &AssetServer,
        tiled_assets: &TiledAssets,
        tiled_map: String,
    );
}

impl<T: TiledObject + Bundle> PhantomTiledObjectTrait for PhantomTiledObject<T> {
    fn initialize(
        &self,
        commands: &mut EntityCommands,
        object_instance: &TiledObjectInstance,
        components: &HashMap<String, ClassInstance>,
        asset_server: &AssetServer,
        tiled_assets: &TiledAssets,
        tiled_map: String,
    ) {
        T::initialize(
            commands,
            object_instance,
            components,
            asset_server,
            tiled_assets,
            tiled_map,
        );
    }
}

pub trait TiledEnum {
    fn get_identifier(ident: &str) -> Self;
}