aboutsummaryrefslogtreecommitdiff
path: root/backend/Location.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/Location.cpp')
-rw-r--r--backend/Location.cpp48
1 files changed, 24 insertions, 24 deletions
diff --git a/backend/Location.cpp b/backend/Location.cpp
index 31df1e3..d3227cf 100644
--- a/backend/Location.cpp
+++ b/backend/Location.cpp
@@ -1,43 +1,40 @@
-#include <string.h>
-
+#include "RNG.h"
#include "Location.h"
#include "ListIterator.h"
#include "Enemy.h"
#include "Object.h"
#include "util.h"
-Location::Location(const char * name, const char * description) {
- this->set_name(name);
- this->set_description(description);
+Direction random_direction() {
+ return DIRECTIONS[RNG::get().rand_int(4)];
+}
+
+Direction random_direction(const Location & location) {
+ List<Direction> valid = {};
+ for (Direction direction : DIRECTIONS) {
+ if (location.get_exit(direction) == nullptr) continue;
+ valid.push_back(direction);
+ }
+ return valid[RNG::get().rand_int(valid.size())];
}
+Location::Location(const String & name, const String & description) : name(name), description(description) { }
+
Location::~Location() {
- safe_free(this->name);
- safe_free(this->description);
safe_free(this->enemies);
safe_free(this->objects);
}
-void Location::set_name(const char * name) {
- safe_free(this->name);
- this->name = strdup(name);
-}
-const char * Location::get_name() {
- return this->name;
-}
+void Location::set_name(const String & name) { this->name = name; }
+const String & Location::get_name() const { return this->name; }
-void Location::set_description(const char * description) {
- safe_free(this->description);
- this->description = strdup(description);
-}
-const char * Location::get_description() {
- return this->description;
-}
+void Location::set_description(const String & description) { this->description = description; }
+const String & Location::get_description() const { return this->description; }
void Location::set_exit(Direction dir, Location * location) {
this->edges[dir] = location;
}
-Location * Location::get_exit(Direction dir) {
+Location * Location::get_exit(Direction dir) const {
return this->edges[dir];
}
@@ -47,14 +44,17 @@ void Location::add_object(Object * object) {
void Location::remove_object(Object * object) {
this->objects.remove(object);
}
-ListRange<Object *> Location::get_objects() {
+ListRange<Object *> Location::get_objects() const {
return this->objects.range();
}
void Location::add_enemy(Enemy * enemy) {
this->enemies.push_back(enemy);
}
-ListRange<Enemy *> Location::get_enemies() {
+void Location::remove_enemy(Enemy * enemy) {
+ this->enemies.remove(enemy);
+}
+ListRange<Enemy *> Location::get_enemies() const {
return this->enemies.range();
}