#pragma once #include class Vehicle; // struct Vector2D; class GoalEvaluator { protected: // when the desirability score for a goal has been evaluated it is // multiplied by this value. It can be used to create bots with preferences // based upon their personality float m_CharacterBias; public: explicit GoalEvaluator(float CharacterBias) : m_CharacterBias(CharacterBias) {} virtual ~GoalEvaluator() = default; // returns a score between 0 and 1 representing the desirability of the // strategy the concrete subclass represents virtual float CalculateDesirability(Vehicle* Bot) = 0; // adds the appropriate goal to the given bot's brain virtual void SetGoal(Vehicle* Bot) = 0; };