#ifndef ACTOR_H #define ACTOR_H #include #include #include class Location; class Item; class Actor { public: explicit Actor(); virtual ~Actor() = 0; virtual void commitAction() = 0; virtual void moveToLocation(const std::shared_ptr& location) = 0; virtual bool isLocationVisited(const std::shared_ptr& location) const = 0; virtual void giveItem(const std::shared_ptr& item) = 0; virtual void useItem(const std::shared_ptr& item) = 0; virtual bool hasItem(const std::shared_ptr& item) const = 0; virtual void readyItem(const std::shared_ptr& item) = 0; virtual bool isItemReady(const std::shared_ptr& item) const = 0; protected: std::shared_ptr _current_location; std::list> _inventory; std::shared_ptr _ready_item; std::set> _visited_locations; }; #endif // ACTOR_H