#include #include "BlueTileBehavior.h" #include "YellowTileBehavior.h" #include "Artist.h" #include "Tile.h" using namespace std; BlueTileBehavior BlueTileBehavior::instance { BlueTileBehavior::type }; 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; tile->set_type(BlueTileBehavior::type); } 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)); tile.set_type(YellowTileBehavior::type); } unique_ptr BlueTileBehavior::clone(Museum & museum) { auto instance = new BlueTileBehavior(); instance->museum = &museum; return unique_ptr(instance); }