bevy_entitiles 0.11.0

A 2d tilemap library for bevy. With many useful algorithms/tools built in.
Documentation
use bevy::{app::App, ecs::bundle::Bundle};

use crate::tiled::traits::{
    PhantomTiledCustomTile, PhantomTiledObject, TiledCustomTile, TiledCustomTileRegistry,
    TiledObject, TiledObjectRegistry,
};

pub trait TiledApp {
    fn register_tiled_object<T: TiledObject + Bundle>(&mut self, ident: &str) -> &mut Self;
    fn register_tiled_custom_tile<T: TiledCustomTile + Bundle>(&mut self, ident: &str)
        -> &mut Self;
}

impl TiledApp for App {
    fn register_tiled_object<T: TiledObject + Bundle>(&mut self, ident: &str) -> &mut Self {
        match self
            .world_mut()
            .get_non_send_resource_mut::<TiledObjectRegistry>()
        {
            Some(mut registry) => {
                registry.insert(ident.to_string(), Box::new(PhantomTiledObject::<T>::new()));
                self
            }
            None => {
                self.world_mut()
                    .insert_non_send_resource(TiledObjectRegistry::default());
                self.register_tiled_object::<T>(ident)
            }
        }
    }

    fn register_tiled_custom_tile<T: TiledCustomTile + Bundle>(
        &mut self,
        ident: &str,
    ) -> &mut Self {
        match self
            .world_mut()
            .get_non_send_resource_mut::<TiledCustomTileRegistry>()
        {
            Some(mut registry) => {
                registry.insert(
                    ident.to_string(),
                    Box::new(PhantomTiledCustomTile::<T>::new()),
                );
                self
            }
            None => {
                self.world_mut()
                    .insert_non_send_resource(TiledCustomTileRegistry::default());
                self.register_tiled_custom_tile::<T>(ident)
            }
        }
    }
}