wicked-waifus-rs/wicked-waifus-game-server/src/logic/components/fight_buff.rs
xavo95 ab868a158a 2.2.2 (#3)
Ongoing changes for 2.2.2

Reviewed-on: WutheringSlaves/wicked-waifus-rs#3
2025-03-09 09:10:08 +00:00

66 lines
2.1 KiB
Rust

use wicked_waifus_protocol::entity_component_pb::ComponentPb;
use wicked_waifus_protocol::{
BuffEffectCd, EntityComponentPb, FightBuffComponentPb, FightBuffInformation,
};
use crate::logic::ecs::component::Component;
#[derive(Default, Clone)]
pub struct FightBuff {
pub fight_buff_infos: Vec<FightBuffInformation>,
pub list_buff_effect_cd: Vec<BuffEffectCd>,
}
impl FightBuff {
fn get_pb_data(pb: &wicked_waifus_protocol::EntityPb) -> Vec<&FightBuffComponentPb> {
pb.component_pbs
.iter()
.filter_map(|pb| {
if let Some(value) = &pb.component_pb {
match value {
ComponentPb::FightBuffComponent(result) => Some(result),
_ => None,
}
} else {
None
}
})
.collect::<Vec<_>>()
}
pub fn from_pb_data(pb: &wicked_waifus_protocol::EntityPb) -> Self {
let pb_data = Self::get_pb_data(pb);
match pb_data.get(0) {
None => Self::default(),
Some(pb) => Self {
fight_buff_infos: pb.fight_buff_infos.clone(),
list_buff_effect_cd: pb.list_buff_effect_cd.clone(),
..Default::default()
},
}
}
}
impl Component for FightBuff {
fn set_pb_data(&self, pb: &mut wicked_waifus_protocol::EntityPb) {
// Remove existing FightBuffComponent
pb.component_pbs.retain(|component_pb| {
if let Some(value) = &component_pb.component_pb {
match value {
ComponentPb::FightBuffComponent(_) => false,
_ => true,
}
} else {
true
}
});
// Add new FightBuffComponent
pb.component_pbs.push(EntityComponentPb {
component_pb: Some(ComponentPb::FightBuffComponent(FightBuffComponentPb {
fight_buff_infos: self.fight_buff_infos.clone(),
list_buff_effect_cd: self.list_buff_effect_cd.clone(),
})),
});
}
}