#ifndef _H_GAMEACTOR_H #define _H_GAMEACTOR_H #include #include #include #include "gameplay/entity.h" #include "utility/mousestate.h" class Component; class AI; class Weapon; class EventManager; // 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(const std::shared_ptr& shader) : Entity(shader) { actorid = SDL_GetTicks(); } ~GameActor(); void addComponent(std::shared_ptr component); void pickupWeapon(std::shared_ptr weapon); void hookEventManager(std::shared_ptr eventManager); void update(float deltaTime) override; void render(const std::shared_ptr& camera) override; const std::optional>& getHeldWeapon() const; const int getActorID() const { return actorid; } 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>; int actorid; component_vector_t components; weapon_vector_t weapons; size_t currentWeaponIndex = 0; std::shared_ptr eventManager; }; #endif //_H_GAMEACTOR_H