make light pillars slowly light up
parent
96453bfd49
commit
264eab0308
|
@ -18,7 +18,7 @@ fn fragment(
|
||||||
let uv = position.xy / vec2<f32>(view.width, view.height);
|
let uv = position.xy / vec2<f32>(view.width, view.height);
|
||||||
let uv = floor(uv * 400.0) / 400.0;
|
let uv = floor(uv * 400.0) / 400.0;
|
||||||
|
|
||||||
let col = texturesample(texture, our_sampler, uv);
|
let col = textureSample(texture, our_sampler, uv);
|
||||||
|
|
||||||
return round(col * 50.0) / 50.0;
|
return round(col * 50.0) / 50.0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
#![allow(clippy::type_complexity)]
|
||||||
|
|
||||||
use bevy::{pbr::AmbientLight, prelude::*, sprite::Material2dPlugin, window::close_on_esc};
|
use bevy::{pbr::AmbientLight, prelude::*, sprite::Material2dPlugin, window::close_on_esc};
|
||||||
use bevy_mod_raycast::{DefaultRaycastingPlugin, RayCastMesh, RaycastSystem};
|
use bevy_mod_raycast::{DefaultRaycastingPlugin, RayCastMesh, RaycastSystem};
|
||||||
// use bevy_prototype_debug_lines::*;
|
|
||||||
|
|
||||||
mod camera;
|
mod camera;
|
||||||
mod columns;
|
mod columns;
|
||||||
|
@ -28,7 +29,6 @@ fn main() {
|
||||||
.insert_resource(Msaa { samples: 1 })
|
.insert_resource(Msaa { samples: 1 })
|
||||||
.insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0)))
|
.insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0)))
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
// .add_plugin(DebugLinesPlugin::with_depth_test(true))
|
|
||||||
.add_plugin(Material2dPlugin::<PostProcessingMaterial>::default())
|
.add_plugin(Material2dPlugin::<PostProcessingMaterial>::default())
|
||||||
.init_resource::<Debug>()
|
.init_resource::<Debug>()
|
||||||
.init_resource::<LightBallMaterials>()
|
.init_resource::<LightBallMaterials>()
|
||||||
|
@ -69,6 +69,7 @@ fn main() {
|
||||||
.with_system(light_up_ball_when_close_to_player)
|
.with_system(light_up_ball_when_close_to_player)
|
||||||
.with_system(increase_progress_when_activating_pillar)
|
.with_system(increase_progress_when_activating_pillar)
|
||||||
.with_system(activate_pillar_when_progress_is_1)
|
.with_system(activate_pillar_when_progress_is_1)
|
||||||
|
.with_system(increase_range_up_to_max)
|
||||||
.with_system(decrease_pillar_strength)
|
.with_system(decrease_pillar_strength)
|
||||||
.with_system(update_light_excitation_state)
|
.with_system(update_light_excitation_state)
|
||||||
.with_system(toggle_debug),
|
.with_system(toggle_debug),
|
||||||
|
|
|
@ -1,11 +1,20 @@
|
||||||
use bevy::{pbr::CubemapVisibleEntities, prelude::*, render::primitives::CubemapFrusta};
|
use bevy::{
|
||||||
|
pbr::CubemapVisibleEntities,
|
||||||
|
prelude::*,
|
||||||
|
render::{primitives::CubemapFrusta, view::NoFrustumCulling},
|
||||||
|
};
|
||||||
|
|
||||||
use crate::{camera::MouseCoords, player::LightFriends};
|
use crate::{camera::MouseCoords, player::LightFriends};
|
||||||
|
|
||||||
|
// TODO maybe change these per pillar
|
||||||
|
|
||||||
const SIZE: f32 = 10.0;
|
const SIZE: f32 = 10.0;
|
||||||
const HEIGHT: f32 = 20.0;
|
const HEIGHT: f32 = 20.0;
|
||||||
/// duration of pillar activation, in secs
|
/// how many seconds a pillar lasts activated
|
||||||
const PILLAR_DURATION: f32 = 30.0;
|
const PILLAR_DURATION: f32 = 30.0;
|
||||||
|
/// the range for the pillar
|
||||||
|
const MAX_RANGE: f32 = 40.0;
|
||||||
|
const INTENSITY: f32 = 2000.0;
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
pub struct UnlitPillar;
|
pub struct UnlitPillar;
|
||||||
|
@ -31,8 +40,11 @@ pub fn spawn_pillar(
|
||||||
transform: Transform::from_translation(pos),
|
transform: Transform::from_translation(pos),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
|
// idk what these do
|
||||||
.insert(CubemapFrusta::default())
|
.insert(CubemapFrusta::default())
|
||||||
.insert(CubemapVisibleEntities::default())
|
.insert(CubemapVisibleEntities::default())
|
||||||
|
// we want the light to keep working even if it's out of the camera
|
||||||
|
.insert(NoFrustumCulling)
|
||||||
.insert(UnlitPillar);
|
.insert(UnlitPillar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +106,8 @@ pub fn activate_pillar_when_progress_is_1(
|
||||||
})
|
})
|
||||||
.insert(PointLight {
|
.insert(PointLight {
|
||||||
color: Color::rgb(15.0, 15.0, 15.0),
|
color: Color::rgb(15.0, 15.0, 15.0),
|
||||||
intensity: 500.0,
|
range: 1.0,
|
||||||
|
intensity: INTENSITY,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -104,17 +117,21 @@ pub fn activate_pillar_when_progress_is_1(
|
||||||
mat.emissive = Color::rgb(15.0, 15.0, 15.0);
|
mat.emissive = Color::rgb(15.0, 15.0, 15.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if let Ok((handle, _)) = query.get(entity) {
|
||||||
if let Ok((handle, _)) = query.get(entity) {
|
if let Some(mat) = materials.get_mut(handle) {
|
||||||
if let Some(mat) = materials.get_mut(handle) {
|
mat.base_color = Color::rgb(15.0, 15.0, 15.0) * progress;
|
||||||
mat.base_color = Color::rgb(15.0, 15.0, 15.0) * progress;
|
mat.emissive = Color::rgb(15.0, 15.0, 15.0) * progress;
|
||||||
mat.emissive = Color::rgb(15.0, 15.0, 15.0) * progress;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn increase_range_up_to_max(mut query: Query<&mut PointLight, With<LitPillar>>) {
|
||||||
|
for mut light in &mut query {
|
||||||
|
light.range += (MAX_RANGE - light.range) / MAX_RANGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn decrease_pillar_strength(
|
pub fn decrease_pillar_strength(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut query: Query<(
|
mut query: Query<(
|
||||||
|
@ -144,7 +161,7 @@ pub fn decrease_pillar_strength(
|
||||||
mat.emissive = Color::rgb(0., 0., 0.);
|
mat.emissive = Color::rgb(0., 0., 0.);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
light.intensity = i * 500.0;
|
light.intensity = i * INTENSITY;
|
||||||
|
|
||||||
if let Some(mat) = materials.get_mut(handle) {
|
if let Some(mat) = materials.get_mut(handle) {
|
||||||
mat.base_color = Color::rgb(15.0, 15.0, 15.0) * i.powf(1.3);
|
mat.base_color = Color::rgb(15.0, 15.0, 15.0) * i.powf(1.3);
|
||||||
|
|
|
@ -182,7 +182,7 @@ pub fn move_player(
|
||||||
mut animation_player: Query<&mut AnimationPlayer>,
|
mut animation_player: Query<&mut AnimationPlayer>,
|
||||||
mut is_walking: Local<bool>,
|
mut is_walking: Local<bool>,
|
||||||
) {
|
) {
|
||||||
let ds = time.delta_seconds() * 5.0;
|
let ds = time.delta_seconds() * 7.0;
|
||||||
|
|
||||||
let mut anim = if let Ok(player) = animation_player.get_single_mut() {
|
let mut anim = if let Ok(player) = animation_player.get_single_mut() {
|
||||||
player
|
player
|
||||||
|
@ -207,7 +207,7 @@ pub fn move_player(
|
||||||
|
|
||||||
if !*is_walking && delta.length_squared() > 0.2 {
|
if !*is_walking && delta.length_squared() > 0.2 {
|
||||||
anim.play(animations.run.clone_weak()).repeat();
|
anim.play(animations.run.clone_weak()).repeat();
|
||||||
anim.set_speed(0.5);
|
anim.set_speed(0.7);
|
||||||
*is_walking = true;
|
*is_walking = true;
|
||||||
}
|
}
|
||||||
if *is_walking && delta.length_squared() < 0.2 {
|
if *is_walking && delta.length_squared() < 0.2 {
|
||||||
|
|
Loading…
Reference in New Issue