Add buffs at player spawn
This commit is contained in:
parent
a71bc513ac
commit
e763db9108
@ -28,8 +28,13 @@ use crate::{
|
||||
},
|
||||
pickup::PickupKind,
|
||||
player::{
|
||||
DamageSource, IPlayer, NetTransform, ball::Ball, local_player::LocalPlayer,
|
||||
remote_player::RemotePlayer, telegrenade::Telegrenade, weapon::WeaponType,
|
||||
DamageSource, IPlayer, NetTransform,
|
||||
ball::Ball,
|
||||
buffs::{Buff, BuffKind},
|
||||
local_player::LocalPlayer,
|
||||
remote_player::RemotePlayer,
|
||||
telegrenade::Telegrenade,
|
||||
weapon::WeaponType,
|
||||
},
|
||||
replay::{ReplayEvent, ReplayPlayback, ReplayRecorder},
|
||||
team_resource::TeamResource,
|
||||
@ -830,6 +835,11 @@ impl Game {
|
||||
.spawn_player(id, team, id == self.self_id.unwrap_or(0), None, true);
|
||||
|
||||
if let Some(character) = &mut character {
|
||||
character.dyn_bind_mut().new_buff(Buff {
|
||||
time_remaining: 5.,
|
||||
kind: BuffKind::SpawnProtection,
|
||||
});
|
||||
|
||||
if self.current_replay_playback.is_some() {
|
||||
character.set_visible(false);
|
||||
}
|
||||
@ -895,6 +905,11 @@ impl Game {
|
||||
if let Some(map) = &mut self.current_map {
|
||||
if let Some(player) = self.players.iter_mut().find(|p| p.id() == id) {
|
||||
if let Some(mut character) = player.character.clone() {
|
||||
character.dyn_bind_mut().new_buff(Buff {
|
||||
time_remaining: 5.,
|
||||
kind: BuffKind::SpawnProtection,
|
||||
});
|
||||
|
||||
// This is a respawn, delete old character
|
||||
if let Some(mut recorder) = self.replay_recorder.clone()
|
||||
&& let Some(state) = player.get_state(player.clone())
|
||||
|
||||
@ -12,11 +12,7 @@ pub struct Buffs {
|
||||
|
||||
impl Default for Buffs {
|
||||
fn default() -> Self {
|
||||
let mut buffs = Vec::new();
|
||||
buffs.push(Buff {
|
||||
time_remaining: 5.,
|
||||
kind: BuffKind::SpawnProtection,
|
||||
});
|
||||
let buffs = Vec::new();
|
||||
|
||||
Self { buffs }
|
||||
}
|
||||
@ -50,12 +46,16 @@ impl Buffs {
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
pub fn new_buff(&mut self, buff: Buff) {
|
||||
self.buffs.push(buff);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Buff {
|
||||
time_remaining: f64,
|
||||
kind: BuffKind,
|
||||
pub time_remaining: f64,
|
||||
pub kind: BuffKind,
|
||||
}
|
||||
|
||||
impl Buff {
|
||||
|
||||
@ -24,7 +24,7 @@ use crate::{
|
||||
pickup::PickupKind,
|
||||
player::{
|
||||
DamageSource, DamageSourceSignal, IPlayer, NetTransform, PlayerCommon,
|
||||
buffs::Buffs,
|
||||
buffs::{Buff, Buffs},
|
||||
effects::PlayerEffects,
|
||||
remote_player::RemotePlayer,
|
||||
shootable::Shootable,
|
||||
@ -374,6 +374,11 @@ impl IPlayer for LocalPlayer {
|
||||
fn get_buffs_mut(&mut self) -> &mut Buffs {
|
||||
&mut self.buffs
|
||||
}
|
||||
|
||||
fn new_buff(&mut self, buff: Buff) {
|
||||
self.buffs.new_buff(buff);
|
||||
self.buffs.clone().update_effects(self);
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
|
||||
@ -16,7 +16,7 @@ use crate::{
|
||||
},
|
||||
pickup::PickupKind,
|
||||
player::{
|
||||
buffs::Buffs,
|
||||
buffs::{Buff, Buffs},
|
||||
shootable::Shootable,
|
||||
telegrenade::Telegrenade,
|
||||
weapon::{BallWeapon, Weapon, WeaponType},
|
||||
@ -78,6 +78,7 @@ pub trait IPlayer {
|
||||
fn set_bubble_color(&mut self, color: Color);
|
||||
fn get_buffs(&self) -> &Buffs;
|
||||
fn get_buffs_mut(&mut self) -> &mut Buffs;
|
||||
fn new_buff(&mut self, buff: Buff);
|
||||
}
|
||||
|
||||
pub trait PlayerCommon {
|
||||
|
||||
@ -13,7 +13,7 @@ use crate::{
|
||||
pickup::PickupKind,
|
||||
player::{
|
||||
DamageSource, DamageSourceSignal, IPlayer, NetTransform, PlayerCommon,
|
||||
buffs::Buffs,
|
||||
buffs::{Buff, Buffs},
|
||||
effects::PlayerEffects,
|
||||
shootable::Shootable,
|
||||
soldier_mesh::SoldierMesh,
|
||||
@ -315,6 +315,11 @@ impl IPlayer for RemotePlayer {
|
||||
fn get_buffs_mut(&mut self) -> &mut Buffs {
|
||||
&mut self.buffs
|
||||
}
|
||||
|
||||
fn new_buff(&mut self, buff: Buff) {
|
||||
self.buffs.new_buff(buff);
|
||||
self.buffs.clone().update_effects(self);
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user