nightshade-api 0.53.0

Procedural high level API for the nightshade game engine
Documentation
//! Render layers and culling masks: put an entity on a layer, and choose which
//! layers a camera sees. The pair keeps first person arms, editor gizmos, a
//! minimap, or a render-to-texture pass out of views that should not show them.

use nightshade::ecs::primitives::CameraCullingMask;
use nightshade::ecs::world::{CAMERA_CULLING_MASK, RENDER_LAYER};
use nightshade::prelude::*;
use nightshade::render::render_layer::RenderLayer;

/// Puts the entity on a render layer, a bitmask. A camera renders the entity
/// only when its layers (see [`set_camera_layers`]) include this one. Entities
/// default to layer 1.
pub fn set_render_layer(world: &mut World, entity: Entity, layer: u32) {
    world.ecs.worlds[CORE].add_components(entity, RENDER_LAYER);
    world.set(entity, RenderLayer(layer));
}

/// Sets which render layers a camera sees, a bitmask. An entity renders into
/// this camera only when its [`set_render_layer`] is in the mask. Cameras
/// default to seeing every layer.
pub fn set_camera_layers(world: &mut World, camera: Entity, mask: u32) {
    world.ecs.worlds[CORE].add_components(camera, CAMERA_CULLING_MASK);
    world.set(camera, CameraCullingMask(mask));
}