pub use crate::platform::input::events::AppEvent;
pub mod cleanup;
pub mod commands;
pub mod scratch;
pub use commands::{CommandQueues, EcsCommand, RenderCommand, load_hdr_skybox};
#[cfg(not(target_arch = "wasm32"))]
pub use commands::{capture_screenshot, capture_screenshot_to_path};
pub use scratch::Scratch;
pub use nalgebra_glm::{Mat4, Quat, Vec2, Vec3, Vec4};
pub use nightshade_ecs::Entity;
nightshade_ecs::dynamic_schema!(@consts 1u64;
ANIMATION_PLAYER,
BOUNDING_VOLUME,
CAMERA_CULLING_MASK,
CAMERA_ENVIRONMENT,
CAMERA_POST_PROCESS,
CAMERA,
CASTS_SHADOW,
CLOTH,
CONSTRAINED_ASPECT,
CULLING_MASK,
DECAL,
GLOBAL_TRANSFORM,
GUID,
HOVERED,
IGNORE_PARENT_SCALE,
INSTANCED_MESH,
JOINT,
LIGHT,
LINES,
LOCAL_TRANSFORM,
MATERIAL_REF,
MATERIAL_VARIANTS,
MORPH_WEIGHTS,
NAME,
PAN_ORBIT_CAMERA,
PARENT,
PARTICLE_EMITTER,
PREFAB_SOURCE,
RENDER_LAYER,
RENDER_MESH,
ROTATION,
SCRIPT,
SKIN,
TEXT_CHARACTER_BACKGROUND_COLORS,
TEXT_CHARACTER_COLORS,
TEXT,
THIRD_PERSON_CAMERA,
VIEWPORT_SHADING,
VIEWPORT_UPDATE_MODE,
VISIBILITY,
WATER,
BEAM,
LIGHTNING_BOLT,
TRAIL,
VFX_ANIMATOR,
MESHLET_MESH,
PROJECTION_OVERRIDE,
RENDER_TARGET
);
pub const CORE: usize = 0;
pub const UI: usize = 1;
pub const RENDER: usize = 2;
#[derive(Default)]
pub struct WorldId(pub u64);
pub use nightshade_ui::schema::*;
pub const GAME: usize = 3;
pub struct World {
pub ecs: nightshade_ecs::dynamic::DynEcs,
}
impl World {
pub fn plugin_resource<T: Send + Sync + 'static>(&self) -> &T {
self.ecs.resource::<T>().unwrap_or_else(|| {
panic!(
"plugin resource {} is missing; compose the plugin that owns it",
std::any::type_name::<T>()
)
})
}
pub fn plugin_resource_mut<T: Send + Sync + 'static>(&mut self) -> &mut T {
self.ecs.resource_mut::<T>().unwrap_or_else(|| {
panic!(
"plugin resource {} is missing; compose the plugin that owns it",
std::any::type_name::<T>()
)
})
}
pub fn set<T: Send + Sync + Default + 'static>(&mut self, entity: Entity, value: T) {
let index = match self.ecs.route::<T>() {
Some(index) => index,
None => {
if self.ecs.worlds.len() <= GAME {
self.ecs
.add_world_at(GAME, nightshade_ecs::dynamic::ComponentRegistry::default());
}
GAME
}
};
self.ecs.worlds[index].set(entity, value);
}
}
impl std::ops::Deref for World {
type Target = nightshade_ecs::dynamic::DynEcs;
fn deref(&self) -> &Self::Target {
&self.ecs
}
}
impl std::ops::DerefMut for World {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.ecs
}
}
impl nightshade_ecs::dynamic::ResourceHost for World {
fn resource_map_mut(&mut self) -> &mut nightshade_ecs::dynamic::ResourceMap {
&mut self.ecs.resources
}
fn resource_map(&self) -> &nightshade_ecs::dynamic::ResourceMap {
&self.ecs.resources
}
}
impl nightshade_ecs::system_param::EventHost for World {
fn event_bus_mut(&mut self) -> &mut nightshade_ecs::dynamic::EventBus {
&mut self.ecs.events
}
fn event_bus(&self) -> &nightshade_ecs::dynamic::EventBus {
&self.ecs.events
}
}
pub use crate::platform::input::resources::DroppedFile;