1
This commit is contained in:
parent
54c2dbdae3
commit
421e34abf4
@ -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)
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user