#pragma once #include namespace cs { class SMSyncPosition; }; struct SyncObject { int obj_uniid = 0; CreatureWeakPtr c; glm::vec3 pos = glm::vec3(0.0f, 0.0f, 0.0f); glm::vec3 dir = glm::vec3(0.0f, 0.0f, 0.0f); long long last_sync_frameno = 0; void FillSMSyncPosition(cs::SMSyncPosition& sync_msg); }; class Creature; class Team; class BatchSync { public: BatchSync(Room* room); virtual ~BatchSync(); void AddGlobalObject(Creature* c); void RemoveGlobalObject(int obj_uniid); void AddTeam(Team* team); void UpdateTeam(Team* team); void RemoveTeam(Team* team); private: Room* room_ = nullptr; f8::Attacher timer_attacher_; std::map>> global_object_hash_; std::map>>> team_hash_; };