]> git.localhorst.tv Git - blobs.git/blobdiff - src/creature/Goal.hpp
better heading implementation
[blobs.git] / src / creature / Goal.hpp
index 2ec03bf255e7baa23f792e7d52a3188364d2e6f5..1705b15c371e4d92db60a7c485320ec996a71355 100644 (file)
@@ -1,17 +1,21 @@
 #ifndef BLOBS_CREATURE_GOAL_HPP_
 #define BLOBS_CREATURE_GOAL_HPP_
 
+#include "Creature.hpp"
+
 #include <functional>
 #include <string>
 
 
 namespace blobs {
+namespace app {
+       struct Assets;
+}
+namespace math {
+       class GaloisLFSR;
+}
 namespace creature {
 
-class Creature;
-class Situation;
-class Steering;
-
 class Goal {
 
 public:
@@ -24,10 +28,15 @@ public:
 public:
        Creature &GetCreature() noexcept { return c; }
        const Creature &GetCreature() const noexcept { return c; }
-       Situation &GetSituation() noexcept;
-       const Situation &GetSituation() const noexcept;
-       Steering &GetSteering() noexcept;
-       const Steering &GetSteering() const noexcept;
+       Creature::Stats &GetStats() noexcept { return c.GetStats(); }
+       const Creature::Stats &GetStats() const noexcept { return c.GetStats(); }
+       Situation &GetSituation() noexcept { return c.GetSituation(); }
+       const Situation &GetSituation() const noexcept { return c.GetSituation(); }
+       Steering &GetSteering() noexcept { return c.GetSteering(); }
+       const Steering &GetSteering() const noexcept { return c.GetSteering(); }
+       app::Assets &Assets() noexcept;
+       const app::Assets &Assets() const noexcept;
+       math::GaloisLFSR &Random() noexcept;
 
        double Urgency() const noexcept { return urgency; }
        void Urgency(double u) noexcept { urgency = u; }
@@ -36,9 +45,15 @@ public:
        void Interruptible(bool i) noexcept { interruptible = i; }
 
        bool Complete() const noexcept { return complete; }
-       void SetComplete() noexcept;
+       void SetComplete();
+       void SetForeground();
+       void SetBackground();
        /// only supports one callback for now, new one will replace an old
-       void OnComplete(Callback) noexcept;
+       void WhenComplete(Callback) noexcept;
+       void WhenForeground(Callback) noexcept;
+       /// on background will not be called when the goal is first inserted
+       /// but only after is has been in the foreground once
+       void WhenBackground(Callback) noexcept;
 
 public:
        virtual std::string Describe() const = 0;
@@ -46,9 +61,16 @@ public:
        virtual void Tick(double dt) { }
        virtual void Action() { }
 
+private:
+       virtual void OnComplete() { }
+       virtual void OnForeground() { }
+       virtual void OnBackground() { }
+
 private:
        Creature &c;
        Callback on_complete;
+       Callback on_foreground;
+       Callback on_background;
        double urgency;
        bool interruptible;
        bool complete;