aboutsummaryrefslogtreecommitdiff
path: root/frontend/cmd/get.cpp
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-01 23:42:57 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-01 23:42:57 +0100
commit671a25463419691bc6c8d11bd57d932bdea9632b (patch)
tree8898e076bfd4b3d702c7c765bcb9d6d41947198d /frontend/cmd/get.cpp
parentf4d71aa6e241ae59ed7d305e8aadddf9d90b2b46 (diff)
more cleanup
Diffstat (limited to 'frontend/cmd/get.cpp')
-rw-r--r--frontend/cmd/get.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/frontend/cmd/get.cpp b/frontend/cmd/get.cpp
index 3e85e57..362830e 100644
--- a/frontend/cmd/get.cpp
+++ b/frontend/cmd/get.cpp
@@ -1,7 +1,9 @@
+#include <algorithm>
#include <memory>
#include "../GameController.h"
#include "../strings.h"
+#include "../util.h"
#include "backend/Exception.h"
#include "backend/print.h"
@@ -14,19 +16,16 @@ using namespace std;
void GameController::cmd_get(string & target_name) {
Player & player = this->dungeon->get_player();
Location & location = player.get_location();
- unique_ptr<Object> target = nullptr;
- for (Object * object : location.get_visible_objects()) {
- if (str_lower(object->get_name().c_str()) != str_lower(target_name)) continue;
- target = unique_ptr<Object>(object);
- location.remove_visible_object(object);
- break;
- }
- if (target == nullptr)
+ auto range = location.get_visible_objects();
+ auto it = find_if(range.begin(), range.end(), by_name_case_insensitive(target_name));
+ if (!it)
throw Exception("object \"%s\" niet gevonden", target_name.c_str());
+ auto object = unique_ptr<Object>(*it);
+ location.remove_visible_object(object.get());
// gold objects are collected and (implicitly) destroyed
- GoldObject * gold = dynamic_cast<GoldObject *>(target.get());
+ GoldObject * gold = dynamic_cast<GoldObject *>(object.get());
if (gold != nullptr) {
int count = gold->get_count();
player.gold += count;
@@ -35,7 +34,7 @@ void GameController::cmd_get(string & target_name) {
}
// other objects go in the inventory
- lprtf("Je voegt %s toe aan je bezit.\n", target->get_name().c_str());
- player.inventory.push_back(target.release());
+ lprtf("Je voegt %s toe aan je bezit.\n", object->get_name().c_str());
+ player.inventory.push_back(object.release());
}