aboutsummaryrefslogtreecommitdiff
path: root/frontend/cmd/use.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/cmd/use.cpp')
-rw-r--r--frontend/cmd/use.cpp24
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());
}