#include #include "Tile.h" #include "TileColorFactory.h" #include "TileBehaviorFactory.h" #include "Museum.h" using namespace std; Tile::Tile(Museum & museum, TileData & data) : museum(museum) { this->set_data(data); } void Tile::set_type(const string & type) { this->data.type = type; this->set_data(this->data); } void Tile::set_data(TileData & data) { this->data = data; Canvas & canvas = this->museum.canvas; this->color = canvas.tile_color.get_color(this->data.type); this->behavior = canvas.tile_behavior.create(this->data.type); } void Tile::update() { this->behavior->update(*this); } Tile * Tile::get_neighbor(const XY & offset) { XY here { .x = static_cast(this->data.x), .y = static_cast(this->data.y), }; try { return &this->museum.canvas.get_tile(here + offset); } catch (...) { return nullptr; } }