]> git.localhorst.tv Git - blank.git/commitdiff
remove self on player controller destruct
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 26 Oct 2015 09:05:08 +0000 (10:05 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 26 Oct 2015 09:05:08 +0000 (10:05 +0100)
fixes segfault when the world is being simulated after the player
exits (like e.g. on a server :>)

doc/todo
src/ui/PlayerController.hpp
src/ui/ui.cpp

index 707491b43c6e3034f6ec6c2bf9738e7aa882f2da..704487ff7209536bc2d1dcae5dd854063a840318 100644 (file)
--- a/doc/todo
+++ b/doc/todo
@@ -116,7 +116,3 @@ spawning
 sprite/particle system
 
        these could help make the world seem more alive
-
-server
-
-       fix segfault at disconnect
index 9d54c295d944706fca27198d071eec5461a6b725..9cf0bca465eb3550af7c009dfd4049f73b1c2679 100644 (file)
@@ -18,6 +18,7 @@ class PlayerController
 
 public:
        PlayerController(World &, Player &);
+       ~PlayerController();
 
        World &GetWorld() noexcept { return world; }
        const World &GetWorld() const noexcept { return world; }
index dd113ca2b620d8fd763934459e9e4b1f088c15ce..6a2e2ee167042720101bab5f7d1062d3c2cc610f 100644 (file)
@@ -43,6 +43,12 @@ PlayerController::PlayerController(World &world, Player &player)
        player.GetEntity().SetController(*this);
 }
 
+PlayerController::~PlayerController() {
+       if (&player.GetEntity().GetController() == this) {
+               player.GetEntity().UnsetController();
+       }
+}
+
 void PlayerController::SetMovement(const glm::vec3 &m) noexcept {
        if (dot(m, m) > 1.0f) {
                move_dir = normalize(m);