]> git.localhorst.tv Git - blobs.git/blobdiff - src/creature/Creature.hpp
color mutation
[blobs.git] / src / creature / Creature.hpp
index 44107bea32dd62b3f390b1e1b0575cb39d232fdf..498ebeac8d7665ccc68986b4376812d62ee6935c 100644 (file)
@@ -8,6 +8,7 @@
 #include "Situation.hpp"
 #include "Steering.hpp"
 #include "../graphics/SimpleVAO.hpp"
+#include "../math/geometry.hpp"
 #include "../math/glm.hpp"
 
 #include <memory>
@@ -104,6 +105,8 @@ public:
        double Mass() const noexcept { return mass; }
        void Ingest(int res, double amount) noexcept;
 
+       void DoWork(double amount) noexcept;
+
        void Size(double s) noexcept { size = s; }
        double Size() const noexcept { return size; }
 
@@ -112,6 +115,7 @@ public:
        /// age-depended multiplier, peak being the maximum in lifetime [0,1]
        double AgeFactor(double peak) const noexcept;
 
+       double EnergyEfficiency() const noexcept;
        double ExhaustionFactor() const noexcept;
        double FatigueFactor() const noexcept;
 
@@ -123,18 +127,25 @@ public:
        double Lifetime() const noexcept;
        double Fertility() const noexcept;
        double Mutability() const noexcept;
+       double Adaptability() const noexcept;
        double OffspringMass() const noexcept;
 
        /// chance of giving birth per tick
        double OffspringChance() const noexcept;
-       /// chance of random genetic mutation per tick
+       /// chance of arbitrary genetic mutation per tick
        double MutateChance() const noexcept;
+       /// chance of environmental genetic mutation per tick
+       double AdaptChance() const noexcept;
 
        void Hurt(double d) noexcept;
        void Die() noexcept;
        void OnDeath(Callback cb) noexcept { on_death = cb; }
-       void Remove() noexcept { removable = true; }
+       void Remove() noexcept;
        bool Removable() const noexcept { return removable; }
+       void Removed() noexcept;
+
+       void AddParent(Creature &);
+       const std::vector<Creature *> &Parents() const noexcept { return parents; }
 
        Stats &GetStats() noexcept { return stats; }
        const Stats &GetStats() const noexcept { return stats; }
@@ -157,9 +168,13 @@ public:
        Steering &GetSteering() noexcept { return steering; }
        const Steering &GetSteering() const noexcept { return steering; }
 
+       math::AABB CollisionBox() const noexcept;
+       glm::dmat4 CollisionTransform() const noexcept;
+
        glm::dmat4 LocalTransform() noexcept;
 
        void BuildVAO();
+       void KillVAO();
        void Draw(graphics::Viewport &);
 
 private:
@@ -183,9 +198,12 @@ private:
        double size;
 
        double birth;
+       double death;
        Callback on_death;
        bool removable;
 
+       std::vector<Creature *> parents;
+
        Stats stats;
        Memory memory;
 
@@ -200,7 +218,7 @@ private:
                glm::vec3 normal;
                glm::vec3 texture;
        };
-       graphics::SimpleVAO<Attributes, unsigned short> vao;
+       std::unique_ptr<graphics::SimpleVAO<Attributes, unsigned short>> vao;
 
 };