示例#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);
	}
示例#2
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;
    }
}