#pragma once #include #include #include "../Vehicle.h" #include "ArcanistGoalTypes.h" #include "GoalComposite.h" #include "GoalEvaluator.h" class Vehicle; class GoalThink : public GoalComposite { private: typedef std::vector 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); };