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,11 +32,18 @@ void FrameMaker::Debug_FullObject(Human* hum)
}
out_data->Push(*xobj);
}
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_full_obj:%s",
{
hum->room->GetFrameNo(),
out_data->ToJsonStr()
}));
hum->TraverseObservers
(
[&out_data] (Human* hum, bool& stop)
{
if (hum->IsPlayer()) {
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_full_obj:%s",
{
hum->room->GetFrameNo() / 2,
out_data->ToJsonStr()
}));
}
});
}
}
@ -58,11 +65,18 @@ void FrameMaker::Debug_OutObject(Human* hum)
}
out_data->Push(*xobj);
}
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_out_obj:%s",
{
hum->room->GetFrameNo(),
out_data->ToJsonStr()
}));
hum->TraverseObservers
(
[&out_data] (Human* hum, bool& stop)
{
if (hum->IsPlayer()) {
hum->SendDebugMsg(a8::Format("view_debug frameno:%d server_out_obj:%s",
{
hum->room->GetFrameNo() / 2,
out_data->ToJsonStr()
}));
}
});
}
}

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