+ Genome &GetGenome() noexcept { return genome; }
+ const Genome &GetGenome() const noexcept { return genome; }
+
+ Genome::Properties<double> &GetProperties() noexcept { return properties; }
+ const Genome::Properties<double> &GetProperties() const noexcept { return properties; }
+
+ void AddMass(int res, double amount);
+ const Composition &GetComposition() const noexcept { return composition; }
+
+ void BaseColor(const glm::dvec3 &c) noexcept { base_color = c; }
+ const glm::dvec3 &BaseColor() const noexcept { return base_color; }
+
+ void HighlightColor(const glm::dvec3 &c) noexcept;
+ glm::dvec4 HighlightColor() const noexcept { return highlight_color; }
+
+ void BackSkin(double s) noexcept { skin_back = s; }
+ double BackSkin() const noexcept { return skin_back; }
+
+ void SideSkin(double s) noexcept { skin_side = s; }
+ double SideSkin() const noexcept { return skin_side; }
+
+ void Mass(double m) noexcept { mass = m; }
+ 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; }
+
+ double Born() const noexcept { return birth; }
+ double Age() const noexcept;
+ /// 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;
+
+ // 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 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;
+ bool Dead() const noexcept;
+ void WhenDead(Callback cb) noexcept { on_death = cb; }
+ void Remove() noexcept;
+ bool Removable() const noexcept { return removable; }
+ void Removed() noexcept;