fix(sky): actually commit the file...
Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
63
src/nodes/drawable/sky.rs
Normal file
63
src/nodes/drawable/sky.rs
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
use bevy::{
|
||||||
|
app::{Plugin, Update},
|
||||||
|
core_pipeline::{Skybox, core_3d::Camera3d},
|
||||||
|
ecs::{
|
||||||
|
entity::Entity,
|
||||||
|
query::With,
|
||||||
|
system::{Commands, Query, ResMut},
|
||||||
|
},
|
||||||
|
pbr::environment_map::EnvironmentMapLight,
|
||||||
|
};
|
||||||
|
use bevy_equirect::EquirectManager;
|
||||||
|
use glam::Quat;
|
||||||
|
|
||||||
|
pub struct SkyPlugin;
|
||||||
|
|
||||||
|
impl Plugin for SkyPlugin {
|
||||||
|
fn build(&self, app: &mut bevy::app::App) {
|
||||||
|
app.add_systems(Update, apply_sky);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: make this work with cameras spawned after setting the sky texture
|
||||||
|
fn apply_sky(
|
||||||
|
mut equirect: ResMut<EquirectManager>,
|
||||||
|
cameras: Query<Entity, With<Camera3d>>,
|
||||||
|
mut cmds: Commands,
|
||||||
|
) {
|
||||||
|
if let Some(tex) = super::QUEUED_SKYTEX.lock().take() {
|
||||||
|
if let Some(path) = tex {
|
||||||
|
let image_handle = equirect.load_equirect_as_cubemap(path, 1024);
|
||||||
|
for cam in cameras {
|
||||||
|
cmds.entity(cam).insert(Skybox {
|
||||||
|
image: image_handle.clone(),
|
||||||
|
brightness: 1000.0,
|
||||||
|
rotation: Quat::IDENTITY,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for cam in cameras {
|
||||||
|
cmds.entity(cam).remove::<Skybox>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(light) = super::QUEUED_SKYLIGHT.lock().take() {
|
||||||
|
if let Some(path) = light {
|
||||||
|
let image_handle = equirect.load_equirect_as_cubemap(path, 1024);
|
||||||
|
for cam in cameras {
|
||||||
|
cmds.entity(cam).insert(EnvironmentMapLight {
|
||||||
|
diffuse_map: image_handle.clone(),
|
||||||
|
// we might want to use the SkyTex for this?
|
||||||
|
specular_map: image_handle.clone(),
|
||||||
|
intensity: 1000.0,
|
||||||
|
rotation: Quat::IDENTITY,
|
||||||
|
affects_lightmapped_mesh_diffuse: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for cam in cameras {
|
||||||
|
cmds.entity(cam).remove::<EnvironmentMapLight>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user