#ifndef _H_GAMEACTOR_H #define _H_GAMEACTOR_H #include #include #include #include #include "gameplay/entity.h" #include "utility/mousestate.h" #include class AI; class Weapon; class ISceneContext; // TODO: Finish weapon cycling code and add default weapon to every actor // TODO: Add ammo system, then work on some basic UI design class GameActor : public Entity { public: GameActor(ISceneContext* scene, const unsigned shaderID) : Entity(shaderID), sceneContext(scene) {} ~GameActor(); void addComponent(std::unique_ptr component); void pickupWeapon(std::shared_ptr weapon); void update(double deltaTime) override; void draw() override; const std::shared_ptr getHeldWeapon() const; void setRotation(const float& rotation) override; void moveUp(); void moveDown(); void moveLeft(); void moveRight(); // Top down shooter controls, mostly for the player to use in top down shooting sections void moveForward(); void moveBackward(); void strafeLeft(); void strafeRight(); void fireWeapon() const; void cycleUpWeapons(); void cycleDownWeapons(); void cycleWeapons(const MouseState&); void followMouse(const MouseState&); private: using component_vector_t = std::vector>; using weapon_vector_t = std::vector>; component_vector_t components; weapon_vector_t weapons; size_t currentWeaponIndex = 0; ISceneContext* sceneContext; }; #endif //_H_GAMEACTOR_H