@@ -259,12 +259,6 @@ void PeerNetworkedController::setup_synchronizer(NS::SceneSynchronizerBase &p_sy
259259
260260 event_handler_peer_status_updated =
261261 scene_synchronizer->event_peer_status_updated .bind (std::bind (&PeerNetworkedController::on_peer_status_updated, this , std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
262-
263- event_handler_state_validated =
264- scene_synchronizer->event_state_validated .bind (std::bind (&PeerNetworkedController::on_state_validated, this , std::placeholders::_1, std::placeholders::_2));
265-
266- event_handler_rewind_frame_begin =
267- scene_synchronizer->event_rewind_frame_begin .bind (std::bind (&PeerNetworkedController::on_rewind_frame_begin, this , std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
268262}
269263
270264void PeerNetworkedController::remove_synchronizer () {
@@ -276,10 +270,6 @@ void PeerNetworkedController::remove_synchronizer() {
276270
277271 // Unregister the event processors with the scene synchronizer.
278272 scene_synchronizer->event_peer_status_updated .unbind (event_handler_peer_status_updated);
279- scene_synchronizer->event_state_validated .unbind (event_handler_state_validated);
280- scene_synchronizer->event_rewind_frame_begin .unbind (event_handler_rewind_frame_begin);
281- event_handler_rewind_frame_begin = NS::NullPHandler;
282- event_handler_state_validated = NS::NullPHandler;
283273 event_handler_peer_status_updated = NS::NullPHandler;
284274 scene_synchronizer = nullptr ;
285275}
@@ -300,18 +290,6 @@ void PeerNetworkedController::on_peer_status_updated(int p_peer_id, bool p_conne
300290 }
301291}
302292
303- void PeerNetworkedController::on_state_validated (FrameIndex p_frame_index, bool p_detected_desync) {
304- if (controller) {
305- controller->on_state_validated (p_frame_index);
306- }
307- }
308-
309- void PeerNetworkedController::on_rewind_frame_begin (FrameIndex p_input_id, int p_index, int p_count) {
310- if (controller && can_simulate ()) {
311- controller->queue_instant_process (p_input_id, p_index, p_count);
312- }
313- }
314-
315293void PeerNetworkedController::controllable_collect_input (double p_delta, DataBuffer &r_data_buffer) {
316294 const std::vector<ObjectData *> &sorted_controllable_objects = get_sorted_controllable_objects ();
317295 for (ObjectData *object_data : sorted_controllable_objects) {
@@ -1003,6 +981,19 @@ PlayerController::PlayerController(PeerNetworkedController *p_peer_controller) :
1003981 Controller(p_peer_controller),
1004982 current_input_id(FrameIndex::NONE),
1005983 input_buffers_counter(0 ) {
984+ event_handler_rewind_frame_begin =
985+ peer_controller->scene_synchronizer ->event_rewind_frame_begin .bind (std::bind (&PlayerController::on_rewind_frame_begin, this , std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
986+
987+ event_handler_state_validated =
988+ peer_controller->scene_synchronizer ->event_state_validated .bind (std::bind (&PlayerController::on_state_validated, this , std::placeholders::_1, std::placeholders::_2));
989+ }
990+
991+ PlayerController::~PlayerController () {
992+ peer_controller->scene_synchronizer ->event_rewind_frame_begin .unbind (event_handler_rewind_frame_begin);
993+ event_handler_rewind_frame_begin = NS::NullPHandler;
994+
995+ peer_controller->scene_synchronizer ->event_state_validated .unbind (event_handler_state_validated);
996+ event_handler_state_validated = NS::NullPHandler;
1006997}
1007998
1008999void PlayerController::notify_frame_checked (FrameIndex p_frame_index) {
@@ -1041,6 +1032,20 @@ int PlayerController::get_frames_count() const {
10411032 return frames_input.size ();
10421033}
10431034
1035+ int PlayerController::count_frames_after (FrameIndex p_frame_index) const {
1036+ NS_PROFILE
1037+
1038+ int count = 0 ;
1039+
1040+ for (const FrameInput &frame : frames_input) {
1041+ if (frame.id > p_frame_index) {
1042+ count += 1 ;
1043+ }
1044+ }
1045+
1046+ return count;
1047+ }
1048+
10441049FrameIndex PlayerController::last_known_frame_index () const {
10451050 return get_stored_frame_index (-1 );
10461051}
@@ -1062,7 +1067,11 @@ FrameIndex PlayerController::get_stored_frame_index(int p_i) const {
10621067 }
10631068}
10641069
1065- void PlayerController::queue_instant_process (FrameIndex p_frame_index, int p_index, int p_count) {
1070+ void PlayerController::on_rewind_frame_begin (FrameIndex p_frame_index, int p_index, int p_count) {
1071+ if (!peer_controller->can_simulate ()) {
1072+ return ;
1073+ }
1074+
10661075 if (p_index >= 0 && p_index < int (frames_input.size ())) {
10671076 queued_instant_to_process = p_index;
10681077#ifdef DEBUG_ENABLED
@@ -1153,7 +1162,7 @@ void PlayerController::process(double p_delta) {
11531162 }
11541163}
11551164
1156- void PlayerController::on_state_validated (FrameIndex p_frame_index) {
1165+ void PlayerController::on_state_validated (FrameIndex p_frame_index, bool p_detected_desync ) {
11571166 notify_frame_checked (p_frame_index);
11581167}
11591168
@@ -1335,15 +1344,25 @@ bool PlayerController::can_accept_new_inputs() const {
13351344
13361345DollController::DollController (PeerNetworkedController *p_peer_controller) :
13371346 RemotelyControlledController(p_peer_controller) {
1338- event_handler_received_snapshot = peer_controller->scene_synchronizer ->event_received_snapshot .bind (
1339- [this ](const Snapshot &p_received_snapshot) -> void {
1340- received_snapshot (p_received_snapshot);
1341- });
1347+ event_handler_received_snapshot =
1348+ peer_controller->scene_synchronizer ->event_received_snapshot .bind (std::bind (&DollController::received_snapshot, this , std::placeholders::_1));
1349+
1350+ event_handler_rewind_frame_begin =
1351+ peer_controller->scene_synchronizer ->event_rewind_frame_begin .bind (std::bind (&DollController::on_rewind_frame_begin, this , std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
1352+
1353+ event_handler_state_validated =
1354+ peer_controller->scene_synchronizer ->event_state_validated .bind (std::bind (&DollController::on_state_validated, this , std::placeholders::_1, std::placeholders::_2));
13421355}
13431356
13441357DollController::~DollController () {
13451358 peer_controller->scene_synchronizer ->event_received_snapshot .unbind (event_handler_received_snapshot);
13461359 event_handler_received_snapshot = NS::NullPHandler;
1360+
1361+ peer_controller->scene_synchronizer ->event_rewind_frame_begin .unbind (event_handler_rewind_frame_begin);
1362+ event_handler_rewind_frame_begin = NS::NullPHandler;
1363+
1364+ peer_controller->scene_synchronizer ->event_state_validated .unbind (event_handler_state_validated);
1365+ event_handler_state_validated = NS::NullPHandler;
13471366}
13481367
13491368bool DollController::receive_inputs (const Vector<uint8_t > &p_data) {
@@ -1406,9 +1425,6 @@ bool is_doll_snap_A_older(const DollController::DollSnapshot &p_snap_a, const Do
14061425}
14071426
14081427void DollController::received_snapshot (const Snapshot &p_snapshot) {
1409- // TODO enable this.
1410- return ;
1411-
14121428 const std::vector<ObjectData *> *controlled_objects = peer_controller->scene_synchronizer ->get_peer_controlled_objects_data (peer_controller->get_authority_peer ());
14131429 if (!controlled_objects) {
14141430 // Nothing to store.
@@ -1447,7 +1463,11 @@ void DollController::received_snapshot(const Snapshot &p_snapshot) {
14471463 is_doll_snap_A_older);
14481464}
14491465
1450- void DollController::queue_instant_process (FrameIndex p_frame_index, int p_index, int p_count) {
1466+ void DollController::on_rewind_frame_begin (FrameIndex p_frame_index, int p_index, int p_count) {
1467+ if (!peer_controller->can_simulate ()) {
1468+ return ;
1469+ }
1470+
14511471 if (streaming_paused) {
14521472 return ;
14531473 }
@@ -1523,7 +1543,7 @@ void DollController::process(double p_delta) {
15231543 queued_instant_to_process = -1 ;
15241544}
15251545
1526- void DollController::on_state_validated (FrameIndex p_frame_index) {
1546+ void DollController::on_state_validated (FrameIndex p_frame_index, bool p_detected_desync ) {
15271547 notify_frame_checked (p_frame_index);
15281548}
15291549
@@ -1545,8 +1565,21 @@ void DollController::notify_frame_checked(FrameIndex p_frame_index) {
15451565 last_checked_input = p_frame_index;
15461566}
15471567
1568+ bool DollController::__pcr__fetch_recovery_info (
1569+ FrameIndex p_checking_frame_index,
1570+ int p_predicted_frames,
1571+ std::vector<std::string> *r_differences_info
1572+ #ifdef DEBUG_ENABLED
1573+ ,
1574+ std::vector<ObjectNetId> *r_different_node_data
1575+ #endif
1576+ ) const {
1577+ // TODO please implement this.
1578+ return true ;
1579+ }
1580+
15481581void DollController::notify_applied_snapshot (FrameIndex frame_index, ObjectNetId p_id) {
1549- ASSERT_NO_ENTRY (); // TODO implement.
1582+ ASSERT_NO_ENTRY (); // TODO implement or remove this function if not implemented .
15501583}
15511584
15521585NoNetController::NoNetController (PeerNetworkedController *p_peer_controller) :
0 commit comments