]> git.localhorst.tv Git - blobs.git/blobdiff - src/creature/need.cpp
eat what's here
[blobs.git] / src / creature / need.cpp
index 88b44197c8de80af4f6a0afcb297915c75053a33..8249631038a639925697d9fb4a535d5135a9e1c0 100644 (file)
@@ -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) {