diff options
Diffstat (limited to 'frontend/cmd/use.cpp')
-rw-r--r-- | frontend/cmd/use.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/frontend/cmd/use.cpp b/frontend/cmd/use.cpp index badab10..36824b5 100644 --- a/frontend/cmd/use.cpp +++ b/frontend/cmd/use.cpp @@ -1,8 +1,28 @@ +#include "backend/ConsumableObject.h" +#include "backend/Exception.h" +#include "backend/print.h" + #include "../GameController.h" +#include "../strings.h" using namespace std; -void GameController::cmd_use(string & argv) { - // TODO +void GameController::cmd_use(string & target_name) { + Player & player = this->dungeon->get_player(); + Location & location = player.get_location(); + for (Object * object : player.inventory) { + if (str_lower(object->get_name().c_str()) != str_lower(target_name)) continue; + + auto consumable = unique_ptr<ConsumableObject>(dynamic_cast<ConsumableObject *>(object)); + if (consumable == nullptr) + throw Exception("%s is niet consumeerbaar", object->get_name().c_str()); + + lprtf("Je drinkt %s.\n", object->get_displayname().c_str()); + player.inventory.remove(object); + consumable->consume(player); + return; + } + + throw Exception("object \"%s\" niet gevonden", target_name.c_str()); } |