diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-31 14:34:01 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-31 14:34:01 +0100 |
commit | 82dcf9e2dd3596b28ef846f4a217dc19c21cf781 (patch) | |
tree | f99f556afa6affeb0fe6a2a1c107862ca76f9e66 /backend | |
parent | f8d8d7499ba4433678db2a68fb1cae74448ca31e (diff) |
more WIP
Diffstat (limited to 'backend')
-rw-r--r-- | backend/Dungeon.cpp | 44 | ||||
-rw-r--r-- | backend/Dungeon.h | 7 |
2 files changed, 40 insertions, 11 deletions
diff --git a/backend/Dungeon.cpp b/backend/Dungeon.cpp index d4df1ef..b1e89ba 100644 --- a/backend/Dungeon.cpp +++ b/backend/Dungeon.cpp @@ -1,17 +1,41 @@ #include "Location.h" #include "Dungeon.h" #include "RNG.h" +#include "backend/ListIterator.h" +#include "print.h" -void Dungeon::update() { - // TODO: iterators are broken (!????) - // for (Location * location : this->locations) { - // for (Enemy * enemy : location->get_enemies()) { - // if (RNG::get().rand_double() < 0.5) continue; - // Direction direction = random_direction(*location); - // // location->remove_enemy(enemy); // TODO: this breaks the for loop - // location->get_exit(direction)->add_enemy(enemy); - // } - // } +void Dungeon::update(Location * player_location) { + this->player_location = player_location; + + ListRange<Enemy *> enemies = player_location->get_enemies(); + + if (enemies.size() > 0) + this->update_attacks(enemies); + else + this->update_movement(); +} + +void Dungeon::update_attacks(ListRange<Enemy *> & enemies) { + printf("TODO: de vijanden vallen aan!\n"); +} + +void Dungeon::update_movement() { + bool moved = false; + for (Location * location : this->locations) { + for (Enemy * enemy : location->get_enemies()) { + if (RNG::get().rand_double() < 0.5) continue; + + if (!moved) + lprtf(":: De vijanden bewegen ::\n"); + Direction direction = random_direction(*location); + location->remove_enemy(enemy); + Location * new_location = location->get_exit(direction); + new_location->add_enemy(enemy); + if (player_location == new_location) + lprtf("%s komt de huidige locatie binnen\n", enemy->get_name().c_str()); + moved = true; + } + } } void Dungeon::add_location(Location * location) { diff --git a/backend/Dungeon.h b/backend/Dungeon.h index be8b52e..1eaa970 100644 --- a/backend/Dungeon.h +++ b/backend/Dungeon.h @@ -2,6 +2,7 @@ #include "Location.h" #include "PtrList.h" +#include "backend/ListIterator.h" class Dungeon { public: @@ -9,12 +10,16 @@ public: virtual ~Dungeon() = default; public: - void update(); + void update(Location * player_location); void add_location(Location *); Location * get_start_location(); private: PtrList<Location> locations; + Location * player_location = nullptr; +private: + void update_attacks(ListRange<Enemy *> & enemies); + void update_movement(); }; |