@@ -686,8 +686,13 @@ const NS::SyncGroup *SceneSynchronizerBase::sync_group_get(SyncGroupId p_group_i
686686 return static_cast <ServerSynchronizer *>(synchronizer)->sync_group_get (p_group_id);
687687}
688688
689- void SceneSynchronizerBase::sync_group_add_object_by_id (ObjectNetId p_node_id, SyncGroupId p_group_id, bool p_realtime) {
690- NS::ObjectData *nd = get_object_data (p_node_id);
689+ void SceneSynchronizerBase::sync_group_add_object (ObjectLocalId p_id, SyncGroupId p_group_id, bool p_realtime) {
690+ NS::ObjectData *nd = get_object_data (p_id);
691+ sync_group_add_object (nd, p_group_id, p_realtime);
692+ }
693+
694+ void SceneSynchronizerBase::sync_group_add_object (ObjectNetId p_id, SyncGroupId p_group_id, bool p_realtime) {
695+ NS::ObjectData *nd = get_object_data (p_id);
691696 sync_group_add_object (nd, p_group_id, p_realtime);
692697}
693698
@@ -696,8 +701,13 @@ void SceneSynchronizerBase::sync_group_add_object(NS::ObjectData *p_object_data,
696701 static_cast <ServerSynchronizer *>(synchronizer)->sync_group_add_object (p_object_data, p_group_id, p_realtime);
697702}
698703
699- void SceneSynchronizerBase::sync_group_remove_object_by_id (ObjectNetId p_node_id, SyncGroupId p_group_id) {
700- NS::ObjectData *nd = get_object_data (p_node_id);
704+ void SceneSynchronizerBase::sync_group_remove_object (ObjectLocalId p_id, SyncGroupId p_group_id) {
705+ NS::ObjectData *nd = get_object_data (p_id);
706+ sync_group_remove_object (nd, p_group_id);
707+ }
708+
709+ void SceneSynchronizerBase::sync_group_remove_object (ObjectNetId p_id, SyncGroupId p_group_id) {
710+ NS::ObjectData *nd = get_object_data (p_id);
701711 sync_group_remove_object (nd, p_group_id);
702712}
703713
@@ -706,6 +716,21 @@ void SceneSynchronizerBase::sync_group_remove_object(NS::ObjectData *p_object_da
706716 static_cast <ServerSynchronizer *>(synchronizer)->sync_group_remove_object (p_object_data, p_group_id);
707717}
708718
719+ void SceneSynchronizerBase::sync_group_fetch_object_grups (NS::ObjectLocalId p_id, std::vector<SyncGroupId> &r_simulated_groups, std::vector<SyncGroupId> &r_trickled_groups) const {
720+ const NS::ObjectData *object_data = get_object_data (p_id);
721+ sync_group_fetch_object_grups (object_data, r_simulated_groups, r_trickled_groups);
722+ }
723+
724+ void SceneSynchronizerBase::sync_group_fetch_object_grups (NS::ObjectNetId p_id, std::vector<SyncGroupId> &r_simulated_groups, std::vector<SyncGroupId> &r_trickled_groups) const {
725+ const NS::ObjectData *object_data = get_object_data (p_id);
726+ sync_group_fetch_object_grups (object_data, r_simulated_groups, r_trickled_groups);
727+ }
728+
729+ void SceneSynchronizerBase::sync_group_fetch_object_grups (const NS::ObjectData *p_object_data, std::vector<SyncGroupId> &r_simulated_groups, std::vector<SyncGroupId> &r_trickled_groups) const {
730+ ENSURE_MSG (is_server (), " This function CAN be used only on the server." );
731+ static_cast <ServerSynchronizer *>(synchronizer)->sync_group_fetch_object_grups (p_object_data, r_simulated_groups, r_trickled_groups);
732+ }
733+
709734void SceneSynchronizerBase::sync_group_replace_objects (SyncGroupId p_group_id, LocalVector<NS::SyncGroup::SimulatedObjectInfo> &&p_new_realtime_nodes, LocalVector<NS::SyncGroup::TrickledObjectInfo> &&p_new_trickled_nodes) {
710735 ENSURE_MSG (is_server (), " This function CAN be used only on the server." );
711736 static_cast <ServerSynchronizer *>(synchronizer)->sync_group_replace_object (p_group_id, std::move (p_new_realtime_nodes), std::move (p_new_trickled_nodes));
@@ -748,6 +773,11 @@ const std::vector<int> *SceneSynchronizerBase::sync_group_get_listening_peers(Sy
748773 return static_cast <ServerSynchronizer *>(synchronizer)->sync_group_get_listening_peers (p_group_id);
749774}
750775
776+ const std::vector<int > *SceneSynchronizerBase::sync_group_get_simulating_peers (SyncGroupId p_group_id) const {
777+ ENSURE_V_MSG (is_server (), nullptr , " This function CAN be used only on the server." );
778+ return static_cast <ServerSynchronizer *>(synchronizer)->sync_group_get_simulating_peers (p_group_id);
779+ }
780+
751781void SceneSynchronizerBase::sync_group_set_trickled_update_rate (ObjectLocalId p_node_id, SyncGroupId p_group_id, float p_update_rate) {
752782 NS::ObjectData *od = get_object_data (p_node_id);
753783 ENSURE_MSG (is_server (), " This function CAN be used only on the server." );
@@ -1769,6 +1799,7 @@ SyncGroupId ServerSynchronizer::sync_group_create() {
17691799 SyncGroupId id;
17701800 id.id = sync_groups.size ();
17711801 sync_groups.resize (id.id + 1 );
1802+ sync_groups[id.id ].group_id = id;
17721803 sync_groups[id.id ].scene_sync = scene_synchronizer;
17731804 return id;
17741805}
@@ -1779,19 +1810,39 @@ const NS::SyncGroup *ServerSynchronizer::sync_group_get(SyncGroupId p_group_id)
17791810}
17801811
17811812void ServerSynchronizer::sync_group_add_object (NS::ObjectData *p_object_data, SyncGroupId p_group_id, bool p_realtime) {
1782- ERR_FAIL_COND (p_object_data == nullptr );
1813+ ENSURE (p_object_data);
17831814 ERR_FAIL_COND_MSG (p_group_id.id >= sync_groups.size (), " The group id `" + itos (p_group_id.id ) + " ` doesn't exist." );
17841815 ERR_FAIL_COND_MSG (p_group_id == SyncGroupId::GLOBAL, " You can't change this SyncGroup in any way. Create a new one." );
17851816 sync_groups[p_group_id.id ].add_new_sync_object (p_object_data, p_realtime);
17861817}
17871818
17881819void ServerSynchronizer::sync_group_remove_object (NS::ObjectData *p_object_data, SyncGroupId p_group_id) {
1789- ERR_FAIL_COND (p_object_data == nullptr );
17901820 ERR_FAIL_COND_MSG (p_group_id.id >= sync_groups.size (), " The group id `" + itos (p_group_id.id ) + " ` doesn't exist." );
1821+ ENSURE (p_object_data);
17911822 ERR_FAIL_COND_MSG (p_group_id == SyncGroupId::GLOBAL, " You can't change this SyncGroup in any way. Create a new one." );
17921823 sync_groups[p_group_id.id ].remove_sync_object (*p_object_data);
17931824}
17941825
1826+ void ServerSynchronizer::sync_group_fetch_object_grups (const ObjectData *p_object_data, std::vector<SyncGroupId> &r_simulated_groups, std::vector<SyncGroupId> &r_trickled_groups) const {
1827+ ENSURE (p_object_data);
1828+
1829+ r_simulated_groups.clear ();
1830+ r_trickled_groups.clear ();
1831+
1832+ SyncGroupId id = { 0 };
1833+ for (const SyncGroup &group : sync_groups) {
1834+ if (group.get_simulated_sync_objects ().find (SyncGroup::SimulatedObjectInfo (const_cast <ObjectData *>(p_object_data))) != -1 ) {
1835+ r_simulated_groups.push_back (id);
1836+ }
1837+
1838+ if (group.get_trickled_sync_objects ().find (SyncGroup::TrickledObjectInfo (const_cast <ObjectData *>(p_object_data))) != -1 ) {
1839+ r_trickled_groups.push_back (id);
1840+ }
1841+
1842+ id += 1 ;
1843+ }
1844+ }
1845+
17951846void ServerSynchronizer::sync_group_replace_object (SyncGroupId p_group_id, LocalVector<NS::SyncGroup::SimulatedObjectInfo> &&p_new_realtime_nodes, LocalVector<NS::SyncGroup::TrickledObjectInfo> &&p_new_trickled_nodes) {
17961847 ERR_FAIL_COND_MSG (p_group_id.id >= sync_groups.size (), " The group id `" + itos (p_group_id.id ) + " ` doesn't exist." );
17971848 ERR_FAIL_COND_MSG (p_group_id == SyncGroupId::GLOBAL, " You can't change this SyncGroup in any way. Create a new one." );
@@ -1834,10 +1885,15 @@ void ServerSynchronizer::sync_group_update(int p_peer_id) {
18341885}
18351886
18361887const std::vector<int > *ServerSynchronizer::sync_group_get_listening_peers (SyncGroupId p_group_id) const {
1837- ERR_FAIL_COND_V_MSG (p_group_id.id >= sync_groups.size (), nullptr , " The group id `" + itos (p_group_id. id ) + " ` doesn't exist." );
1888+ ENSURE_V_MSG (p_group_id.id < sync_groups.size (), nullptr , " The group id `" + std::string (p_group_id) + " ` doesn't exist." );
18381889 return &sync_groups[p_group_id.id ].get_listening_peers ();
18391890}
18401891
1892+ const std::vector<int > *ServerSynchronizer::sync_group_get_simulating_peers (SyncGroupId p_group_id) const {
1893+ ENSURE_V_MSG (p_group_id.id < sync_groups.size (), nullptr , " The group id `" + std::string (p_group_id) + " ` doesn't exist." );
1894+ return &sync_groups[p_group_id.id ].get_simulating_peers ();
1895+ }
1896+
18411897void ServerSynchronizer::set_peer_networking_enable (int p_peer, bool p_enable) {
18421898 PeerData *pd = MapFunc::get_or_null (scene_synchronizer->peer_data , p_peer);
18431899 ENSURE (pd);
@@ -2622,7 +2678,7 @@ void ClientSynchronizer::process_received_server_state() {
26222678 if (need_rewind) {
26232679 SceneSynchronizerDebugger::singleton ()->notify_event (SceneSynchronizerDebugger::FrameEvent::CLIENT_DESYNC_DETECTED);
26242680 SceneSynchronizerDebugger::singleton ()->print (
2625- __INTERNAL ,
2681+ VERBOSE ,
26262682 std::string (" Recover input: " ) + std::string (last_checked_input) + " - Last input: " + std::string (inner_player_controller->get_stored_frame_index (-1 )),
26272683 scene_synchronizer->get_network_interface ().get_owner_name ());
26282684
0 commit comments