#ifndef _H_AI_H #define _H_AI_H #include #include #include #include #include class GameActor; class Raycaster; class AIScript; enum class AIState { Idle, Alert, Patrol }; class AI : public std::enable_shared_from_this { public: AI(const std::shared_ptr& actor, const std::shared_ptr& raycaster); void update(); void setTarget(const std::shared_ptr& target) { this->target = target; } void attachBehaviourScript(const std::shared_ptr& behaviour); AIState getState() const { return state; } void setState(AIState state) { this->state = state; } ~AI() {} private: AIState state; std::shared_ptr raycaster; std::shared_ptr behaviour; std::shared_ptr actor; std::shared_ptr target; // cache our lua function calls sol::function idleFunc; sol::function patrolFunc; sol::function alertFunc; }; #endif