Skip to content

Commit 72295a6

Browse files
committed
Fixed all the known crashes introduced by the controller refactor.
1 parent a3c99c3 commit 72295a6

5 files changed

Lines changed: 73 additions & 65 deletions

File tree

net_utilities.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,14 +323,18 @@ void NS::SyncGroup::notify_controller_changed(NS::ObjectData *p_object_data, int
323323
void NS::SyncGroup::notify_simulating_peers_about_listener_status(int p_peer_listener, bool p_simulating) {
324324
for (int peer : simulating_peers) {
325325
NetworkedControllerBase *controller = scene_sync->get_controller_for_peer(peer);
326-
controller->server_set_peer_simulating_this_controller(p_peer_listener, p_simulating);
326+
if (controller) {
327+
controller->server_set_peer_simulating_this_controller(p_peer_listener, p_simulating);
328+
}
327329
}
328330
}
329331

330332
void NS::SyncGroup::update_listeners_to_simulating_peer(int p_simulating_peer, bool p_simulating) {
331333
NetworkedControllerBase *controller = scene_sync->get_controller_for_peer(p_simulating_peer);
332-
for (int peer : listening_peers) {
333-
controller->server_set_peer_simulating_this_controller(peer, p_simulating);
334+
if (controller) {
335+
for (int peer : listening_peers) {
336+
controller->server_set_peer_simulating_this_controller(peer, p_simulating);
337+
}
334338
}
335339
}
336340

networked_controller.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "modules/network_synchronizer/core/object_data.h"
1010
#include "modules/network_synchronizer/net_utilities.h"
1111
#include "modules/network_synchronizer/networked_controller.h"
12+
#include "modules/network_synchronizer/scene_synchronizer.h"
1213
#include "modules/network_synchronizer/scene_synchronizer_debugger.h"
1314
#include "net_utilities.h"
1415
#include "scene_synchronizer.h"
@@ -35,6 +36,8 @@ NetworkedControllerBase::~NetworkedControllerBase() {
3536
controller = nullptr;
3637
controller_type = CONTROLLER_TYPE_NULL;
3738
}
39+
40+
remove_synchronizer();
3841
}
3942

4043
void NetworkedControllerBase::notify_controllable_objects_changed() {
@@ -1367,7 +1370,7 @@ bool DollController::receive_inputs(const Vector<uint8_t> &p_data) {
13671370
SCParseTmpData *pd = static_cast<SCParseTmpData *>(p_user_pointer);
13681371

13691372
ASSERT_COND(p_frame_index != FrameIndex::NONE);
1370-
if (pd->controller->last_checked_input >= p_frame_index) {
1373+
if (pd->controller->last_checked_input != FrameIndex::NONE && pd->controller->last_checked_input >= p_frame_index) {
13711374
// This input is already processed.
13721375
return;
13731376
}

networked_controller.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ struct PlayerController final : public Controller {
373373
struct DollController final : public RemotelyControlledController {
374374
DollController(NetworkedControllerBase *p_node);
375375

376-
FrameIndex last_checked_input = { 0 };
376+
FrameIndex last_checked_input = FrameIndex::NONE;
377377
int queued_instant_to_process = -1;
378378

379379
virtual bool receive_inputs(const Vector<uint8_t> &p_data) override;

0 commit comments

Comments
 (0)