#include "Pole.h" #include "Screen.h" Pole::Pole(int x, int y, Pelican& pelican) : waitLight(new Light("WAIT", x + 6, y + 12, Screen::WHITE)), pelican(pelican) { using namespace Screen; // we will discuss namespaces in the course pelican.attach(this); lights[RED_LIGHT] = new Light("*", x + 11, y + 3, RED); lights[RED_MAN] = new Light("*<-=", x + 6, y + 4, RED); lights[YELLOW_LIGHT] = new Light("*", x + 11, y + 5, YELLOW); lights[GREEN_LIGHT] = new Light("*", x + 11, y + 7, GREEN); lights[GREEN_MAN] = new Light("*|-<", x + 6, y + 7, GREEN); write(" _____ ", x, ++y, GRAY); write(" /___ /| ", x, ++y, GRAY); write(" | | | ", x, ++y, GRAY); write(" | |/| ", x, ++y, GRAY); write(" |____| | ", x, ++y, GRAY); write(" | |/| ", x, ++y, GRAY); write(" | | | ", x, ++y, GRAY); write(" |____|/ ", x, ++y, GRAY); write(" _||__ ", x, ++y, GRAY); write(" /___ /| ", x, ++y, GRAY); write(" | | | ", x, ++y, GRAY); write(" | | | ", x, ++y, GRAY); write(" |____|/ ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write(" || ", x, ++y, GRAY); write("========||===========", x, ++y, GRAY); write(" / || / ", x, ++y, GRAY); write("_ /_________ /_ ", x, ++y, GRAY); write("/ / ", x, ++y, GRAY); } Pole::~Pole() { for (int i = 0; i < sizeof lights / sizeof(lights[0]); ++i) delete lights[i]; delete waitLight; } void Pole::setTrafficLights(Pelican::PelicanState state) { static const Light::LightState LightStates[Pelican::YELLOW_STATE + 1][RED_MAN + 1] = { // red yellow green green man red man {Light::ON, Light::OFF, Light::OFF, Light::ON, Light::OFF}, // red {Light::OFF, Light::FLASH, Light::OFF, Light::FLASH, Light::OFF}, // y flash {Light::OFF, Light::OFF, Light::ON, Light::OFF, Light::ON}, // g time {Light::OFF, Light::OFF, Light::ON, Light::OFF, Light::ON}, // g idle {Light::OFF, Light::ON, Light::OFF, Light::OFF, Light::ON} // yellow }; for (int i = RED_LIGHT; i <= RED_MAN; i++) { lights[i]->set(LightStates[state][i]); } } void Pole::setWaitLight(bool pressed) { waitLight->set(pressed ? Light::ON : Light::OFF); } void Pole::update() { setTrafficLights(pelican.getState()); setWaitLight(pelican.isPressed()); }