heal target

This commit is contained in:
Robin Appelman 2025-06-28 23:03:12 +02:00
commit 0aa4402b22

View file

@ -5,6 +5,7 @@ use tf_demo_parser::demo::data::game_state::{
use tf_demo_parser::demo::data::DemoTick; use tf_demo_parser::demo::data::DemoTick;
use tf_demo_parser::demo::gamevent::GameEvent; use tf_demo_parser::demo::gamevent::GameEvent;
use tf_demo_parser::demo::header::Header; use tf_demo_parser::demo::header::Header;
use tf_demo_parser::demo::message::EntityId;
use tf_demo_parser::demo::parser::analyser::UserInfo; use tf_demo_parser::demo::parser::analyser::UserInfo;
use tf_demo_parser::demo::parser::gamestateanalyser::{ use tf_demo_parser::demo::parser::gamestateanalyser::{
Building, Class, Dispenser, GameState, Kill, PlayerState as PlayerAliveState, Sentry, Team, Building, Class, Dispenser, GameState, Kill, PlayerState as PlayerAliveState, Sentry, Team,
@ -203,7 +204,15 @@ impl PlayerState {
let combined_bytes = team_class_health.to_le_bytes(); let combined_bytes = team_class_health.to_le_bytes();
let class_bits = match self.class_data { let class_bits = match self.class_data {
PlayerClassData::Medic { charge, medigun } => [charge, medigun as u8], PlayerClassData::Medic {
charge,
medigun,
target,
} => {
let medigun_bits =
((medigun as u8) << 6) + target.map(u32::from).unwrap_or_default() as u8;
[charge, medigun_bits]
}
PlayerClassData::Spy { PlayerClassData::Spy {
disguise_class, disguise_class,
disguise_team, disguise_team,
@ -258,10 +267,14 @@ impl PlayerState {
let mut cloaked = false; let mut cloaked = false;
let class_data = match class { let class_data = match class {
Class::Medic => PlayerClassData::Medic { Class::Medic => {
let target_bits = class_bits[1] & 31;
PlayerClassData::Medic {
charge: class_bits[0], charge: class_bits[0],
medigun: MedigunType::try_from(class_bits[1]).unwrap_or_default(), medigun: MedigunType::try_from(class_bits[1] >> 6).unwrap_or_default(),
}, target: (target_bits > 0).then(|| EntityId::from(target_bits as u32)),
}
}
Class::Spy => { Class::Spy => {
let disguise_team = Team::new(class_bits[0] >> 6); let disguise_team = Team::new(class_bits[0] >> 6);
let disguise_class = Class::new((class_bits[0] >> 2) & 15); let disguise_class = Class::new((class_bits[0] >> 2) & 15);
@ -353,6 +366,7 @@ fn test_player_packing_medic() {
class_data: PlayerClassData::Medic { class_data: PlayerClassData::Medic {
charge: 52, charge: 52,
medigun: MedigunType::Quickfix, medigun: MedigunType::Quickfix,
target: Some(EntityId::from(8u32)),
}, },
ubered: true, ubered: true,
cloaked: false, cloaked: false,