X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2Fcreature.cpp;h=ff3a81c06c050b3a8013f5ddc6d44e06ef63696a;hb=a4d4cc133ff1a8b9ab209b436ee94579930eb948;hp=f0f7aac985f30ff3fe36467bb5bc60c8b3ed43a3;hpb=e6a15aa6012cf8f034f3073c3d042f9a714da011;p=blobs.git diff --git a/src/creature/creature.cpp b/src/creature/creature.cpp index f0f7aac..ff3a81c 100644 --- a/src/creature/creature.cpp +++ b/src/creature/creature.cpp @@ -11,6 +11,7 @@ #include "Goal.hpp" #include "IdleGoal.hpp" #include "../app/Assets.hpp" +#include "../graphics/color.hpp" #include "../math/const.hpp" #include "../ui/string.hpp" #include "../world/Body.hpp" @@ -20,12 +21,16 @@ #include #include +#include #include #include #include #include +using blobs::graphics::hsl2rgb; +using blobs::graphics::rgb2hsl; + namespace blobs { namespace creature { @@ -182,8 +187,8 @@ void Creature::Ingest(int res, double amount) noexcept { // 30% of solids stays in body AddMass(res, amount * 0.3 * composition.Compatibility(res)); } else { - // 5% of fluids stays in body - AddMass(res, amount * 0.05 * composition.Compatibility(res)); + // 10% of fluids stays in body + AddMass(res, amount * 0.1 * composition.Compatibility(res)); } math::GaloisLFSR &random = sim.Assets().random; if (random.UNorm() < AdaptChance()) { @@ -782,7 +787,7 @@ void Spawn(Creature &c, world::Planet &p) { double color_divisor = 0.0; if (p.HasAtmosphere()) { - c.AddMass(p.Atmosphere(), 0.01); + c.AddMass(p.Atmosphere(), 0.005); color_avg += c.GetSimulation().Resources()[p.Atmosphere()].base_color * 0.1; color_divisor += 0.1; } @@ -857,7 +862,10 @@ void Split(Creature &c) { a->Name(c.GetSimulation().Assets().name.Sequential()); c.GetGenome().Configure(*a); for (const auto &cmp : c.GetComposition()) { - a->AddMass(cmp.resource, cmp.value * 0.5); + // require at least 0.1% + if (cmp.value > 0.002) { + a->AddMass(cmp.resource, cmp.value * 0.5); + } } s.GetPlanet().AddCreature(a); // TODO: duplicate situation somehow @@ -872,7 +880,10 @@ void Split(Creature &c) { b->Name(c.GetSimulation().Assets().name.Sequential()); c.GetGenome().Configure(*b); for (const auto &cmp : c.GetComposition()) { - b->AddMass(cmp.resource, cmp.value * 0.5); + // require at least 0.1% + if (cmp.value > 0.002) { + b->AddMass(cmp.resource, cmp.value * 0.5); + } } s.GetPlanet().AddCreature(b); b->GetSituation().SetPlanetSurface(