From 31041be37c166924af7452ab6ed9f955e2f6b477 Mon Sep 17 00:00:00 2001 From: "Elijah C. Voigt" Date: Thu, 28 Dec 2023 16:23:57 -0800 Subject: [PATCH] Light tweaks working --- assets/martian.tweak.toml | 9 +++--- assets/models/Martian Chess.glb | 4 +-- src/debug.rs | 2 +- src/display3d.rs | 52 +++++++++++++++++++++++++++++++++ src/main.rs | 4 +++ 5 files changed, 64 insertions(+), 7 deletions(-) diff --git a/assets/martian.tweak.toml b/assets/martian.tweak.toml index 7527d92..baae01f 100644 --- a/assets/martian.tweak.toml +++ b/assets/martian.tweak.toml @@ -71,6 +71,7 @@ intro_a = "GameCamIntro1" intro_b = "GameCamIntro2" turn_a = "GameCamSide2>1" turn_b = "GameCamSide1>2" + [display3d.models.animations.pick_up] pawn = "PawnPiecePickup" drone = "DronePiecePickup" @@ -96,13 +97,13 @@ pawn_blue = "DroneBlue" dots_red = "Dots" dots_blue = "DotsBlue" -[display3d.lights] +[display3d.lights.scaling] # https://docs.rs/bevy/0.11.3/bevy/pbr/struct.SpotLight.html -spot_light_scale = 1.0 +spot = 1.0 # https://docs.rs/bevy/0.11.3/bevy/pbr/struct.PointLight.html -point_light_scale = 1.0 +point = 0.01 # https://docs.rs/bevy/0.11.3/bevy/pbr/struct.DirectionalLight.html -directional_light_scale = 1.0 +directional = 1.0 ### # Fog diff --git a/assets/models/Martian Chess.glb b/assets/models/Martian Chess.glb index 45fab9b..7487fd8 100644 --- a/assets/models/Martian Chess.glb +++ b/assets/models/Martian Chess.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:896bc7eb1253c794274535258f100367013cf74eeb58dce0fa5d4210ec793582 -size 30085396 +oid sha256:a4a6207082a2a8a3802e7e1a645773e2cfb0d1975e972ebd366a7d8b2f33a411 +size 30084992 diff --git a/src/debug.rs b/src/debug.rs index fc190a3..d25b07c 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -95,7 +95,7 @@ fn init_debug_ui(mut commands: Commands) { padding: UiRect::all(Val::Px(10.0)), ..default() }, - background_color: Color::BLACK.with_a(0.6).into(), + background_color: Color::BLACK.into(), visibility: Visibility::Hidden, ..default() }, diff --git a/src/display3d.rs b/src/display3d.rs index a2af9a9..f5468a7 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -57,6 +57,12 @@ impl Plugin for Display3dPlugin { remove_valid_move_entity.run_if(any_component_removed::()), set_valid_move_model.run_if(any_component_added::), update_tweaks.run_if(on_event::>()), + scale_lighting.run_if( + any_component_added:: + .or_else(any_component_added::) + .or_else(any_component_added::) + .or_else(on_event::>()) + ), ), ) .add_systems( @@ -1005,6 +1011,52 @@ fn switch_sides( }); } +fn scale_lighting( + mut directional: Query<(Entity, &mut DirectionalLight, Option<&Original>)>, + mut spot: Query<(Entity, &mut SpotLight, Option<&Original>)>, + mut point: Query<(Entity, &mut PointLight, Option<&Original>)>, + mut commands: Commands, + tweaks: Res>, + tweaks_file: Res, +) { + let tweak = tweaks + .get(tweaks_file.handle.clone()) + .expect("Load tweakfile"); + + let directional_tweak = tweak.get::("display3d_lights_scaling_directional").expect("Directional lighting scalar"); + directional.iter_mut().for_each(|(entity, mut val, original)| { + info!("Scaling directional light {:?}", entity); + if let Some(Original(v)) = original { + val.illuminance = v.illuminance * directional_tweak; + } else { + commands.entity(entity).insert(Original(val.clone())); + val.illuminance *= directional_tweak; + } + }); + + let spot_tweak = tweak.get::("display3d_lights_scaling_spot").expect("Spot lighting scalar"); + spot.iter_mut().for_each(|(entity, mut val, original)| { + info!("Scaling spot light {:?}", entity); + if let Some(Original(v)) = original { + val.intensity = v.intensity * spot_tweak; + } else { + commands.entity(entity).insert(Original(val.clone())); + val.intensity *= spot_tweak; + } + }); + + let point_tweak = tweak.get::("display3d_lights_scaling_point").expect("Point lighting scalar"); + point.iter_mut().for_each(|(entity, mut val, original)| { + info!("Scaling point light {:?}", entity); + if let Some(Original(v)) = original { + val.intensity = v.intensity * point_tweak; + } else { + commands.entity(entity).insert(Original(val.clone())); + val.intensity *= point_tweak; + } + }); +} + pub(super) mod tweaks { use bevy::{ core_pipeline::tonemapping::Tonemapping, diff --git a/src/main.rs b/src/main.rs index daa053c..d86a553 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,3 +131,7 @@ pub(crate) fn _any_component_added_or_changed( ) -> bool { !q.is_empty() } + +/// Stores the original value of a component which is modified at runtime +#[derive(Debug, Component)] +pub(crate) struct Original(T); \ No newline at end of file