aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend/cmd/get.cpp2
-rw-r--r--frontend/cmd/put.cpp20
-rw-r--r--frontend/main.cpp9
3 files changed, 27 insertions, 4 deletions
diff --git a/frontend/cmd/get.cpp b/frontend/cmd/get.cpp
index 2a35657..0d6d12c 100644
--- a/frontend/cmd/get.cpp
+++ b/frontend/cmd/get.cpp
@@ -15,7 +15,7 @@ FollowupAction Player::cmd_get(string & target_name) {
break;
}
if (target == nullptr) {
- lprtf("Object \"%s\" niet gevonden\n", target_name.c_str());
+ lprtf("Object \"%s\" niet gevonden.\n", target_name.c_str());
return FollowupAction::NONE;
}
this->location.remove_visible_object(target.get());
diff --git a/frontend/cmd/put.cpp b/frontend/cmd/put.cpp
index 6e7002b..5460b02 100644
--- a/frontend/cmd/put.cpp
+++ b/frontend/cmd/put.cpp
@@ -1,9 +1,25 @@
+#include <algorithm>
+
#include "../Player.h"
+#include "../strings.h"
+
+#include "backend/print.h"
+#include "backend/Location.h"
using namespace std;
-FollowupAction Player::cmd_put(string & argv) {
- // TODO
+FollowupAction Player::cmd_put(string & target_name) {
+ auto el = find_if(this->inventory.begin(), this->inventory.end(), [target_name](const auto & object) -> bool {
+ return str_lower(object->get_name().c_str()) == str_lower(target_name);
+ });
+ if (el == this->inventory.end()) {
+ lprtf("Object \"%s\" niet gevonden.\n", target_name.c_str());
+ return FollowupAction::NONE;
+ }
+
+ lprtf("Je legt %s neer op de locatie %s.\n", (*el)->get_displayname().c_str(), this->location.get_name().c_str());
+ this->location.add_visible_object((*el).release());
+ this->inventory.erase(el);
return FollowupAction::NONE;
}
diff --git a/frontend/main.cpp b/frontend/main.cpp
index 56743c1..e513c12 100644
--- a/frontend/main.cpp
+++ b/frontend/main.cpp
@@ -5,6 +5,7 @@
#include "backend/print.h"
#include "backend/Dungeon.h"
+#include "GameData.h"
#include "Player.h"
#include "Exception.h"
#include "load_dungeon.h"
@@ -51,8 +52,14 @@ FollowupAction game_main() {
}
int main() {
- FollowupAction action;
+ try {
+ GameData::get_instance(); // pre-load DB
+ } catch (Exception & e) {
+ lprtf("FOUT: %s\n", e.what());
+ return EXIT_FAILURE;
+ }
+ FollowupAction action;
do {
action = game_main();
if (action == EXIT) break;