From ec17616f8d6041ac5d93a786edec0f5d0f969a46 Mon Sep 17 00:00:00 2001 From: Alexander Foremny Date: Mon, 18 Mar 2024 04:58:00 +0100 Subject: feat: speed ability --- src/server.rs | 153 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 121 insertions(+), 32 deletions(-) (limited to 'src/server.rs') diff --git a/src/server.rs b/src/server.rs index 038f854..0b15c5f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,6 +1,8 @@ use crate::protocol::*; use crate::server::network::*; use crate::shared::ability::*; +use crate::shared::activation::*; +use crate::shared::buffs::*; use crate::shared::champion::*; use crate::shared::cooldown::*; use crate::shared::health::*; @@ -8,6 +10,7 @@ use crate::shared::health_event::*; use crate::shared::imperative::*; use crate::shared::player::*; use crate::shared::projectile::*; +use crate::shared::stats::*; use crate::shared::*; use bevy::prelude::*; use bevy::utils::HashMap; @@ -53,13 +56,15 @@ impl Plugin for ServerPlugin { .add_systems(Update, (connects, disconnects)) .add_systems(Update, receive_message) .add_systems(FixedUpdate, timers_tick) + .add_systems(FixedUpdate, effective_stats) .add_systems(FixedUpdate, health_regen.after(timers_tick)) .add_systems( FixedUpdate, ( (imperative_attack_approach, imperative_attack_attack) .chain() - .after(cooldown_decrement), + .after(activation), + activation.after(cooldown_decrement), imperative_walk_to, ) .after(player_input), @@ -73,6 +78,7 @@ impl Plugin for ServerPlugin { .chain(), ) .add_systems(FixedUpdate, cooldown_decrement) + .add_systems(FixedUpdate, (buffs_despawn, buffs_tick).chain()) .add_systems(FixedUpdate, player_input); } } @@ -110,7 +116,7 @@ fn receive_message( let client_id = event.context(); let SelectChampion(champion) = event.message(); let Some(entity) = entity_map.0.get(client_id) else { - return; + continue; }; commands.entity(*entity).insert(*champion); } @@ -133,6 +139,7 @@ fn player_input( entity_map: Res, mut input_reader: EventReader>, mut imperatives: Query<&mut Imperative>, + mut activations: Query<&mut Activation>, ) { for input in input_reader.read() { let client_id = input.context(); @@ -144,28 +151,31 @@ fn player_input( *imperative = *new_imperative; } } - _ => {} + Inputs::Activation(new_activation) => { + if let Ok(mut activation) = activations.get_mut(*entity_id) { + *activation = *new_activation; + } + } + Inputs::None => {} } } } } } -const MOVEMENT_SPEED: f32 = 80.; - fn imperative_walk_to( - mut players: Query<(Entity, &mut Imperative)>, + mut players: Query<(Entity, &mut Imperative, &EffectiveStats)>, mut positions: Query<&mut PlayerPosition>, time: Res