From 69f9d73d80d9e5798634586b4293ad150a300db9 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Sun, 4 May 2025 12:36:47 +0200 Subject: [PATCH] ability per second db value and hold-down trigger --- assets/all.headsdb.ron | 22 +++++++++++----------- src/abilities/gun.rs | 8 ++++++-- src/abilities/mod.rs | 31 ++++++++++++++++++++++++++----- src/heads_database.rs | 7 +++++++ 4 files changed, 50 insertions(+), 18 deletions(-) diff --git a/assets/all.headsdb.ron b/assets/all.headsdb.ron index 6d74dd1..4bfe812 100644 --- a/assets/all.headsdb.ron +++ b/assets/all.headsdb.ron @@ -1,20 +1,20 @@ ([ - /*00*/(key:"angry demonstrator", ability:Thrown, ammo: 10, range:90, damage:25, projectile:"molotov"), - /*01*/(key:"carnival knife thrower", range:60, ammo: 5 ), - /*02*/(key:"chicago gangster", ability:Gun, ammo: 25, range:60), - /*03*/(key:"commando", ability:Gun, ammo: 26, range:60, damage:12), + /*00*/(key:"angry demonstrator", ability:Thrown, aps:2, ammo:10, range:90, damage:25, projectile:"molotov"), + /*01*/(key:"carnival knife thrower", range:60, ammo:5), + /*02*/(key:"chicago gangster", ability:Gun, ammo:25, range:60), + /*03*/(key:"commando", ability:Gun, aps:7.4, ammo:26, range:60, damage:12), /*04*/(key:"field medic"), /*05*/(key:"geisha"), - /*06*/(key:"goblin", ability:Arrow, ammo: 5, range:90, damage:50), - /*07*/(key:"green grocer", range:60, ammo: 10, damage: 25), - /*08*/(key:"highland hammer thrower", ability:Thrown, ammo: 10, damage: 25, range:80, projectile:"hammer"), - /*09*/(key:"legionnaire", ability:Gun, ammo: 25, range:60, damage: 13), - /*10*/(key:"mig pilot", ability:Missile, ammo: 5, range:60, damage:100, controls:Plane), + /*06*/(key:"goblin", ability:Arrow, aps:2, ammo:5, range:90, damage:50), + /*07*/(key:"green grocer", range:60, ammo:10, damage:25), + /*08*/(key:"highland hammer thrower", ability:Thrown, aps:2, ammo:10, damage:25, range:80, projectile:"hammer"), + /*09*/(key:"legionnaire", ability:Gun, aps:1.5, ammo:25, range:60, damage:13), + /*10*/(key:"mig pilot", ability:Missile, ammo:5, range:60, damage:100, controls:Plane), /*11*/(key:"nanny", ability:Thrown, range:60), /*12*/(key:"panic attack"), /*13*/(key:"salty sea dog"), /*14*/(key:"snow plough operator"), /*15*/(key:"soldier ant"), - /*16*/(key:"super market shopper", ability:Thrown, ammo: 10, range:80, damage: 17, projectile:"handbag"), - /*17*/(key:"troll", ability:Thrown, ammo: 10, range:80, damage: 17), + /*16*/(key:"super market shopper", ability:Thrown, ammo:10, range:80, damage:17, projectile:"handbag"), + /*17*/(key:"troll", ability:Thrown, ammo:10, range:80, damage:17), ]) diff --git a/src/abilities/gun.rs b/src/abilities/gun.rs index 696ae15..e7e1ee8 100644 --- a/src/abilities/gun.rs +++ b/src/abilities/gun.rs @@ -161,9 +161,13 @@ fn shot_collision( let shot_entity = if query_shot.contains(*e1) { *e1 } else { *e2 }; - let shot_pos = query_shot.get(shot_entity).unwrap().1.translation; + if let Ok(mut entity) = commands.get_entity(shot_entity) { + entity.despawn(); + } else { + continue; + } - commands.entity(shot_entity).despawn(); + let shot_pos = query_shot.get(shot_entity).unwrap().1.translation; let texture_atlas = TextureAtlas { layout: assets.layout.clone(), diff --git a/src/abilities/mod.rs b/src/abilities/mod.rs index f0eeff2..78f606b 100644 --- a/src/abilities/mod.rs +++ b/src/abilities/mod.rs @@ -4,6 +4,7 @@ mod missile; mod thrown; use crate::{ + GameState, aim::AimTarget, character::CharacterHierarchy, global_observer, @@ -74,17 +75,34 @@ pub struct TriggerThrow(pub TriggerData); #[derive(Event, Reflect)] pub struct TriggerMissile(pub TriggerData); +#[derive(Resource, Default)] +struct TriggerStateRes { + cooldown: f32, + active: bool, +} + pub fn plugin(app: &mut App) { + app.init_resource::(); + app.add_plugins(gun::plugin); app.add_plugins(thrown::plugin); app.add_plugins(arrow::plugin); app.add_plugins(missile::plugin); + app.add_systems(Update, update.run_if(in_state(GameState::Playing))); + global_observer!(app, on_trigger_state); } -fn on_trigger_state( - trigger: Trigger, +fn on_trigger_state(trigger: Trigger, mut res: ResMut) { + res.active = matches!(trigger.event(), TriggerState::Active); + if !res.active { + res.cooldown = 0.0; + } +} + +fn update( + mut res: ResMut, mut commands: Commands, player_rot: Query<&Transform, With>, player_query: Query<(Entity, &AimTarget), With>, @@ -93,7 +111,7 @@ fn on_trigger_state( time: Res