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::gamevent::GameEvent;
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::gamestateanalyser::{
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 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 {
disguise_class,
disguise_team,
@ -258,10 +267,14 @@ impl PlayerState {
let mut cloaked = false;
let class_data = match class {
Class::Medic => PlayerClassData::Medic {
charge: class_bits[0],
medigun: MedigunType::try_from(class_bits[1]).unwrap_or_default(),
},
Class::Medic => {
let target_bits = class_bits[1] & 31;
PlayerClassData::Medic {
charge: class_bits[0],
medigun: MedigunType::try_from(class_bits[1] >> 6).unwrap_or_default(),
target: (target_bits > 0).then(|| EntityId::from(target_bits as u32)),
}
}
Class::Spy => {
let disguise_team = Team::new(class_bits[0] >> 6);
let disguise_class = Class::new((class_bits[0] >> 2) & 15);
@ -353,6 +366,7 @@ fn test_player_packing_medic() {
class_data: PlayerClassData::Medic {
charge: 52,
medigun: MedigunType::Quickfix,
target: Some(EntityId::from(8u32)),
},
ubered: true,
cloaked: false,