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.res_mut::<nightshade::render::config::RenderSettings>();
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
58 .res_mut::<nightshade::render::config::DebugDraw>()
59 .show_grid = enabled;
60}
61
62#[inline]
64pub fn set_ambient(world: &mut World, color: [f32; 4]) {
65 world
66 .res_mut::<nightshade::render::config::RenderSettings>()
67 .ambient_light = color;
68}
69
70#[inline]
72pub fn set_clear_color(world: &mut World, color: [f32; 4]) {
73 world
74 .res_mut::<nightshade::render::config::RenderSettings>()
75 .clear_color = color;
76}
77
78#[inline]
81pub fn set_fog(world: &mut World, fog: Option<Fog>) {
82 world
83 .res_mut::<nightshade::render::config::RenderSettings>()
84 .fog = fog;
85}
86
87#[inline]
89pub fn set_bloom(world: &mut World, enabled: bool) {
90 world
91 .res_mut::<nightshade::render::config::RenderSettings>()
92 .bloom_enabled = enabled;
93}
94
95#[inline]
98pub fn set_bloom_intensity(world: &mut World, intensity: f32) {
99 world
100 .res_mut::<nightshade::render::config::RenderSettings>()
101 .bloom_intensity = intensity;
102}
103
104pub fn set_time_of_day(world: &mut World, hour: f32) {
109 if world
110 .res::<nightshade::render::config::RendererState>()
111 .day_night
112 .sun_entity
113 .is_none()
114 {
115 world
116 .res_mut::<nightshade::render::config::RendererState>()
117 .day_night
118 .sun_entity = lookup_named(world, SUN_NAME).map(render_entity);
119 }
120 world
121 .res_mut::<nightshade::render::config::RenderSettings>()
122 .atmosphere = Atmosphere::DayNight;
123 world
124 .res_mut::<nightshade::render::config::RendererState>()
125 .day_night
126 .auto_cycle = true;
127 world
128 .res_mut::<nightshade::render::config::RendererState>()
129 .day_night
130 .speed = 0.0;
131 world
132 .res_mut::<nightshade::render::config::RendererState>()
133 .day_night
134 .hour = hour;
135}
136
137#[inline]
140pub fn set_exposure(world: &mut World, exposure: f32) {
141 world
142 .res_mut::<nightshade::render::config::RenderSettings>()
143 .color_grading
144 .exposure = exposure;
145}
146
147#[inline]
151pub fn set_depth_of_field(world: &mut World, depth_of_field: DepthOfField) {
152 world
153 .res_mut::<nightshade::render::config::RenderSettings>()
154 .depth_of_field = depth_of_field;
155}
156
157#[inline]
160pub fn set_ssao(world: &mut World, enabled: bool) {
161 world
162 .res_mut::<nightshade::render::config::RenderSettings>()
163 .ssao_enabled = enabled;
164}
165
166#[inline]
168pub fn set_ssr(world: &mut World, enabled: bool) {
169 world
170 .res_mut::<nightshade::render::config::RenderSettings>()
171 .ssr_enabled = enabled;
172}
173
174#[inline]
177pub fn set_ssgi(world: &mut World, enabled: bool) {
178 world
179 .res_mut::<nightshade::render::config::RenderSettings>()
180 .ssgi_enabled = enabled;
181}
182
183#[inline]
185pub fn set_taa(world: &mut World, enabled: bool) {
186 world
187 .res_mut::<nightshade::render::config::RenderSettings>()
188 .taa_enabled = enabled;
189}
190
191#[inline]
193pub fn set_tonemap(world: &mut World, tonemap: Tonemap) {
194 world
195 .res_mut::<nightshade::render::config::RenderSettings>()
196 .color_grading
197 .tonemap_algorithm = tonemap;
198}
199
200#[inline]
203pub fn set_color_grading(world: &mut World, saturation: f32, contrast: f32, brightness: f32) {
204 let grading = &mut world
205 .res_mut::<nightshade::render::config::RenderSettings>()
206 .color_grading;
207 grading.saturation = saturation;
208 grading.contrast = contrast;
209 grading.brightness = brightness;
210}
211
212pub fn screenshot(world: &mut World, path: std::path::PathBuf) {
214 queue_render_command(
215 world,
216 RenderCommand::CaptureScreenshot {
217 path: Some(path),
218 max_dimension: None,
219 },
220 );
221}