#include "../GameController.h" #include "../strings.h" #include "backend/Exception.h" #include "backend/print.h" #include "backend/Location.h" #include "backend/Dungeon.h" using namespace std; void GameController::cmd_view(string & target) { if (target.size() == 0) { throw Exception("gebruik: Bekijk "); } Player & player = this->dungeon->get_player(); Location & location = player.get_location(); // view self if (str_lower(target) == "zelf") { lprtf("Je hebt %d levenspunten.\n", player.get_health()); lprtf("Je hebt een aanvalskans van %.0f%%.\n", player.get_attack() * 100); if (player.weapon == nullptr) lprtf("Je hebt geen wapen vast.\n"); else lprtf("Je hebt het volgende wapen vast: %s.\n", player.weapon->get_displayname().c_str()); if (player.armor == nullptr) lprtf("Je draagt geen wapenrusting.\n"); else lprtf("Je draagt de volgende wapenrusting: %s.\n", player.armor->get_displayname().c_str()); lprtf("Je hebt %u goundstuk%s.\n", player.gold, player.gold == 1 ? "" : "ken"); size_t items = player.inventory.size(); lprtf("Je hebt %d %s%s\n", items, items == 1 ? "overig object" : "overige objecten", items > 0 ? ":" : "."); for (auto & object : player.inventory) { lprtf("- %s\n", object->get_displayname().c_str()); } return; } // try to find visible object in location for (Object * object : location.get_visible_objects()) { if (str_lower(object->get_name().c_str()) != str_lower(target)) continue; lprtf("%s\n", object->get_description().c_str()); return; } // try to find object in inventory for (auto & object : player.inventory) { if (str_lower(object->get_name().c_str()) != str_lower(target)) continue; lprtf("%s\n", object->get_description().c_str()); return; } // try to find enemy by name for (Enemy * enemy : location.get_enemies()) { if (str_lower(enemy->get_name().c_str()) != str_lower(target)) continue; lprtf("%s\n", enemy->get_description().c_str()); unsigned enemy_health = enemy->get_health(); lprtf("%s heeft %s levenspunten.\n", enemy->get_name().c_str(), enemy_health); if (!enemy->is_dead()) return; bool snatched = false; for (Object * object : enemy->get_hidden_objects()) { if (!snatched) lprtf("%s had de volgende voorwerpen:\n", enemy->get_displayname().c_str()); lprtf("- %s\n", object->get_displayname().c_str()); enemy->remove_hidden_object(object); location.add_visible_object(object); snatched = true; } return; } throw Exception("geen entiteit met naam \"%s\" gevonden", target.c_str()); }