ICT290 / src / scene / AIController / Goals / GoalThink.h
GoalThink.h
Raw
#pragma once

#include <string>
#include <vector>
#include "../Vehicle.h"
#include "ArcanistGoalTypes.h"
#include "GoalComposite.h"
#include "GoalEvaluator.h"

class Vehicle;

class GoalThink : public GoalComposite<Vehicle> {
   private:
    typedef std::vector<GoalEvaluator*> GoalEvaluators;

   private:
    GoalEvaluators m_Evaluators{};

   public:
    explicit GoalThink(Vehicle* Bot);
    ~GoalThink();

    // this method iterates through each goal evaluator and selects the one
    // that has the highest score as the current goal
    void Arbitrate();

    // returns true if the given goal is not at the front of the subgoal list
    bool notPresent(int GoalType) const;

    // the usual suspects
    int Process() override;
    void Activate() override;
    void Terminate() override {}

    // top level goal types
    void addGoalMoveToPosition(glm::vec2 pos);
    // void addGoal_GetItem(unsigned int ItemType);
    // void AddGoalExplore();
    void AddGoalAttackTarget();
    void AddGoalWander();

    void markOwnerWithGoal() override {}

    // this adds the MoveToPosition goal to the *back* of the subgoal list.
    void QueueGoalMoveToPosition(glm::vec2 pos);
};