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::makePeopleGetOn() { // Permet de visualiser l'arrêt dans l'IHM sleep(2); StationLight * stationLight = (StationLight *) m_obstacle; QList<Person*> stationPersons = stationLight->station()->persons(); QList<Person*> personsReadyToGetOn = Person::personsReadyToGetOn(stationPersons); m_nbPeopleGettingOn = personsReadyToGetOn.size(); if(m_nbPeopleGettingOn > 0) { qDebug() << "----les passagers montent"; for(int i = 0 ; i < m_nbPeopleGettingOn ; i++) { Message * m = new Message(this, Message::TramIncoming); personsReadyToGetOn.at(i)->addMessage(m); } } else closeDoors(); }
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; } }