#include #include #include "YellowTileBehavior.h" #include "Tile.h" #include "Museum.h" using std::uniform_int_distribution; using std::uniform_real_distribution; using std::random_device; using std::mt19937; using namespace std; YellowTileBehavior YellowTileBehavior::instance {"Y"}; random_device dev{}; mt19937 rng(dev()); uniform_int_distribution random_bool(0, 1); uniform_real_distribution random_float(-1, 1); void YellowTileBehavior::update(Tile & tile) { this->steps_total += this->steps; for (unsigned int i = 0; i < this->steps; i++) { ArtistData new_data = { .x = static_cast(tile.x), .y = static_cast(tile.y), }; float velocity = random_float(rng); random_bool(rng) ? new_data.vx = velocity : new_data.vy = velocity; this->museum->people.add_artist(new_data); } this->steps = 0; if (this->steps_total >= 2) { TileData new_data = tile.data; new_data.type = "G"; tile.set_data(new_data); } } unique_ptr YellowTileBehavior::clone(Museum & museum) { auto instance = new YellowTileBehavior(); instance->museum = &museum; return unique_ptr(instance); }