Example #1
0
	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);
	}
Example #2
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();
}
Example #3
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;
    }
}