use crate::runner::{SUN_NAME, lookup_named};
use nightshade::ecs::graphics::resources::DepthOfField;
use nightshade::prelude::*;
pub enum Background {
Sky,
CloudySky,
Space,
Nebula,
Sunset,
Color([f32; 4]),
Hdr(Vec<u8>),
}
pub fn set_background(world: &mut World, background: Background) {
match background {
Background::Sky => set_atmosphere(world, Atmosphere::Sky),
Background::CloudySky => set_atmosphere(world, Atmosphere::CloudySky),
Background::Space => set_atmosphere(world, Atmosphere::Space),
Background::Nebula => set_atmosphere(world, Atmosphere::Nebula),
Background::Sunset => set_atmosphere(world, Atmosphere::Sunset),
Background::Color(color) => {
world.resources.render_settings.atmosphere = Atmosphere::None;
world.resources.render_settings.clear_color = color;
}
Background::Hdr(bytes) => {
load_hdr_skybox(world, bytes);
}
}
}
fn set_atmosphere(world: &mut World, atmosphere: Atmosphere) {
world.resources.render_settings.atmosphere = atmosphere;
capture_procedural_atmosphere_ibl(world, atmosphere, 0.0);
}
#[inline]
pub fn show_grid(world: &mut World, enabled: bool) {
world.resources.debug_draw.show_grid = enabled;
}
#[inline]
pub fn set_ambient(world: &mut World, color: [f32; 4]) {
world.resources.render_settings.ambient_light = color;
}
#[inline]
pub fn set_fog(world: &mut World, fog: Option<Fog>) {
world.resources.render_settings.fog = fog;
}
#[inline]
pub fn set_bloom(world: &mut World, enabled: bool) {
world.resources.render_settings.bloom_enabled = enabled;
}
pub fn set_time_of_day(world: &mut World, hour: f32) {
if world
.resources
.renderer_state
.day_night
.sun_entity
.is_none()
{
world.resources.renderer_state.day_night.sun_entity = lookup_named(world, SUN_NAME);
}
world.resources.render_settings.atmosphere = Atmosphere::DayNight;
world.resources.renderer_state.day_night.auto_cycle = true;
world.resources.renderer_state.day_night.speed = 0.0;
world.resources.renderer_state.day_night.hour = hour;
}
#[inline]
pub fn set_exposure(world: &mut World, exposure: f32) {
world.resources.render_settings.color_grading.exposure = exposure;
}
#[inline]
pub fn set_depth_of_field(world: &mut World, depth_of_field: DepthOfField) {
world.resources.render_settings.depth_of_field = depth_of_field;
}
#[inline]
pub fn set_title(world: &mut World, title: &str) {
world.resources.window.title = title.to_string();
}
pub fn screenshot(world: &mut World, path: std::path::PathBuf) {
queue_render_command(
world,
RenderCommand::CaptureScreenshot {
path: Some(path),
max_dimension: None,
},
);
}