@@ -2010,15 +2010,13 @@ void ServerSynchronizer::process_snapshot_notificator() {
20102010 group.state_notifier_timer = 0.0 ;
20112011 }
20122012
2013- const int MD_SIZE = DataBuffer::get_bit_taken (DataBuffer::DATA_TYPE_UINT, DataBuffer::COMPRESSION_LEVEL_1);
2014-
20152013 bool full_snapshot_need_init = true ;
20162014 DataBuffer full_snapshot;
2017- full_snapshot.begin_write (MD_SIZE );
2015+ full_snapshot.begin_write (0 );
20182016
20192017 bool delta_snapshot_need_init = true ;
20202018 DataBuffer delta_snapshot;
2021- delta_snapshot.begin_write (MD_SIZE );
2019+ delta_snapshot.begin_write (0 );
20222020
20232021 for (int peer_id : group.get_listening_peers ()) {
20242022 if (peer_id == scene_synchronizer->get_network_interface ().fetch_local_peer_id ()) {
@@ -2053,7 +2051,6 @@ void ServerSynchronizer::process_snapshot_notificator() {
20532051 pd_it->second .need_full_snapshot = false ;
20542052 if (full_snapshot_need_init) {
20552053 full_snapshot_need_init = false ;
2056- full_snapshot.seek (MD_SIZE);
20572054 generate_snapshot (true , group, full_snapshot);
20582055 }
20592056
@@ -2062,16 +2059,12 @@ void ServerSynchronizer::process_snapshot_notificator() {
20622059 } else {
20632060 if (delta_snapshot_need_init) {
20642061 delta_snapshot_need_init = false ;
2065- delta_snapshot.seek (MD_SIZE);
20662062 generate_snapshot (false , group, delta_snapshot);
20672063 }
20682064
20692065 snap = &delta_snapshot;
20702066 }
20712067
2072- snap->seek (0 );
2073- snap->add (input_id.id );
2074-
20752068 scene_synchronizer->rpc_handler_state .rpc (
20762069 scene_synchronizer->get_network_interface (),
20772070 peer_id,
@@ -3123,8 +3116,7 @@ bool ClientSynchronizer::parse_sync_data(
31233116 void *p_user_pointer,
31243117 void (*p_custom_data_parse)(void *p_user_pointer, VarData &&p_custom_data),
31253118 void (*p_object_parse)(void *p_user_pointer, NS::ObjectData *p_object_data),
3126- void (*p_peers_frame_index_parse)(void *p_user_pointer, std::map<int , FrameIndex> &&p_frames_index),
3127- void (*p_input_id_parse)(void *p_user_pointer, FrameIndex p_input_id),
3119+ bool (*p_peers_frame_index_parse)(void *p_user_pointer, std::map<int , FrameIndex> &&p_frames_index),
31283120 void (*p_variable_parse)(void *p_user_pointer, NS::ObjectData *p_object_data, VarId p_var_id, VarData &&p_value),
31293121 void (*p_simulated_objects_parse)(void *p_user_pointer, std::vector<ObjectNetId> &&p_simulated_objects)) {
31303122 NS_PROFILE
@@ -3140,12 +3132,6 @@ bool ClientSynchronizer::parse_sync_data(
31403132 }
31413133
31423134 {
3143- // Fetch the `InputID`.
3144- FrameIndex input_id;
3145- p_snapshot.read (input_id.id );
3146- ENSURE_V_MSG (!p_snapshot.is_buffer_failed (), false , " This snapshot is corrupted as the `InputID` expected is not set." );
3147- p_input_id_parse (p_user_pointer, input_id);
3148-
31493135 // Fetch `active_node_list_byte_array`.
31503136 bool has_active_list_array;
31513137 p_snapshot.read (has_active_list_array);
@@ -3335,7 +3321,7 @@ bool ClientSynchronizer::parse_sync_data(
33353321 }
33363322 }
33373323
3338- p_peers_frame_index_parse (p_user_pointer, std::move (frames_index));
3324+ ENSURE_V_MSG ( p_peers_frame_index_parse (p_user_pointer, std::move (frames_index)), false , " This snapshot is corrupted as the frame index parsing failed. " );
33393325
33403326 return true ;
33413327}
@@ -3583,19 +3569,19 @@ bool ClientSynchronizer::parse_snapshot(DataBuffer &p_snapshot) {
35833569 },
35843570
35853571 // Parse peer frames index
3586- [](void *p_user_pointer, std::map<int , FrameIndex> &&p_peers_frames_index) {
3572+ [](void *p_user_pointer, std::map<int , FrameIndex> &&p_peers_frames_index) -> bool {
35873573 ParseData *pd = static_cast <ParseData *>(p_user_pointer);
35883574
3575+ // Extract the InputID for the controller processed as Authority by this client.
3576+ const FrameIndex authority_frame_index = MapFunc::at (p_peers_frames_index, pd->player_controller ->get_authority_peer (), FrameIndex::NONE);
3577+
3578+ // Store it.
3579+ pd->snapshot .input_id = authority_frame_index;
3580+
3581+ // Store the frames index.
35893582 pd->snapshot .peers_frames_index = std::move (p_peers_frames_index);
3590- },
35913583
3592- // Parse InputID:
3593- [](void *p_user_pointer, FrameIndex p_input_id) {
3594- ParseData *pd = static_cast <ParseData *>(p_user_pointer);
3595- if (pd->player_controller != nullptr && pd->player_controller ->can_simulate ()) {
3596- // This is the main controller, store the `InputID`.
3597- pd->snapshot .input_id = p_input_id;
3598- }
3584+ return true ;
35993585 },
36003586
36013587 // Parse variable:
0 commit comments