nightshade_api/
environment.rs1use crate::runner::{SUN_NAME, lookup_named};
4use nightshade::prelude::*;
5use nightshade::render::config::DepthOfField;
6use serde::{Deserialize, Serialize};
7
8pub use nightshade::render::config::TonemapAlgorithm as Tonemap;
12
13#[derive(Clone, Debug, Serialize, Deserialize, enum2schema::Schema)]
15pub enum Background {
16 Sky,
18 CloudySky,
20 Space,
22 Nebula,
24 Sunset,
26 Color([f32; 4]),
28 Hdr(Vec<u8>),
30}
31
32pub fn set_background(world: &mut World, background: Background) {
37 let settings = &mut world.resources.render_settings;
38 match background {
39 Background::Sky => settings.atmosphere = Atmosphere::Sky,
40 Background::CloudySky => settings.atmosphere = Atmosphere::CloudySky,
41 Background::Space => settings.atmosphere = Atmosphere::Space,
42 Background::Nebula => settings.atmosphere = Atmosphere::Nebula,
43 Background::Sunset => settings.atmosphere = Atmosphere::Sunset,
44 Background::Color(color) => {
45 settings.atmosphere = Atmosphere::None;
46 settings.clear_color = color;
47 }
48 Background::Hdr(bytes) => {
49 load_hdr_skybox(world, bytes);
50 }
51 }
52}
53
54#[inline]
56pub fn show_grid(world: &mut World, enabled: bool) {
57 world.resources.debug_draw.show_grid = enabled;
58}
59
60#[inline]
62pub fn set_ambient(world: &mut World, color: [f32; 4]) {
63 world.resources.render_settings.ambient_light = color;
64}
65
66#[inline]
68pub fn set_clear_color(world: &mut World, color: [f32; 4]) {
69 world.resources.render_settings.clear_color = color;
70}
71
72#[inline]
75pub fn set_fog(world: &mut World, fog: Option<Fog>) {
76 world.resources.render_settings.fog = fog;
77}
78
79#[inline]
81pub fn set_bloom(world: &mut World, enabled: bool) {
82 world.resources.render_settings.bloom_enabled = enabled;
83}
84
85#[inline]
88pub fn set_bloom_intensity(world: &mut World, intensity: f32) {
89 world.resources.render_settings.bloom_intensity = intensity;
90}
91
92pub fn set_time_of_day(world: &mut World, hour: f32) {
97 if world
98 .resources
99 .renderer_state
100 .day_night
101 .sun_entity
102 .is_none()
103 {
104 world.resources.renderer_state.day_night.sun_entity =
105 lookup_named(world, SUN_NAME).map(render_entity);
106 }
107 world.resources.render_settings.atmosphere = Atmosphere::DayNight;
108 world.resources.renderer_state.day_night.auto_cycle = true;
109 world.resources.renderer_state.day_night.speed = 0.0;
110 world.resources.renderer_state.day_night.hour = hour;
111}
112
113#[inline]
116pub fn set_exposure(world: &mut World, exposure: f32) {
117 world.resources.render_settings.color_grading.exposure = exposure;
118}
119
120#[inline]
124pub fn set_depth_of_field(world: &mut World, depth_of_field: DepthOfField) {
125 world.resources.render_settings.depth_of_field = depth_of_field;
126}
127
128#[inline]
131pub fn set_ssao(world: &mut World, enabled: bool) {
132 world.resources.render_settings.ssao_enabled = enabled;
133}
134
135#[inline]
137pub fn set_ssr(world: &mut World, enabled: bool) {
138 world.resources.render_settings.ssr_enabled = enabled;
139}
140
141#[inline]
144pub fn set_ssgi(world: &mut World, enabled: bool) {
145 world.resources.render_settings.ssgi_enabled = enabled;
146}
147
148#[inline]
150pub fn set_taa(world: &mut World, enabled: bool) {
151 world.resources.render_settings.taa_enabled = enabled;
152}
153
154#[inline]
156pub fn set_tonemap(world: &mut World, tonemap: Tonemap) {
157 world
158 .resources
159 .render_settings
160 .color_grading
161 .tonemap_algorithm = tonemap;
162}
163
164#[inline]
167pub fn set_color_grading(world: &mut World, saturation: f32, contrast: f32, brightness: f32) {
168 let grading = &mut world.resources.render_settings.color_grading;
169 grading.saturation = saturation;
170 grading.contrast = contrast;
171 grading.brightness = brightness;
172}
173
174pub fn screenshot(world: &mut World, path: std::path::PathBuf) {
176 queue_render_command(
177 world,
178 RenderCommand::CaptureScreenshot {
179 path: Some(path),
180 max_dimension: None,
181 },
182 );
183}