diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-13 19:06:52 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-10-13 19:06:52 +0200 |
commit | 5ab49aa46b6f1a9cd5196165009d2ee08b6b7a87 (patch) | |
tree | bbc3967b299ee2b272efcd83e3c0c4ed82ce7de6 /BlueTileBehavior.cpp | |
parent | feaf272efad381414c6ee76c0cd4bf929e8087ae (diff) |
implement all tile behaviors
Diffstat (limited to 'BlueTileBehavior.cpp')
-rw-r--r-- | BlueTileBehavior.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/BlueTileBehavior.cpp b/BlueTileBehavior.cpp index ca714a4..fbca527 100644 --- a/BlueTileBehavior.cpp +++ b/BlueTileBehavior.cpp @@ -1,12 +1,39 @@ #include <memory> #include "BlueTileBehavior.h" +#include "Artist.h" +#include "Tile.h" +#include "TileData.h" using namespace std; BlueTileBehavior BlueTileBehavior::instance {"B"}; -void BlueTileBehavior::update(Tile &) { +void BlueTileBehavior::step(Artist & artist) { + this->interactions++; + if (this->interactions > 1) return; + + if (artist.data.vx == 0) dx = 1; + if (artist.data.vy == 0) dy = 1; +} + +void BlueTileBehavior::update_neighbor(Tile * tile) { + if (tile == nullptr) return; + + TileData new_data = tile->data; + new_data.type = "B"; + tile->set_data(new_data); +} + +void BlueTileBehavior::update(Tile & tile) { + if (this->interactions < 1) return; + + this->update_neighbor(tile.get_neighbor(this->dx, this->dy)); + this->update_neighbor(tile.get_neighbor(-this->dx, -this->dy)); + + TileData new_data = tile.data; + new_data.type = "Y"; + tile.set_data(new_data); } unique_ptr<TileBehaviorStrategy> BlueTileBehavior::clone(Museum & museum) { |