Skip to content
Snippets Groups Projects
lib.rs 2.48 KiB
Newer Older
#[cfg(feature = "_supports_ldtk")]
Louis's avatar
Louis committed
mod assets;
mod camera;
mod map_query;
Louis's avatar
Louis committed
mod pregen;
#[cfg(feature = "_supports_ldtk")]
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 {
Louis's avatar
Louis committed
	use bevy::ecs::query::QueryFilter;
Louis's avatar
Louis committed
	use std::marker::PhantomData;

	use bevy::prelude::*;
Louis's avatar
Louis committed

	pub struct MicroLDTKPlugin;
	impl Plugin for MicroLDTKPlugin {
		fn build(&self, app: &mut App) {
			#[cfg(feature = "_supports_ldtk")]
				app.add_event::<super::system::LevelDataUpdated>()
					.init_asset::<super::ldtk::Project>()
					.init_asset::<super::ldtk::Level>()
					.init_asset::<super::ldtk::LevelSet>()
					.init_asset_loader::<super::ldtk::LdtkLoader>()
					.init_asset_loader::<super::ldtk::LdtkLevelLoader>()
					.init_resource::<super::assets::TilesetIndex>()
					.init_resource::<super::assets::LevelIndex>()
					.add_systems(
						Update,
						(
							super::assets::handle_ldtk_project_events,
							super::assets::handle_ldtk_level_events,
							super::assets::handle_ldtk_level_set_events,
						),
					);
Louis's avatar
Louis committed
		}
	}

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

Louis's avatar
Louis committed
	pub struct MicroLDTKCameraPlugin<CameraFilter: QueryFilter> {
Louis's avatar
Louis committed
		_p: PhantomData<CameraFilter>,
	}
Louis's avatar
Louis committed
	impl<CameraFilter: QueryFilter + Send + Sync + 'static> Plugin
Louis's avatar
Louis committed
		for MicroLDTKCameraPlugin<CameraFilter>
	{
		fn build(&self, app: &mut App) {
			app.add_systems(
				PostUpdate,
				super::camera::lock_camera_to_level::<CameraFilter>,
Louis's avatar
Louis committed
			);
		}
	}
}

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

pub use __plugin::{MicroLDTKCameraPlugin, MicroLDTKPlugin};
pub use assets::{LevelIndex, TileMetadata, TilesetIndex};
pub use camera::CameraBounder;
pub use ldtk::{LdtkLoader, LdtkProject};
Louis's avatar
Louis committed
pub use map_query::{CameraBounds, InstanceRef, MapQuery};
#[cfg(feature = "autotile")]
pub use micro_autotile as autotile;
pub use pregen::{write_layer_to_texture, write_map_to_texture, Rasterise};
pub use system::*;