lorrens aub

This commit is contained in:
AmadeusWM
2025-04-06 22:07:17 +02:00
parent 749d480b85
commit 228ad9a50e
4 changed files with 84 additions and 10 deletions

View File

@@ -6,6 +6,14 @@
),
"id_card": File(path: "meshes/id_card.glb"),
"id_card_toolbar": File(path: "images/id_card_toolbar.png"),
"flash_hold_0": File (path: "images/pixelart/Flashlight_hold_0.png"),
"flash_hold_0_pressed": File (path: "images/pixelart/Flashlight_click_0.png"),
"flash_hold_1": File (path: "images/pixelart/Flashlight_hold_1.png"),
"flash_hold_1_pressed": File (path: "images/pixelart/Flashlight_click_1.png"),
"flash_hold_2": File (path: "images/pixelart/Flashlight_hold_2.png"),
"flash_hold_2_pressed": File (path: "images/pixelart/Flashlight_click_2.png"),
"flash_hold_3": File (path: "images/pixelart/Flashlight_hold_3.png"),
"flash_hold_3_pressed": File (path: "images/pixelart/Flashlight_click_3.png"),
"flash_hold_4": File (path: "images/pixelart/Flashlight_hold_4.png"),
"flash_hold_4_pressed": File (path: "images/pixelart/Flashlight_click_4.png"),
"flashlight_click": File (path: "audio/flashlight-switch.ogg"),

View File

@@ -59,6 +59,22 @@ pub(crate) struct ImageAssets {
#[derive(AssetCollection, Resource, Clone)]
pub(crate) struct FlashlightAssets {
#[asset(key = "flash_hold_0")]
pub(crate) flash_hold_0: Handle<Image>,
#[asset(key = "flash_hold_0_pressed")]
pub(crate) flash_hold_0_pressed: Handle<Image>,
#[asset(key = "flash_hold_1")]
pub(crate) flash_hold_1: Handle<Image>,
#[asset(key = "flash_hold_1_pressed")]
pub(crate) flash_hold_1_pressed: Handle<Image>,
#[asset(key = "flash_hold_2")]
pub(crate) flash_hold_2: Handle<Image>,
#[asset(key = "flash_hold_2_pressed")]
pub(crate) flash_hold_2_pressed: Handle<Image>,
#[asset(key = "flash_hold_3")]
pub(crate) flash_hold_3: Handle<Image>,
#[asset(key = "flash_hold_3_pressed")]
pub(crate) flash_hold_3_pressed: Handle<Image>,
#[asset(key = "flash_hold_4")]
pub(crate) flash_hold_4: Handle<Image>,
#[asset(key = "flash_hold_4_pressed")]

View File

@@ -531,8 +531,10 @@ impl GameLevel {
let end_node = self.nodes.get_mut(&self.end_node).unwrap();
if self.end_node.1 >= self.end_node.0 {
end_node.north = Side::Connection;
} else if self.end_node.0 >= self.end_node.1 {
end_node.south = Side::Connection;
} else {
end_node.east = Side::Connection;
end_node.west = Side::Connection;
}
}

View File

@@ -55,7 +55,15 @@ impl Default for HeadBob {
pub struct BaseTransform(pub Transform);
#[derive(Debug, Component)]
pub struct Flashlight;
pub struct Flashlight {
// 0 - 4
pub charge: f32,
pub is_on: bool,
}
#[derive(Debug, Component)]
pub struct SpotlightFlashlight {
}
#[derive(Component)]
pub struct FlashlightButtonAnimation {
@@ -83,7 +91,7 @@ pub fn plugin(app: &mut App) {
apply_head_bob,
on_resize_system,
handle_flashlight,
update_flashlight_button_animation,
(update_flashlight_button_animation, update_flashlight_charge, update_flashlight_sprite).chain(),
)
.run_if(in_state(GameState::Playing)),
)
@@ -151,6 +159,7 @@ pub fn init_player(
let window = window.single();
let transform = flashlight_base_transform(window.width(), window.height());
parent.spawn((
Flashlight { charge: 4.0, is_on: false },
Sprite::from_image(flashlights.flash_hold_4.clone()),
transform.0.clone(),
transform,
@@ -160,7 +169,7 @@ pub fn init_player(
// feitelijke pitslamp
parent.spawn((
Flashlight,
SpotlightFlashlight{},
SpotLight {
intensity: 0.0,
color: Color::srgba(0.9, 0.628, 0.392, 1.0),
@@ -396,7 +405,7 @@ pub fn apply_head_bob(
}
pub fn handle_flashlight(
player_query: Query<&PlayerAction, With<Player>>,
mut flashlight_query: Query<&mut SpotLight, With<Flashlight>>,
mut flashlight_query: Query<&mut SpotLight, With<SpotlightFlashlight>>,
mut flashlight_sprite_query: Query<&mut FlashlightButtonAnimation>,
audio_assets: Res<AudioAssets>,
audio: Res<Audio>,
@@ -422,20 +431,59 @@ pub fn handle_flashlight(
}
}
pub fn update_flashlight_charge(
time: Res<Time>,
mut flashlight_query: Query<&mut Flashlight>,
) {
for mut flashlight in flashlight_query.iter_mut() {
if flashlight.is_on {
flashlight.charge = flashlight.charge - time.delta_secs() * 0.1;
} else {
flashlight.charge = flashlight.charge + time.delta_secs() * 0.1;
}
flashlight.charge = flashlight.charge.clamp(0.0, 4.0);
if flashlight.charge <= 0.0 {
flashlight.is_on = false;
}
}
}
pub fn update_flashlight_button_animation(
time: Res<Time>,
mut query: Query<(&mut FlashlightButtonAnimation, &mut Sprite)>,
flashlights: Res<FlashlightAssets>,
mut query: Query<&mut FlashlightButtonAnimation>,
) {
for (mut animation, mut image) in query.iter_mut() {
for mut animation in query.iter_mut() {
if animation.is_pressed {
animation.timer.tick(time.delta());
if animation.timer.finished() {
*image = Sprite::from_image(flashlights.flash_hold_4.clone());
animation.is_pressed = false;
} else {
*image = Sprite::from_image(flashlights.flash_hold_4_pressed.clone());
}
}
}
}
pub fn update_flashlight_sprite(
mut query: Query<(&FlashlightButtonAnimation, &mut Sprite, &Flashlight)>,
flashlights: Res<FlashlightAssets>,
){
for (animation, mut image, flashlight) in query.iter_mut() {
println!("charge: {}", flashlight.charge);
let charge = flashlight.charge.ceil() as i32;
println!("charge: {}", charge);
let sprite_image = match (charge, animation.is_pressed) {
(4, true) => flashlights.flash_hold_4_pressed.clone(),
(4, false) => flashlights.flash_hold_4.clone(),
(3, true) => flashlights.flash_hold_3_pressed.clone(),
(3, false) => flashlights.flash_hold_3.clone(),
(2, true) => flashlights.flash_hold_2_pressed.clone(),
(2, false) => flashlights.flash_hold_2.clone(),
(1, true) => flashlights.flash_hold_1_pressed.clone(),
(1, false) => flashlights.flash_hold_1.clone(),
(0, true) => flashlights.flash_hold_0_pressed.clone(),
(0, false) => flashlights.flash_hold_0.clone(),
_ => flashlights.flash_hold_0.clone()
};
*image = Sprite::from_image(sprite_image);
}
}