From 1fa1b110dbc0582a8f4949f7f1508ba1f2f110bb Mon Sep 17 00:00:00 2001 From: extrawurst <776816+extrawurst@users.noreply.github.com> Date: Fri, 28 Mar 2025 00:21:23 +0800 Subject: [PATCH] Throw projectile (#19) --- assets/models/head_misc/molotov_cocktail.glb | Bin 0 -> 13488 bytes assets/sfx/abilities/throw-explosion.ogg | Bin 0 -> 12890 bytes assets/sfx/abilities/throw.ogg | Bin 0 -> 6353 bytes src/{shooting.rs => abilities/gun.rs} | 69 +++--- src/abilities/mod.rs | 49 +++++ src/abilities/thrown.rs | 217 +++++++++++++++++++ src/aim/mod.rs | 2 +- src/control/controls.rs | 2 +- src/loading_assets.rs | 8 + src/main.rs | 4 +- src/player.rs | 11 +- src/sounds.rs | 4 + 12 files changed, 317 insertions(+), 49 deletions(-) create mode 100644 assets/models/head_misc/molotov_cocktail.glb create mode 100644 assets/sfx/abilities/throw-explosion.ogg create mode 100644 assets/sfx/abilities/throw.ogg rename src/{shooting.rs => abilities/gun.rs} (76%) create mode 100644 src/abilities/mod.rs create mode 100644 src/abilities/thrown.rs diff --git a/assets/models/head_misc/molotov_cocktail.glb b/assets/models/head_misc/molotov_cocktail.glb new file mode 100644 index 0000000000000000000000000000000000000000..ec9216eef95484cff75a015a303505893d1b7e3e GIT binary patch literal 13488 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 literal 0 HcmV?d00001 diff --git a/assets/sfx/abilities/throw-explosion.ogg b/assets/sfx/abilities/throw-explosion.ogg new file mode 100644 index 0000000000000000000000000000000000000000..879ae48e5ff9f1a7bc710aad0f860af05a80cafe GIT binary patch literal 12890 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 C8P10Q literal 0 HcmV?d00001 diff --git a/src/shooting.rs b/src/abilities/gun.rs similarity index 76% rename from src/shooting.rs rename to src/abilities/gun.rs index 7e7675a..50ff525 100644 --- a/src/shooting.rs +++ b/src/abilities/gun.rs @@ -1,13 +1,12 @@ +use super::{Projectile, TriggerState}; use crate::{ GameState, aim::AimState, billboards::Billboard, loading_assets::GameAssets, - npc::Hit, physics_layers::GameLayer, player::{Player, PlayerRig}, sounds::PlaySound, - tb_entities::EnemySpawn, utils::sprite_3d_animation::AnimationTimer, }; use avian3d::prelude::{ @@ -19,18 +18,12 @@ use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams}; use std::f32::consts::PI; #[derive(Component)] -struct Shot { +struct GunProjectile { time: f32, } const MAX_SHOT_AGES: f32 = 1.; -#[derive(Event, Reflect)] -pub enum TriggerState { - Active, - Inactive, -} - #[derive(Resource)] struct ShotAssets { image: Handle, @@ -41,7 +34,7 @@ pub fn plugin(app: &mut App) { app.add_systems(OnEnter(GameState::Playing), setup); app.add_systems( Update, - (update, shot_collision, enemy_hit, timeout).run_if(in_state(GameState::Playing)), + (update, shot_collision, timeout).run_if(in_state(GameState::Playing)), ); app.add_observer(on_trigger_state); } @@ -61,19 +54,26 @@ fn on_trigger_state( mut commands: Commands, aim: Res, player_rot: Query<&Transform, With>, - player_pos: Query<&Transform, With>, + player: Query<(&Transform, &Player)>, target_transform: Query<&Transform, (Without, Without)>, time: Res