Skip to content
Snippets Groups Projects
lib.rs 2.33 KiB
Newer Older
Louis's avatar
Louis committed
mod assets;
mod camera;
mod locator;
mod map_query;
Louis's avatar
Louis committed
mod pregen;
Louis's avatar
Louis committed
pub(crate) mod utils;
Louis's avatar
Louis committed
// mod spawning;
Louis's avatar
Louis committed

pub static mut LDTK_TILE_SCALE: AtomicU32 = AtomicU32::new(32);
pub fn get_ldtk_tile_scale() -> f32 {
	unsafe { *LDTK_TILE_SCALE.get_mut() as f32 }
}
pub fn set_ldtk_tile_scale_u32(scale: u32) {
	unsafe {
		LDTK_TILE_SCALE.store(scale, Ordering::Release);
	}
}
pub fn set_ldtk_tile_scale_f32(scale: f32) {
	unsafe {
		LDTK_TILE_SCALE.store(scale as u32, Ordering::Release);
	}
}

mod __plugin {
	use std::marker::PhantomData;

	use bevy::app::{App, CoreStage, Plugin};
	use bevy::asset::AddAsset;
	use bevy::ecs::query::ReadOnlyWorldQuery;

Louis's avatar
Louis committed
	use crate::LevelDataUpdated;

Louis's avatar
Louis committed
	pub struct MicroLDTKPlugin;
	impl Plugin for MicroLDTKPlugin {
		fn build(&self, app: &mut App) {
Louis's avatar
Louis committed
			app.add_event::<LevelDataUpdated>()
				.init_resource::<super::assets::TilesetIndex>()
Louis's avatar
Louis committed
				.init_resource::<super::assets::LevelIndex>()
				.add_asset::<super::assets::LdtkProject>()
				.add_asset_loader(super::assets::LdtkLoader)
				.add_system(super::assets::handle_ldtk_project_events);
		}
	}

	impl<CameraFilter: ReadOnlyWorldQuery + Send + Sync + 'static> MicroLDTKCameraPlugin<CameraFilter> {
		pub fn new() -> Self {
			Self {
				_p: PhantomData::default(),
			}
		}
	}
	impl<CameraFilter: ReadOnlyWorldQuery + Send + Sync + 'static> Default
		for MicroLDTKCameraPlugin<CameraFilter>
	{
		fn default() -> Self {
			Self::new()
		}
	}
Louis's avatar
Louis committed

	pub struct MicroLDTKCameraPlugin<CameraFilter: ReadOnlyWorldQuery> {
		_p: PhantomData<CameraFilter>,
	}
	impl<CameraFilter: ReadOnlyWorldQuery + Send + Sync + 'static> Plugin
		for MicroLDTKCameraPlugin<CameraFilter>
	{
		fn build(&self, app: &mut App) {
			app.add_system_to_stage(
				CoreStage::PostUpdate,
				super::camera::lock_camera_to_level::<CameraFilter>,
			);
		}
	}
}

use std::sync::atomic::{AtomicU32, Ordering};

pub use __plugin::{MicroLDTKCameraPlugin, MicroLDTKPlugin};
pub use assets::{LdtkLoader, LdtkProject, LevelIndex, TileMetadata, TilesetIndex};
pub use camera::CameraBounder;
pub use map_query::{CameraBounds, MapQuery};
Louis's avatar
Louis committed
pub use pregen::{
	write_layer_to_texture, write_map_to_texture, Rasterise, SuppliesImage, SuppliesTextureAtlas,
};
pub use types::{LdtkLayer, LdtkLevel, LevelDataUpdated, SpatialIndex, TileFlip, TileRef};
pub use utils::{entity_centre, grid_to_px, px_to_grid, ActiveLevel, Indexer, WorldLinked};