#pragma once #include #include #include #include #include "backend/WeaponObject.h" #include "backend/ArmorObject.h" class Dungeon; class Location; enum FollowupAction { NONE, UPDATE, EXIT, RESTART, }; class Player { typedef FollowupAction Cmd(std::string &); private: std::string name; unsigned int health_points = 20; float attack_chance = 0.4; unsigned int gold = 0; std::unique_ptr weapon = nullptr; std::unique_ptr armor = nullptr; Location & location; bool cheating = false; std::vector> inventory = {}; public: Player(Dungeon & dungeon); virtual ~Player() = default; public: FollowupAction cmd(std::string &); public: void take_damage(unsigned int dmg); float get_attack() const; unsigned get_health() const; private: void cmdset_default(); void cmdset_death(); private: std::unordered_map cmds; Cmd cmd_query; Cmd cmd_search; Cmd cmd_go; Cmd cmd_get; Cmd cmd_put; Cmd cmd_view; Cmd cmd_hit; Cmd cmd_equip; Cmd cmd_wait; Cmd cmd_use; Cmd cmd_help; Cmd cmd_cheat; Cmd cmd_quit; Cmd cmd_restart; private: Dungeon & dungeon; };