From d8289105193707daede1a5b59137f18e20f20aeb Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 18 Oct 2024 15:48:14 +0200 Subject: (2/2) rename --- SetNeighborTileBehavior.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 SetNeighborTileBehavior.cpp (limited to 'SetNeighborTileBehavior.cpp') diff --git a/SetNeighborTileBehavior.cpp b/SetNeighborTileBehavior.cpp new file mode 100644 index 0000000..d934d4b --- /dev/null +++ b/SetNeighborTileBehavior.cpp @@ -0,0 +1,44 @@ +#include + +#include "SetNeighborTileBehavior.h" +#include "CreateArtistTileBehavior.h" +#include "Artist.h" +#include "Tile.h" + +using namespace std; + +SetNeighborTileBehavior SetNeighborTileBehavior::instance { SetNeighborTileBehavior::type }; + +void SetNeighborTileBehavior::step(Artist * artist) { + this->interactions++; + if (dx != 0 || dy != 0) return; + if (artist == nullptr) return; + + if (artist->data.vx == 0) dx = 1; + if (artist->data.vy == 0) dy = 1; +} + +static void update_neighbor(Tile & here, int dx, int dy) { + if (dx == 0 && dy == 0) return; + Tile * neighbor = here.get_neighbor(dx, dy); + if (neighbor == &here) return; + if (neighbor == nullptr) return; + + neighbor->set_type(SetNeighborTileBehavior::type); +} + +void SetNeighborTileBehavior::update(Tile & tile) { + if (this->interactions < 1) return; + + update_neighbor(tile, this->dx, this->dy); + update_neighbor(tile, -this->dx, -this->dy); + + tile.set_type(CreateArtistTileBehavior::type); +} + +unique_ptr SetNeighborTileBehavior::clone(Museum & museum) { + auto instance = new SetNeighborTileBehavior(); + instance->museum = &museum; + return unique_ptr(instance); +} + -- cgit v1.2.3