make geisha curver, add fan

fix CurverProjectile replcation
This commit is contained in:
2025-12-09 20:08:35 -05:00
parent da5fd201b1
commit 29db17e11a
4 changed files with 13 additions and 6 deletions

View File

@@ -4,7 +4,7 @@
/*02*/(key:"chicago gangster", ability:Gun, aps:7.4, ammo:25, range:60, damage:12), /*02*/(key:"chicago gangster", ability:Gun, aps:7.4, ammo:25, range:60, damage:12),
/*03*/(key:"commando", ability:Gun, aps:7.4, ammo:26, range:60, damage:12), /*03*/(key:"commando", ability:Gun, aps:7.4, ammo:26, range:60, damage:12),
/*04*/(key:"field medic", ability:Medic, aps:20), /*04*/(key:"field medic", ability:Medic, aps:20),
/*05*/(key:"geisha", ability:None), /*05*/(key:"geisha", ability:Curver, range:60, ammo:10, damage:25, projectile:"fan"),
/*06*/(key:"goblin", ability:Arrow, aps:2, ammo:5, range:90, damage:50), /*06*/(key:"goblin", ability:Arrow, aps:2, ammo:5, range:90, damage:50),
/*07*/(key:"green grocer", ability:Curver, range:60, ammo:10, damage:25, projectile:"carrot"), /*07*/(key:"green grocer", ability:Curver, range:60, ammo:10, damage:25, projectile:"carrot"),
/*08*/(key:"highland hammer thrower", ability:Thrown, aps:2, ammo:10, damage:25, range:80, projectile:"hammer", interrupt_shoot:false), /*08*/(key:"highland hammer thrower", ability:Thrown, aps:2, ammo:10, damage:25, range:80, projectile:"hammer", interrupt_shoot:false),

Binary file not shown.

View File

@@ -11,17 +11,21 @@ use crate::{
use avian3d::prelude::*; use avian3d::prelude::*;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_replicon::prelude::{Replicated, SendMode, ServerTriggerExt, ToClients}; use bevy_replicon::prelude::{Replicated, SendMode, ServerTriggerExt, ToClients};
use serde::{Deserialize, Serialize};
use std::f32::consts::PI; use std::f32::consts::PI;
const MAX_SHOT_AGES: f32 = 15.; const MAX_SHOT_AGES: f32 = 15.;
#[derive(Component)] #[derive(Component, Reflect, Deserialize, Serialize)]
struct CurverProjectile { #[reflect(Component)]
pub struct CurverProjectile {
time: f32, time: f32,
damage: u32, damage: u32,
} }
pub fn plugin(app: &mut App) { pub fn plugin(app: &mut App) {
app.register_type::<CurverProjectile>();
app.add_systems( app.add_systems(
Update, Update,
(shot_collision, enemy_hit).run_if(in_state(GameState::Playing)), (shot_collision, enemy_hit).run_if(in_state(GameState::Playing)),
@@ -31,10 +35,10 @@ pub fn plugin(app: &mut App) {
(update, timeout).run_if(in_state(GameState::Playing)), (update, timeout).run_if(in_state(GameState::Playing)),
); );
global_observer!(app, on_trigger_missile); global_observer!(app, on_trigger_curver);
} }
fn on_trigger_missile( fn on_trigger_curver(
trigger: On<TriggerCurver>, trigger: On<TriggerCurver>,
mut commands: Commands, mut commands: Commands,
query_transform: Query<&Transform>, query_transform: Query<&Transform>,
@@ -75,10 +79,12 @@ fn on_trigger_missile(
Visibility::default(), Visibility::default(),
transform, transform,
Replicated, Replicated,
//TODO: put in client only system
children![( children![(
Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse()), Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse()),
AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)), AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)),
GltfSceneRoot::Projectile(head.projectile.clone()), GltfSceneRoot::Projectile(head.projectile.clone()),
Replicated,
),], ),],
)); ));
} }

View File

@@ -1,6 +1,6 @@
use crate::{ use crate::{
GameState, GameState,
abilities::{BuildExplosionSprite, healing::Healing}, abilities::{BuildExplosionSprite, curver::CurverProjectile, healing::Healing},
animation::AnimationFlags, animation::AnimationFlags,
backpack::{Backpack, backpack_ui::BackpackUiState}, backpack::{Backpack, backpack_ui::BackpackUiState},
camera::{CameraArmRotation, CameraTarget}, camera::{CameraArmRotation, CameraTarget},
@@ -83,6 +83,7 @@ pub fn plugin(app: &mut App) {
.replicate::<AnimatedCharacter>() .replicate::<AnimatedCharacter>()
.replicate::<AnimationFlags>() .replicate::<AnimationFlags>()
.replicate_once::<AutoRotation>() .replicate_once::<AutoRotation>()
.replicate_once::<CurverProjectile>()
.replicate::<Backpack>() .replicate::<Backpack>()
.replicate::<BackpackUiState>() .replicate::<BackpackUiState>()
.replicate::<Billboard>() .replicate::<Billboard>()