DllExclusive void FactoryCommandSupplier::AddCommandsToUnit(Unit* unit) { auto commands = unit->GetCommands(); FactoryOpenDoorsCommand* openDoors(xNew1(FactoryOpenDoorsCommand, unit)); FactoryCloseDoorsCommand* closeDoors(xNew1(FactoryCloseDoorsCommand, unit)); commands->AddCommand(GetTypeId<FactoryOpenDoorsCommand>(), openDoors, 0); commands->AddCommand(GetTypeId<FactoryCloseDoorsCommand>(), closeDoors, 0); }
void Tram::handleNewMessage() { while(!m_messageList.isEmpty()) { Message *m = m_messageList.takeFirst(); switch(m->type()) { case Message::LightToTramStop: if(m_state != Tram::Off) m_state = Tram::Desceleration; break; case Message::LightToTramCross: if(m_state == Tram::Off) qDebug() << "depart de" << name(); m_state = Tram::Acceleration; break; case Message::ManageStationStop: openDoors(); break; case Message::EnterTram: enter((Person*)m->sender()); m_nbPeopleGettingOn --; if(m_nbPeopleGettingOn == 0) closeDoors(); break; case Message::QuitTram: quit((Person*)m->sender()); m_nbPeopleGettingOff --; if(m_nbPeopleGettingOff == 0) makePeopleGetOn(); break; case Message::Solved: restartAfterOutOfOrder(); break; case Message::ProblemDetected: if(m_state != Tram::OutOfOrder) { this->m_beforeOutOfOrder = this->m_state; this->m_state = Tram::OutOfOrder; } break; default: break; } delete m; } }