Add buffs to replay data as well
This commit is contained in:
parent
e763db9108
commit
1393338839
@ -2,10 +2,11 @@ use godot::{
|
||||
classes::{CharacterBody3D, class_macros::private::virtuals::ZipReader::Color},
|
||||
obj::DynGd,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::player::IPlayer;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Buffs {
|
||||
buffs: Vec<Buff>,
|
||||
}
|
||||
@ -52,7 +53,7 @@ impl Buffs {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Buff {
|
||||
pub time_remaining: f64,
|
||||
pub kind: BuffKind,
|
||||
@ -64,7 +65,7 @@ impl Buff {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub enum BuffKind {
|
||||
SpawnProtection,
|
||||
}
|
||||
|
||||
@ -379,6 +379,11 @@ impl IPlayer for LocalPlayer {
|
||||
self.buffs.new_buff(buff);
|
||||
self.buffs.clone().update_effects(self);
|
||||
}
|
||||
|
||||
fn set_buffs(&mut self, buffs: Buffs) {
|
||||
self.buffs = buffs.clone();
|
||||
buffs.update_effects(self);
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
|
||||
@ -79,6 +79,7 @@ pub trait IPlayer {
|
||||
fn get_buffs(&self) -> &Buffs;
|
||||
fn get_buffs_mut(&mut self) -> &mut Buffs;
|
||||
fn new_buff(&mut self, buff: Buff);
|
||||
fn set_buffs(&mut self, buffs: Buffs);
|
||||
}
|
||||
|
||||
pub trait PlayerCommon {
|
||||
|
||||
@ -320,6 +320,11 @@ impl IPlayer for RemotePlayer {
|
||||
self.buffs.new_buff(buff);
|
||||
self.buffs.clone().update_effects(self);
|
||||
}
|
||||
|
||||
fn set_buffs(&mut self, buffs: Buffs) {
|
||||
self.buffs = buffs.clone();
|
||||
buffs.update_effects(self);
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
|
||||
@ -15,7 +15,7 @@ use crate::{
|
||||
net::{network_manager::BallSync, util::NetVector3},
|
||||
pickup::{PickupKind, ReplayVisibility},
|
||||
player::{
|
||||
DamageSource, IPlayer, NetTransform, ball::Ball, remote_player::RemotePlayer,
|
||||
DamageSource, IPlayer, NetTransform, ball::Ball, buffs::Buffs, remote_player::RemotePlayer,
|
||||
telegrenade::Telegrenade, weapon::WeaponType,
|
||||
},
|
||||
ui::{hud::Hud, replay_hud::ReplayHud},
|
||||
@ -389,6 +389,7 @@ impl INode for ReplayPlayback {
|
||||
.bind_mut()
|
||||
.set_movement_dir(state.movement_dir.into());
|
||||
character.bind_mut().set_hp(state.health);
|
||||
character.bind_mut().set_buffs(state.buffs.clone());
|
||||
let weapon = character.bind().get_weapon().clone();
|
||||
if let Some(weapon) = weapon
|
||||
&& weapon.dyn_bind().get_type() != state.current_weapon
|
||||
@ -754,6 +755,7 @@ pub struct ReplayPlayerState {
|
||||
pub kills: u16,
|
||||
pub deaths: u16,
|
||||
pub health: i32,
|
||||
pub buffs: Buffs,
|
||||
}
|
||||
|
||||
impl Player {
|
||||
@ -772,6 +774,7 @@ impl Player {
|
||||
kills: player.data.kills,
|
||||
deaths: player.data.deaths,
|
||||
health: character.dyn_bind().get_health(),
|
||||
buffs: character.dyn_bind().get_buffs().clone(),
|
||||
})
|
||||
} else {
|
||||
None
|
||||
|
||||
Loading…
Reference in New Issue
Block a user