X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2Fgoal.cpp;h=bcb1682be1bca9514d81a2cbb3fdf3f985fa84f1;hb=a51e14dee931d657e2517fda4adf86698283e57c;hp=a4f33304f3f75af56b86c376b0c653879405006e;hpb=d364d8a9203138be1c569cdc31144f51883ec79f;p=blobs.git diff --git a/src/creature/goal.cpp b/src/creature/goal.cpp index a4f3330..bcb1682 100644 --- a/src/creature/goal.cpp +++ b/src/creature/goal.cpp @@ -40,7 +40,7 @@ void BlobBackgroundTask::Tick(double dt) { // TODO: derive breathing ability int gas = Assets().data.resources["air"].id; // TODO: check if in compatible atmosphere - double amount = GetCreature().GetStats().Breath().gain * -(1.5 + 0.5 * GetCreature().ExhaustionFactor()); + double amount = GetCreature().GetStats().Breath().gain * -(1.0 + GetCreature().ExhaustionFactor()); GetCreature().GetStats().Breath().Add(amount * dt); // maintain ~1% gas composition double gas_amount = GetCreature().GetComposition().Get(gas); @@ -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; } @@ -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);