#include #include #include #include "player.h" #include "location.h" #include "controller.h" #include "item.h" Player::Player() {} Player::~Player() {} void Player::commitAction() { std::cout << ">> "; std::string input; std::cin >> input; std::cout << "\n"; std::transform(input.begin(), input.end(), input.begin(), [](unsigned char c){ return std::tolower(c); }); if (input == "inventory") { std::cout << showInventory() << "\n\n"; return; } for (auto& controller : _current_location->controllers()) { if (controller->validateInput(input)) { std::shared_ptr player_as_actor = shared_from_this(); std::cout << controller->interact(player_as_actor) << "\n\n"; return; } } std::cout << "Nothing to do with that. Please think again." << "\n\n"; } void Player::moveToLocation(const std::shared_ptr &location) { _current_location = location; _visited_locations.insert(location); } bool Player::isLocationVisited(const std::shared_ptr &location) const { return std::find(_visited_locations.begin(), _visited_locations.end(), location) != _visited_locations.end(); } void Player::giveItem(const std::shared_ptr& item) { _inventory.push_back(item); } void Player::useItem(const std::shared_ptr& item) { _inventory.remove(item); } bool Player::hasItem(const std::shared_ptr& item) const { return std::find(_inventory.begin(), _inventory.end(), item) != _inventory.end(); } std::string Player::showInventory() const { if (_inventory.empty()) { return "Your pockets are empty."; } std::string inventory_message = "Currently you have "; for (const auto& item : _inventory) { inventory_message += item->label(); inventory_message += ", "; } inventory_message.pop_back(); inventory_message.pop_back(); inventory_message += "."; return inventory_message; }