X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2Fgoal.cpp;h=61ecb3778a5b874c9b61e4e6fd93b2d107bdf941;hb=f764c5e628865648bb277b1081bc23d60de38d9d;hp=5f9f1e839d9ed24bdff82c62caaf7ea50bd2b42d;hpb=a1b5d6dbc13d185b9ac459e421ae44b3ef8ce133;p=blobs.git diff --git a/src/creature/goal.cpp b/src/creature/goal.cpp index 5f9f1e8..61ecb37 100644 --- a/src/creature/goal.cpp +++ b/src/creature/goal.cpp @@ -6,7 +6,7 @@ #include "Creature.hpp" #include "../app/Assets.hpp" -#include "../ui/String.hpp" +#include "../ui/string.hpp" #include "../world/Planet.hpp" #include "../world/Resource.hpp" #include "../world/Simulation.hpp" @@ -100,8 +100,7 @@ void BlobBackgroundTask::CheckStats() { void BlobBackgroundTask::CheckSplit() { if (GetCreature().Mass() > GetCreature().OffspringMass() * 2.0 && GetCreature().OffspringChance() > Assets().random.UNorm()) { - std::cout << "[" << ui::TimeString(GetCreature().GetSimulation().Time()) - << "] " << GetCreature().Name() << " split" << std::endl; + GetCreature().GetSimulation().Log() << GetCreature().Name() << " split" << std::endl; Split(GetCreature()); return; } @@ -111,7 +110,7 @@ void BlobBackgroundTask::CheckMutate() { // check for random property mutation if (GetCreature().MutateChance() > Assets().random.UNorm()) { double amount = 1.0 + (Assets().random.SNorm() * 0.05); - math::Distribution &d = GetCreature().GetGenome().properties.props[(int(Assets().random.UNorm() * 8.0) % 8)]; + math::Distribution &d = GetCreature().GetGenome().properties.props[Assets().random.UInt(9)]; if (Assets().random.UNorm() < 0.5) { d.Mean(d.Mean() * amount); } else { @@ -407,9 +406,11 @@ void LocateResourceGoal::SearchVicinity() { const world::TileType &type = planet.TypeAt(srf, x, y); auto yield = type.FindBestResource(accept); if (yield != type.resources.cend()) { + glm::dvec3 tc(planet.TileCenter(srf, x, y)); + if (!GetCreature().PerceptionTest(tc)) continue; // TODO: subtract minimum yield rating[y - begin.y][x - begin.x] = yield->ubiquity * accept.Get(yield->resource); - double dist = std::max(0.125, 0.25 * glm::length(planet.TileCenter(srf, x, y) - pos)); + double dist = std::max(0.125, 0.25 * glm::length(tc - pos)); rating[y - begin.y][x - begin.x] /= dist; } } @@ -422,7 +423,7 @@ void LocateResourceGoal::SearchVicinity() { glm::ivec2 coords(c->GetSituation().SurfacePosition()); if (coords.x < begin.x || coords.x >= end.x) continue; if (coords.y < begin.y || coords.y >= end.y) continue; - rating[coords.y - begin.y][coords.x - begin.x] *= 0.9; + rating[coords.y - begin.y][coords.x - begin.x] *= 0.8; } glm::ivec2 best_pos(0);