]> git.localhorst.tv Git - blobs.git/commitdiff
fix double deletes on app exit
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 4 Dec 2017 10:37:29 +0000 (11:37 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 4 Dec 2017 10:37:29 +0000 (11:37 +0100)
src/creature/Creature.hpp
src/creature/creature.cpp
src/world/Body.hpp

index 498ebeac8d7665ccc68986b4376812d62ee6935c..1c2556a52e30bb3d2167cf584b67403b3df0181e 100644 (file)
@@ -139,6 +139,7 @@ public:
 
        void Hurt(double d) noexcept;
        void Die() noexcept;
+       bool Dead() const noexcept;
        void OnDeath(Callback cb) noexcept { on_death = cb; }
        void Remove() noexcept;
        bool Removable() const noexcept { return removable; }
index de82f86ad9a7db52924106735450f49ee8033a8c..3c03e576770d71ac2a5310c09c3176e9ffe6866c 100644 (file)
@@ -92,7 +92,7 @@ Creature::Creature(world::Simulation &sim)
 , mass(1.0)
 , size(1.0)
 , birth(sim.Time())
-, death(0.0)
+, death(-1.0)
 , on_death()
 , removable(false)
 , parents()
@@ -230,6 +230,8 @@ void Creature::Hurt(double amount) noexcept {
 }
 
 void Creature::Die() noexcept {
+       if (Dead()) return;
+
        sim.SetDead(this);
        death = sim.Time();
        steering.Halt();
@@ -239,6 +241,10 @@ void Creature::Die() noexcept {
        Remove();
 }
 
+bool Creature::Dead() const noexcept {
+       return death > birth;
+}
+
 void Creature::Remove() noexcept {
        removable = true;
 }
index 3cbb788114c723dcf25108013b8627651290662e..5ac4fa1ddcfab52bf305b07825a03becff283612 100644 (file)
@@ -88,7 +88,6 @@ public:
        void Cache() noexcept;
        void CheckCollision() noexcept;
 
-       // body takes over ownership of given pointer
        void AddCreature(creature::Creature *);
        void RemoveCreature(creature::Creature *);
        std::vector<creature::Creature *> &Creatures() noexcept { return creatures; }