]> git.localhorst.tv Git - blank.git/commitdiff
make entities removable
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 4 Aug 2015 16:29:04 +0000 (18:29 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 4 Aug 2015 16:29:04 +0000 (18:29 +0200)
src/world/Entity.cpp
src/world/Entity.hpp
src/world/World.cpp

index 79a09ea771cb6e9fbcd653bb7ab3f416e032cd67..b06dbc38b50ccfbdebdc6df3c96a36afaeb483a2 100644 (file)
@@ -23,7 +23,8 @@ Entity::Entity() noexcept
 , chunk(0, 0, 0)
 , angular_velocity(1.0f, 0.0f, 0.0f, 0.0f)
 , rotation(1.0f)
-, world_collision(false) {
+, world_collision(false)
+, remove(false) {
 
 }
 
index 05d795f38af6e67e0b0ac2b2633628efc58f2496..48646e80ddd656b353e7f105cab6a6ebc34621eb 100644 (file)
@@ -57,6 +57,9 @@ public:
        glm::mat4 Transform(const Chunk::Pos &chunk_offset) const noexcept;
        Ray Aim(const Chunk::Pos &chunk_offset) const noexcept;
 
+       void Remove() noexcept { remove = true; }
+       bool CanRemove() const noexcept { return remove; }
+
        void Update(int dt) noexcept;
 
        void Draw() noexcept;
@@ -77,6 +80,7 @@ private:
        glm::mat4 rotation;
 
        bool world_collision;
+       bool remove;
 
 };
 
index 97dcc0848a40a7936179ee7e4171aac8c29f1fd1..dc078189fdc494ab98bbb8dc93aeb4c12a565809 100644 (file)
@@ -257,6 +257,13 @@ void World::Update(int dt) {
                        Resolve(entity, col);
                }
        }
+       for (auto iter = entities.begin(), end = entities.end(); iter != end;) {
+               if (iter->CanRemove()) {
+                       iter = entities.erase(iter);
+               } else {
+                       ++iter;
+               }
+       }
        chunks.Rebase(player->ChunkCoords());
        chunks.Update(dt);
 }