This commit is contained in:
aozhiwei 2022-12-24 12:10:51 +08:00
parent a36178f829
commit 716f70f09b
2 changed files with 104 additions and 126 deletions

View File

@ -13,7 +13,7 @@
void FrameEvent::AddAirDrop(int appear_time, int box_id, Position box_pos)
{
cs::MFAirDrop* airdrop = airdrops_.Add();
cs::MFAirDrop* airdrop = room->frame_event_data_->airdrops_.Add();
airdrop->set_appear_time(appear_time);
airdrop->set_box_id(box_id);
TypeConvert::ToPb(box_pos, airdrop->mutable_pos());
@ -21,7 +21,7 @@ void FrameEvent::AddAirDrop(int appear_time, int box_id, Position box_pos)
void FrameEvent::AddAirRaid(int appear_time, const glm::vec3& raid_pos, float raid_rad)
{
cs::MFAirRaid* airraid = airraids_.Add();
cs::MFAirRaid* airraid = room->frame_event_data->airraids_.Add();
airraid->set_appear_time(appear_time);
airraid->set_rad(raid_rad);
TypeConvert::ToPb(raid_pos, airraid->mutable_pos());
@ -30,7 +30,7 @@ void FrameEvent::AddAirRaid(int appear_time, const glm::vec3& raid_pos, float ra
void FrameEvent::AddEmote(CreatureWeakPtr& sender, int emote_id)
{
{
auto& tuple = a8::FastAppend(emotes_);
auto& tuple = a8::FastAppend(room->frame_event_data->emotes_);
std::get<0>(tuple) = sender;
auto& p = std::get<1>(tuple);
@ -38,12 +38,12 @@ void FrameEvent::AddEmote(CreatureWeakPtr& sender, int emote_id)
p.set_player_id(sender.Get()->GetUniId());
}
{
int emote_idx = emotes_.size() - 1;
int emote_idx = room->frame_event_data->emotes_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[emote_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().emotes_.push_back(emote_idx);
hum->GetFrameData().room->frame_event_data->emotes_.push_back(emote_idx);
});
}
}
@ -51,7 +51,7 @@ void FrameEvent::AddEmote(CreatureWeakPtr& sender, int emote_id)
void FrameEvent::AddShot(CreatureWeakPtr& sender)
{
{
auto& tuple = a8::FastAppend(shots_);
auto& tuple = a8::FastAppend(room->frame_event_data->shots_);
std::get<0>(tuple) = sender;
auto& p = std::get<1>(tuple);
@ -69,12 +69,12 @@ void FrameEvent::AddShot(CreatureWeakPtr& sender)
}
}
{
int shot_idx = shots_.size() - 1;
int shot_idx = room->frame_event_data->shots_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[shot_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().shots_.push_back(shot_idx);
hum->GetFrameData().room->frame_event_data->shots_.push_back(shot_idx);
});
}
}
@ -90,7 +90,7 @@ void FrameEvent::AddBullet(int bullet_uniid,
int hand)
{
{
auto& tuple = a8::FastAppend(bullets_);
auto& tuple = a8::FastAppend(room->frame_event_data->bullets_);
std::get<0>(tuple) = sender;
auto& p = std::get<1>(tuple);
@ -108,7 +108,7 @@ void FrameEvent::AddBullet(int bullet_uniid,
p.set_hand(hand);
}
{
int bullet_idx = bullets_.size() - 1;
int bullet_idx = room->frame_event_data->bullets_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[bullet_idx, &sender] (Human* hum, bool& stop)
@ -118,14 +118,14 @@ void FrameEvent::AddBullet(int bullet_uniid,
A8_ABORT();
}
#endif
hum->GetFrameData().bullets_.push_back(bullet_idx);
hum->GetFrameData().room->frame_event_data->bullets_.push_back(bullet_idx);
});
}
}
void FrameEvent::RemoveBullet(glm::vec3 pos, int bullet_uniid)
{
del_bullets_.push_back(bullet_uniid);
del_room->frame_event_data->bullets_.push_back(bullet_uniid);
{
std::set<GridCell*> grid_list;
room->grid_service->GetAllCellsByXy
@ -136,14 +136,14 @@ void FrameEvent::RemoveBullet(glm::vec3 pos, int bullet_uniid)
grid_list
);
int bullet_idx = del_bullets_.size() - 1;
int bullet_idx = del_room->frame_event_data->bullets_.size() - 1;
room->grid_service->TraverseAllLayerHumanList
(
room->GetRoomIdx(),
grid_list,
[bullet_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().del_bullets_.push_back(bullet_idx);
hum->GetFrameData().del_room->frame_event_data->bullets_.push_back(bullet_idx);
});
}
}
@ -161,7 +161,7 @@ void FrameEvent::AddExplosionEx(CreatureWeakPtr& sender, int item_id, Position b
}
#endif
{
auto& tuple = a8::FastAppend(explosions_);
auto& tuple = a8::FastAppend(room->frame_event_data->explosions_);
if (sender.Get()) {
std::get<0>(tuple).Attach(sender.Get());
}
@ -184,30 +184,30 @@ void FrameEvent::AddExplosionEx(CreatureWeakPtr& sender, int item_id, Position b
grid_list
);
int explosion_idx = explosions_.size() - 1;
int explosion_idx = room->frame_event_data->explosions_.size() - 1;
room->grid_service->TraverseAllLayerHumanList
(
room->GetRoomIdx(),
grid_list,
[explosion_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().explosions_.push_back(explosion_idx);
hum->GetFrameData().room->frame_event_data->explosions_.push_back(explosion_idx);
});
}
}
void FrameEvent::AddBulletNumChg(CreatureWeakPtr& sender)
{
chged_bullet_nums_.push_back(sender);
int idx = chged_bullet_nums_.size() - 1;
room->frame_event_data->chged_bullet_nums_.push_back(sender);
int idx = room->frame_event_data->chged_bullet_nums_.size() - 1;
if (sender.Get()->IsHuman()) {
sender.Get()->AsHuman()->GetFrameData().chged_bullet_nums_.push_back(idx);
sender.Get()->AsHuman()->GetFrameData().room->frame_event_data->chged_bullet_nums_.push_back(idx);
} else {
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_bullet_nums_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_bullet_nums_.push_back(idx);
});
}
}
@ -218,7 +218,7 @@ void FrameEvent::AddSmoke(Bullet* bullet, int item_id, glm::vec3 pos, float time
return;
}
{
auto& tuple = a8::FastAppend(smokes_);
auto& tuple = a8::FastAppend(room->frame_event_data->smokes_);
std::get<0>(tuple).Attach(bullet->sender.Get());
auto& p = std::get<1>(tuple);
@ -228,12 +228,12 @@ void FrameEvent::AddSmoke(Bullet* bullet, int item_id, glm::vec3 pos, float time
p.set_time_addition(time_addition);
}
{
int idx = smokes_.size() - 1;
int idx = room->frame_event_data->smokes_.size() - 1;
bullet->sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().smokes_.push_back(idx);
hum->GetFrameData().room->frame_event_data->smokes_.push_back(idx);
});
}
}
@ -244,54 +244,54 @@ void FrameEvent::AddPlaySkill(CreatureWeakPtr& sender, int skill_id)
return;
}
{
auto& tuple = a8::FastAppend(play_skills_);
auto& tuple = a8::FastAppend(room->frame_event_data->play_skills_);
std::get<0>(tuple).Attach(sender.Get());
auto& p = std::get<1>(tuple);
p.set_obj_uniid(sender.Get()->GetUniId());
p.set_skill_id(skill_id);
}
{
int idx = play_skills_.size() - 1;
int idx = room->frame_event_data->play_skills_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().play_skills_.push_back(idx);
hum->GetFrameData().room->frame_event_data->play_skills_.push_back(idx);
});
}
}
void FrameEvent::AddHpChg(CreatureWeakPtr& sender)
{
chged_hps_.push_back(sender);
int idx = chged_hps_.size() - 1;
room->frame_event_data->chged_hps_.push_back(sender);
int idx = room->frame_event_data->chged_hps_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_hps_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_hps_.push_back(idx);
});
}
void FrameEvent::AddWeaponAmmoChg(CreatureWeakPtr& sender)
{
if (sender.Get()->GetCurrWeapon()) {
chged_weapon_ammo_.push_back
room->frame_event_data->chged_weapon_ammo_.push_back
(
std::make_tuple(sender,
sender.Get()->GetCurrWeapon()->weapon_idx,
sender.Get()->GetCurrWeapon()->ammo
)
);
int idx = chged_weapon_ammo_.size() - 1;
int idx = room->frame_event_data->chged_weapon_ammo_.size() - 1;
if (sender.Get()->IsHuman()) {
sender.Get()->AsHuman()->GetFrameData().chged_weapon_ammo_.push_back(idx);
sender.Get()->AsHuman()->GetFrameData().room->frame_event_data->chged_weapon_ammo_.push_back(idx);
} else {
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_weapon_ammo_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_weapon_ammo_.push_back(idx);
});
}
}
@ -304,15 +304,15 @@ void FrameEvent::AddBuff(CreatureWeakPtr& sender, Buff* buff)
chged_buff_pb.set_obj_id(sender.Get()->GetUniId());
chged_buff_pb.set_chg(0);
buff->FillMFBuff(chged_buff_pb.mutable_buff());
chged_buffs_.push_back(std::make_tuple(sender, chged_buff_pb));
room->frame_event_data->chged_buffs_.push_back(std::make_tuple(sender, chged_buff_pb));
}
{
int idx = chged_buffs_.size() - 1;
int idx = room->frame_event_data->chged_buffs_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_buffs_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_buffs_.push_back(idx);
});
}
}
@ -327,15 +327,15 @@ void FrameEvent::RemoveBuff(CreatureWeakPtr& sender, Buff* buff)
#if 0
chged_buff_pb.mutable_buff()->set_buff_id(buff_id);
#endif
chged_buffs_.push_back(std::make_tuple(sender, chged_buff_pb));
room->frame_event_data->chged_buffs_.push_back(std::make_tuple(sender, chged_buff_pb));
}
{
int idx = chged_buffs_.size() - 1;
int idx = room->frame_event_data->chged_buffs_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_buffs_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_buffs_.push_back(idx);
});
}
}
@ -343,27 +343,27 @@ void FrameEvent::RemoveBuff(CreatureWeakPtr& sender, Buff* buff)
void FrameEvent::AddSkillCdChg(CreatureWeakPtr sender, int skill_id, int left_time)
{
if (sender.Get() && sender.Get()->IsHuman()) {
chged_skillcds_.push_back(std::make_tuple(sender, skill_id, left_time));
int idx = chged_skillcds_.size() - 1;
((Human*)sender.Get())->GetFrameData().chged_skillcds_.push_back(idx);
room->frame_event_data->chged_skillcds_.push_back(std::make_tuple(sender, skill_id, left_time));
int idx = room->frame_event_data->chged_skillcds_.size() - 1;
((Human*)sender.Get())->GetFrameData().room->frame_event_data->chged_skillcds_.push_back(idx);
}
}
void FrameEvent::AddSkillCurrTimesChg(CreatureWeakPtr sender, int skill_id, int curr_times)
{
if (sender.Get() && sender.Get()->IsHuman()) {
chged_skill_curr_times_.push_back(std::make_tuple(sender, skill_id, curr_times));
int idx = chged_skill_curr_times_.size() - 1;
((Human*)sender.Get())->GetFrameData().chged_skill_curr_times_.push_back(idx);
room->frame_event_data->chged_skill_curr_times_.push_back(std::make_tuple(sender, skill_id, curr_times));
int idx = room->frame_event_data->chged_skill_curr_times_.size() - 1;
((Human*)sender.Get())->GetFrameData().room->frame_event_data->chged_skill_curr_times_.push_back(idx);
}
}
void FrameEvent::AddItemChg(CreatureWeakPtr& sender, int item_id, int item_num)
{
if (sender.Get()->IsHuman()) {
chged_items_.push_back(std::make_tuple(sender, item_id, item_num));
int idx = chged_items_.size() - 1;
((Human*)sender.Get())->GetFrameData().chged_items_.push_back(idx);
room->frame_event_data->chged_items_.push_back(std::make_tuple(sender, item_id, item_num));
int idx = room->frame_event_data->chged_items_.size() - 1;
((Human*)sender.Get())->GetFrameData().room->frame_event_data->chged_items_.push_back(idx);
}
}
@ -371,7 +371,7 @@ void FrameEvent::AddDead(CreatureWeakPtr& sender, int revive_time)
{
if (sender.Get()) {
{
dead_alive_objs_.push_back(
room->frame_event_data->dead_alive_objs_.push_back(
std::make_tuple(
sender.Get()->GetUniId(),
revive_time,
@ -380,12 +380,12 @@ void FrameEvent::AddDead(CreatureWeakPtr& sender, int revive_time)
);
}
{
int dead_idx = dead_alive_objs_.size() - 1;
int dead_idx = room->frame_event_data->dead_alive_objs_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[dead_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().dead_alive_objs_.push_back(dead_idx);
hum->GetFrameData().room->frame_event_data->dead_alive_objs_.push_back(dead_idx);
});
}
}
@ -395,7 +395,7 @@ void FrameEvent::AddRevive(CreatureWeakPtr& sender)
{
if (sender.Get()) {
{
dead_alive_objs_.push_back(
room->frame_event_data->dead_alive_objs_.push_back(
std::make_tuple(
sender.Get()->GetUniId(),
0,
@ -404,12 +404,12 @@ void FrameEvent::AddRevive(CreatureWeakPtr& sender)
);
}
{
int revive_idx = dead_alive_objs_.size() - 1;
int revive_idx = room->frame_event_data->dead_alive_objs_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[revive_idx] (Human* hum, bool& stop)
{
hum->GetFrameData().dead_alive_objs_.push_back(revive_idx);
hum->GetFrameData().room->frame_event_data->dead_alive_objs_.push_back(revive_idx);
});
}
}
@ -417,13 +417,13 @@ void FrameEvent::AddRevive(CreatureWeakPtr& sender)
void FrameEvent::AddCarChg(CreatureWeakPtr& sender)
{
chged_cars_.push_back(sender);
int idx = chged_cars_.size() - 1;
room->frame_event_data->chged_cars_.push_back(sender);
int idx = room->frame_event_data->chged_cars_.size() - 1;
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_cars_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_cars_.push_back(idx);
});
}
@ -432,23 +432,23 @@ void FrameEvent::AddPropChg(CreatureWeakPtr& sender, int type, int subtype, floa
if (!sender.Get()) {
return;
}
auto& p = a8::FastAppend(chged_props_);
auto& p = a8::FastAppend(room->frame_event_data->chged_props_);
std::get<0>(p) = sender;
std::get<1>(p).set_obj_id(sender.Get()->GetUniId());
std::get<1>(p).set_property_type(type);
std::get<1>(p).set_property_subtype(subtype);
std::get<1>(p).set_value(value);
int idx = chged_props_.size() - 1;
int idx = room->frame_event_data->chged_props_.size() - 1;
if (only_self) {
if (sender.Get()->IsHuman()) {
sender.Get()->AsHuman()->GetFrameData().chged_props_.push_back(idx);
sender.Get()->AsHuman()->GetFrameData().room->frame_event_data->chged_props_.push_back(idx);
}
} else {
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_props_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_props_.push_back(idx);
});
}
}
@ -459,7 +459,7 @@ void FrameEvent::AddPropChgEx(CreatureWeakPtr& sender, int type, int subtype,
if (!sender.Get()) {
return;
}
auto& p = a8::FastAppend(chged_props_);
auto& p = a8::FastAppend(room->frame_event_data->chged_props_);
std::get<0>(p) = sender;
std::get<1>(p).set_obj_id(sender.Get()->GetUniId());
std::get<1>(p).set_property_type(type);
@ -467,78 +467,78 @@ void FrameEvent::AddPropChgEx(CreatureWeakPtr& sender, int type, int subtype,
std::get<1>(p).set_value(value);
std::get<1>(p).set_value2(value2);
std::get<1>(p).set_value3(value3);
int idx = chged_props_.size() - 1;
int idx = room->frame_event_data->chged_props_.size() - 1;
if (only_self) {
if (sender.Get()->IsHuman()) {
sender.Get()->AsHuman()->GetFrameData().chged_props_.push_back(idx);
sender.Get()->AsHuman()->GetFrameData().room->frame_event_data->chged_props_.push_back(idx);
}
} else {
sender.Get()->TraverseAllLayerHumanList
(
[idx] (Human* hum, bool& stop)
{
hum->GetFrameData().chged_props_.push_back(idx);
hum->GetFrameData().room->frame_event_data->chged_props_.push_back(idx);
});
}
}
void FrameEvent::Clear()
{
if (!explosions_.empty()) {
explosions_.clear();
if (!room->frame_event_data->explosions_.empty()) {
room->frame_event_data->explosions_.clear();
}
if (!smokes_.empty()) {
smokes_.clear();
if (!room->frame_event_data->smokes_.empty()) {
room->frame_event_data->smokes_.clear();
}
if (!play_skills_.empty()) {
play_skills_.clear();
if (!room->frame_event_data->play_skills_.empty()) {
room->frame_event_data->play_skills_.clear();
}
if (!emotes_.empty()) {
emotes_.clear();
if (!room->frame_event_data->emotes_.empty()) {
room->frame_event_data->emotes_.clear();
}
if (!bullets_.empty()) {
bullets_.clear();
if (!room->frame_event_data->bullets_.empty()) {
room->frame_event_data->bullets_.clear();
}
if (!shots_.empty()) {
shots_.clear();
if (!room->frame_event_data->shots_.empty()) {
room->frame_event_data->shots_.clear();
}
if (airdrops_.size() > 0) {
airdrops_.Clear();
if (room->frame_event_data_->airdrops_.size() > 0) {
room->frame_event_data_->airdrops_.Clear();
}
if (airraids_.size() > 0) {
airraids_.Clear();
if (room->frame_event_data->airraids_.size() > 0) {
room->frame_event_data->airraids_.Clear();
}
if (!chged_bullet_nums_.empty()) {
chged_bullet_nums_.clear();
if (!room->frame_event_data->chged_bullet_nums_.empty()) {
room->frame_event_data->chged_bullet_nums_.clear();
}
if (!chged_buffs_.empty()) {
chged_buffs_.clear();
if (!room->frame_event_data->chged_buffs_.empty()) {
room->frame_event_data->chged_buffs_.clear();
}
if (!chged_hps_.empty()) {
chged_hps_.clear();
if (!room->frame_event_data->chged_hps_.empty()) {
room->frame_event_data->chged_hps_.clear();
}
if (!chged_skillcds_.empty()) {
chged_skillcds_.clear();
if (!room->frame_event_data->chged_skillcds_.empty()) {
room->frame_event_data->chged_skillcds_.clear();
}
if (!chged_skill_curr_times_.empty()) {
chged_skill_curr_times_.clear();
if (!room->frame_event_data->chged_skill_curr_times_.empty()) {
room->frame_event_data->chged_skill_curr_times_.clear();
}
if (!chged_items_.empty()) {
chged_items_.clear();
if (!room->frame_event_data->chged_items_.empty()) {
room->frame_event_data->chged_items_.clear();
}
if (!chged_weapon_ammo_.empty()) {
chged_weapon_ammo_.clear();
if (!room->frame_event_data->chged_weapon_ammo_.empty()) {
room->frame_event_data->chged_weapon_ammo_.clear();
}
if (!dead_alive_objs_.empty()) {
dead_alive_objs_.clear();
if (!room->frame_event_data->dead_alive_objs_.empty()) {
room->frame_event_data->dead_alive_objs_.clear();
}
if (!chged_cars_.empty()) {
chged_cars_.clear();
if (!room->frame_event_data->chged_cars_.empty()) {
room->frame_event_data->chged_cars_.clear();
}
if (!chged_props_.empty()) {
chged_props_.clear();
if (!room->frame_event_data->chged_props_.empty()) {
room->frame_event_data->chged_props_.clear();
}
if (!del_bullets_.empty()) {
del_bullets_.clear();
if (!del_room->frame_event_data->bullets_.empty()) {
del_room->frame_event_data->bullets_.clear();
}
}

View File

@ -47,26 +47,4 @@ public:
float value, float value2, float value3, bool only_self = false);
void Clear();
private:
::google::protobuf::RepeatedPtrField<::cs::MFAirDrop> airdrops_;
::google::protobuf::RepeatedPtrField<::cs::MFAirRaid> airraids_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFShot>> shots_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFBullet>> bullets_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFSmoke>> smokes_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFPlaySkill>> play_skills_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFEmote>> emotes_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFBuffChg>> chged_buffs_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_items_;
std::vector<CreatureWeakPtr> chged_bullet_nums_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_weapon_ammo_;
std::vector<CreatureWeakPtr> chged_hps_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_skillcds_;
std::vector<std::tuple<CreatureWeakPtr, int, int>> chged_skill_curr_times_;
std::vector<CreatureWeakPtr> chged_cars_;
std::vector<std::tuple<int, int, int>> dead_alive_objs_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFPropertyChg>> chged_props_;
std::vector<int> del_bullets_;
friend class FrameMaker;
};