bevy_entitiles 0.2.3

A 2d tilemap library for bevy. With many useful algorithms/tools built in.
use bevy::{
    ecs::entity::Entity,
    math::{UVec2, Vec2, Vec4},
};

use crate::{
    math::aabb::AabbBox2d,
    render::{buffer::TileAnimation, extract::ExtractedTilemap, texture::TilemapTexture},
    tilemap::{map::Tilemap, tile::TileType},
    MAX_ANIM_COUNT,
};

pub struct PubTilemap {
    pub id: Entity,
    pub tile_type: TileType,
    pub size: UVec2,
    pub tile_render_size: Vec2,
    pub tile_slot_size: Vec2,
    pub pivot: Vec2,
    pub render_chunk_size: u32,
    pub texture: Option<TilemapTexture>,
    pub layer_opacities: Vec4,
    pub tiles: Vec<Option<Entity>>,
    pub aabb: AabbBox2d,
    pub translation: Vec2,
    pub z_order: i32,
    pub anim_seqs: [TileAnimation; MAX_ANIM_COUNT],
}

impl PubTilemap {
    pub fn from_tilemap(value: &Tilemap) -> Self {
        Self {
            id: value.id,
            tile_type: value.tile_type,
            size: value.size,
            tile_render_size: value.tile_render_size,
            tile_slot_size: value.tile_slot_size,
            pivot: value.pivot,
            render_chunk_size: value.render_chunk_size,
            texture: value.texture.clone(),
            layer_opacities: value.layer_opacities,
            tiles: value.tiles.clone(),
            aabb: value.aabb,
            translation: value.translation,
            z_order: value.z_order,
            anim_seqs: value.anim_seqs,
        }
    }

    pub fn from_extracted_tilemap(value: ExtractedTilemap) -> Self {
        Self {
            id: value.id,
            tile_type: value.tile_type,
            size: value.size,
            tile_render_size: value.tile_render_size,
            tile_slot_size: value.tile_slot_size,
            pivot: value.pivot,
            render_chunk_size: value.render_chunk_size,
            texture: value.texture,
            layer_opacities: value.layer_opacities,
            tiles: vec![],
            aabb: value.aabb,
            translation: value.translation,
            z_order: value.z_order,
            anim_seqs: value.anim_seqs,
        }
    }

    pub fn into_extracted_tilemap(self) -> ExtractedTilemap {
        ExtractedTilemap {
            id: self.id,
            tile_type: self.tile_type,
            size: self.size,
            tile_render_size: self.tile_render_size,
            tile_slot_size: self.tile_slot_size,
            pivot: self.pivot,
            render_chunk_size: self.render_chunk_size,
            texture: self.texture,
            layer_opacities: self.layer_opacities,
            translation: self.translation,
            aabb: self.aabb,
            z_order: self.z_order,
            anim_seqs: self.anim_seqs,
            time: 0.,
        }
    }
}