X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcreature%2Fneed.cpp;h=8249631038a639925697d9fb4a535d5135a9e1c0;hb=2025d49798b93180237b6ce62d3ff5d6ee8ebc6e;hp=88b44197c8de80af4f6a0afcb297915c75053a33;hpb=7c0cb00fac415d393fc3c3397caeb97e31235e69;p=blobs.git diff --git a/src/creature/need.cpp b/src/creature/need.cpp index 88b4419..8249631 100644 --- a/src/creature/need.cpp +++ b/src/creature/need.cpp @@ -4,6 +4,7 @@ #include "Creature.hpp" #include "../world/Planet.hpp" +#include "../world/TileType.hpp" namespace blobs { @@ -28,15 +29,28 @@ void Need::Decrease(double delta) noexcept { IngestNeed::IngestNeed(int resource, double speed, double damage) : resource(resource) , speed(speed) -, damage(damage) { +, damage(damage) +, ingesting(false) { } IngestNeed::~IngestNeed() { } void IngestNeed::ApplyEffect(Creature &c, double dt) { + if (!IsSatisfied()) { + ingesting = true; + } if (!IsSatisfied()) { // TODO: find resource and start ingest task + if (c.GetSituation().OnSurface()) { + const world::TileType &t = c.GetSituation().GetTileType(); + for (auto &yield : t.resources) { + if (yield.resource == resource) { + Decrease(std::min(yield.ubiquity, speed) * dt); + break; + } + } + } } if (IsCritical()) { c.Hurt(damage * dt); @@ -55,7 +69,7 @@ InhaleNeed::~InhaleNeed() { } void InhaleNeed::ApplyEffect(Creature &c, double dt) { - if (!IsSatisfied() && !inhaling) { + if (!IsSatisfied()) { inhaling = true; } if (inhaling) {