Exemplo n.º 1
0
void Server::RunUpdateLoop()
{
    uint32 realCurrTime = 0;
    uint32 realPrevTime = GetMSTime();

    uint32 prevSleepTime = 0; // used for balanced full tick time length

    while (_isRunning)
    {
        realCurrTime = GetMSTime();
        uint32 diff = GetMSTimeDiff(realPrevTime, realCurrTime);
        _update(diff);
        realPrevTime = realCurrTime;
        // diff (D0) include time of previous sleep (d0) + tick time (t0)
        // we want that next d1 + t1 == _SLEEP_CONST
        // we can't know next t1 and then can use (t0 + d1) == _SLEEP_CONST requirement
        // d1 = _SLEEP_CONST - t0 = _SLEEP_CONST - (D0 - d0) = _SLEEP_CONST + d0 - D0
        if (diff <= _SLEEP_CONST + prevSleepTime)
        {
            prevSleepTime = _SLEEP_CONST + prevSleepTime - diff;
            ACE_OS::sleep(ACE_Time_Value(0, static_cast<uint64>(prevSleepTime) * 1000L));
        }
        else
            prevSleepTime = 0;
    }

    _cleanup();
}
Exemplo n.º 2
0
void GameController::Run()
{
    Player* me = new Player(0,0,1);

    sObjMgr->CreateWorld();
    sObjMgr->Update();

    DWORD realCurrTime = 0;
    DWORD realPrevTime = GetMSTime();

    DWORD diff;

    /* Example for using the sScreenLog class */
    sScreenLog->AddTrack(&diff,ScreenLog::Track::UINT,20,30,0xFFFF0000);

//	sScreenLog->AddTrack(&me->X,ScreenLog::Track::INT,20,50,0xFFFF0000);
//	sScreenLog->AddTrack(&me->Y,ScreenLog::Track::INT,20,70,0xFFFF0000);
    while(true)
    {
        realCurrTime = GetMSTime();
        diff = GetMSTimeDiff(realPrevTime,realCurrTime);

        Player* me = sObjMgr->Me();

        ReadKeyboard();

        if(KEY_PRESSED(DIK_F))
            me->Fire();

        if(KEY_DOWN(DIK_ESCAPE))
            break;
        if(KEY_DOWN(DIK_W))
            me->SetYVelocity(-3);
        if(KEY_DOWN(DIK_S))
            me->SetYVelocity(3);
        if(KEY_DOWN(DIK_A)) {
            me->SetXVelocity(-3);
            if(KEY_DOWN(DIK_D)) {
                new Explosion(me,me->GetX()+4,me->GetY()+(me->GetHeight()/2),19,0,false);
            }
        }
        if(KEY_DOWN(DIK_D)) {
            me->SetXVelocity(3);
            if(KEY_DOWN(DIK_A)) {
                new Explosion(me,me->GetX()+me->GetWidth()-4,me->GetY()+(me->GetHeight()/2),19,0,false);
            }
        }

        /* Oops :< */
        //if(KEY_UP(DIK_W) && KEY_UP(DIK_A) && KEY_UP(DIK_S) && KEY_UP(DIK_D))
        //	{
        //	me->SetXVelocity(0);
        //	me->SetYVelocity(0);
        //	}

        if(KEY_DOWN(DIK_R))
            me->SetPos(30,70);

        if(KEY_DOWN(DIK_Q))
            me->SetAngle(me->GetAngle()+0.1f);

        if(KEY_DOWN(DIK_E))
            me->SetAngle(me->GetAngle()-0.1f);

        if(KEY_DOWN(DIK_M))
            sWorld->PrintMap();

        if(KEY_DOWN(DIK_SPACE))
        {
            me->SetXVelocity(0);
            me->SetYVelocity(0);
        }

        sObjMgr->Update(/* diff */);
        FollowUnit(me);
        Render();

        realPrevTime = realCurrTime;
    }
}
Exemplo n.º 3
0
uint32 GetMSTimeDiffToNow(uint32 time)
{
    return GetMSTimeDiff(time, GetMSTime());
}