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