#include #include "Tile.h" #include "TileAppearance.h" #include "TileBehavior.h" #include "Museum.h" Tile::Tile(Museum & museum, TileData data) : museum(museum) { this->set_data(data); } void Tile::set_data(TileData data) { this->data = data; this->color = TileAppearance::get_color(this->data.type); this->behavior = TileBehavior::get_strategy(this->data.type).clone(this->museum); } void Tile::update() { this->behavior->update(*this); } void Tile::step(Artist & artist) { this->behavior->step(artist); } Tile * Tile::get_neighbor(int dx, int dy) { Canvas & canvas = this->museum.canvas; int x = this->x + dx; int y = this->y + dy; if (x < 0) return nullptr; if (x > canvas.data.columns) return nullptr; if (y < 0) return nullptr; if (y > canvas.data.columns) return nullptr; return &canvas.get_tile(x, y); }