1
This commit is contained in:
parent
54c2dbdae3
commit
421e34abf4
@ -32,12 +32,19 @@ void FrameMaker::Debug_FullObject(Human* hum)
|
||||
}
|
||||
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->room->GetFrameNo(),
|
||||
hum->room->GetFrameNo() / 2,
|
||||
out_data->ToJsonStr()
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void FrameMaker::Debug_OutObject(Human* hum)
|
||||
@ -58,12 +65,19 @@ void FrameMaker::Debug_OutObject(Human* hum)
|
||||
}
|
||||
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->room->GetFrameNo(),
|
||||
hum->room->GetFrameNo() / 2,
|
||||
out_data->ToJsonStr()
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user