This commit is contained in:
aozhiwei 2021-09-14 11:12:30 +00:00
parent 54c2dbdae3
commit 421e34abf4
3 changed files with 40 additions and 13 deletions

View File

@ -32,12 +32,19 @@ void FrameMaker::Debug_FullObject(Human* hum)
} }
out_data->Push(*xobj); out_data->Push(*xobj);
} }
hum->TraverseObservers
(
[&out_data] (Human* hum, bool& stop)
{
if (hum->IsPlayer()) {
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_full_obj:%s", hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_full_obj:%s",
{ {
hum->room->GetFrameNo(), hum->room->GetFrameNo() / 2,
out_data->ToJsonStr() out_data->ToJsonStr()
})); }));
} }
});
}
} }
void FrameMaker::Debug_OutObject(Human* hum) void FrameMaker::Debug_OutObject(Human* hum)
@ -58,12 +65,19 @@ void FrameMaker::Debug_OutObject(Human* hum)
} }
out_data->Push(*xobj); out_data->Push(*xobj);
} }
hum->TraverseObservers
(
[&out_data] (Human* hum, bool& stop)
{
if (hum->IsPlayer()) {
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_out_obj:%s", hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_out_obj:%s",
{ {
hum->room->GetFrameNo(), hum->room->GetFrameNo() / 2,
out_data->ToJsonStr() out_data->ToJsonStr()
})); }));
} }
});
}
} }
cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)

View File

@ -2350,6 +2350,7 @@ void Human::GetViewObjects(std::set<Entity*>& view_objects)
void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_player_data_pb) void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_player_data_pb)
{ {
bool refreshed_view = false; bool refreshed_view = false;
std::set<int> synced_objects;
for (Human* observer : observers_) { for (Human* observer : observers_) {
msg->clear_team_data(); msg->clear_team_data();
if (observer->GetTeam()) { if (observer->GetTeam()) {
@ -2367,10 +2368,9 @@ void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_pl
msg->set_active_player_id(GetUniId()); msg->set_active_player_id(GetUniId());
FillMFActivePlayerData(msg->mutable_active_player_data()); FillMFActivePlayerData(msg->mutable_active_player_data());
if (!refreshed_view) { if (!refreshed_view) {
std::set<int> synced_objects;
{ {
for (auto& full_obj : msg->full_objects()) { for (auto& pair : framedata_.new_objects) {
synced_objects.insert(full_obj.obj_uniid()); synced_objects.insert(pair.first);
} }
} }
std::set<Entity*> view_objects; std::set<Entity*> view_objects;
@ -2378,6 +2378,7 @@ void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_pl
for (Entity* entity : view_objects) { for (Entity* entity : view_objects) {
if (synced_objects.find(entity->GetUniId()) == synced_objects.end()) { if (synced_objects.find(entity->GetUniId()) == synced_objects.end()) {
entity->FillMFObjectFull(room, this, msg->add_full_objects()); entity->FillMFObjectFull(room, this, msg->add_full_objects());
synced_objects.insert(entity->GetUniId());
} }
} }
refreshed_view = true; refreshed_view = true;
@ -3672,3 +3673,14 @@ void Human::OnWatcherDie(Human* watcher)
#endif #endif
} }
} }
void Human::TraverseObservers(std::function<void (Human*, bool&)> func)
{
bool stop;
for (auto& observer : observers_) {
func(observer, stop);
if (stop) {
break;
}
}
}

View File

@ -211,6 +211,7 @@ class Human : public Creature
void AddObserver(Human* observer); void AddObserver(Human* observer);
void RemoveObserver(Human* observer); void RemoveObserver(Human* observer);
bool HasObserver(); bool HasObserver();
void TraverseObservers(std::function<void (Human*, bool&)> func);
void SendUpdateMsg(); void SendUpdateMsg();
template <typename T> template <typename T>
void SendNotifyMsg(T& msg) void SendNotifyMsg(T& msg)