]> git.localhorst.tv Git - blobs.git/blobdiff - src/creature/Goal.hpp
random walks
[blobs.git] / src / creature / Goal.hpp
index 9ffeb0f006878f08e96f044436a8ab6987204130..4d3a17f431382d616a8f4828f7e1f9f3ee64529b 100644 (file)
@@ -9,6 +9,9 @@ namespace blobs {
 namespace app {
        struct Assets;
 }
+namespace math {
+       class GaloisLFSR;
+}
 namespace creature {
 
 class Creature;
@@ -33,6 +36,7 @@ public:
        const Steering &GetSteering() const noexcept;
        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; }
@@ -41,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;
@@ -51,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;