X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2FCreature.hpp;h=d55ab6f0c51790cebad22bc49617b7a347f630e7;hb=7e02b21428efa3ebec14a34d0c1f81e81d362bfc;hp=4d16f99bd35857689b5f1e09b8dcb9deffcd854a;hpb=a1b5d6dbc13d185b9ac459e421ae44b3ef8ce133;p=blobs.git diff --git a/src/creature/Creature.hpp b/src/creature/Creature.hpp index 4d16f99..d55ab6f 100644 --- a/src/creature/Creature.hpp +++ b/src/creature/Creature.hpp @@ -121,22 +121,34 @@ public: // stats with effects applied double Strength() const noexcept; + double StrengthFactor() const noexcept; double Stamina() const noexcept; + double StaminaFactor() const noexcept; double Dexerty() const noexcept; + double DexertyFactor() const noexcept; double Intelligence() const noexcept; + double IntelligenceFactor() const noexcept; double Lifetime() const noexcept; double Fertility() const noexcept; double Mutability() const noexcept; + double Adaptability() const noexcept; double OffspringMass() const noexcept; + double PerceptionRange() const noexcept; + double PerceptionOmniRange() const noexcept; + double PerceptionField() const noexcept; + bool PerceptionTest(const glm::dvec3 &) 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; } + bool Dead() const noexcept; + void WhenDead(Callback cb) noexcept { on_death = cb; } void Remove() noexcept; bool Removable() const noexcept { return removable; } void Removed() noexcept; @@ -165,7 +177,7 @@ public: Steering &GetSteering() noexcept { return steering; } const Steering &GetSteering() const noexcept { return steering; } - math::AABB CollisionBox() const noexcept; + math::AABB CollisionBounds() const noexcept; glm::dmat4 CollisionTransform() const noexcept; glm::dmat4 LocalTransform() noexcept; @@ -175,6 +187,7 @@ public: void Draw(graphics::Viewport &); private: + void Cache() noexcept; void TickState(double dt); void TickStats(double dt); void TickBrain(double dt); @@ -210,6 +223,13 @@ private: Situation situation; Steering steering; + // cached because steering makes heavy use of this + double perception_range; + double perception_range_squared; + double perception_omni_range; + double perception_omni_range_squared; + double perception_field; + struct Attributes { glm::vec3 position; glm::vec3 normal;