void PlayerComponent::update() { if( game.level.roster.get( parent ).x < -840 ) { if( game.level.roster.get( parent ).y < -259 ) game.endTime = game.timer.time; } else if( game.level.roster.get( parent ).x > 3584 ) { if( game.level.roster.get( parent ).y > 1980 ) game.endTime = game.timer.time; } windVol += double( rand() % 400 ) / 100.0 - ( windVol > 50 ? 2.0 : 0.0 ); windPan += double( rand() % 200 ) / 100.0 - 1.0; windFreq += double( rand() % 400 ) / 100.0 - 2.0; adjust_sample( wind, windVol, windPan, windFreq, 1 ); if( deathCounter > 0 ) deathCounter--; else if( transformCounter > 0 ) transformCounter--; else { handleAnimation(); handleControls(); } if( deathCounter == -1 ) { game.level.roster.get( parent ).y += yVel; game.level.roster.get( parent ).x += xVel; } for( int i = 0; i < game.level.deathBodies.size(); i++ ) if( game.level.roster.get( parent ).body. testCollision( game.level.deathBodies[ i ] ).GetMagnitudeSquared() > 0.0001 && deathCounter == -1 ) { deathCounter = 60; play_sample( die, 255,128, 7000, 0 ); game.level.roster.get( parent ).sprite.setAnimation( "die" ); } if( deathCounter == 0 ) { game.level.roster.get( parent ).x = startX; game.level.roster.get( parent ).y = startY; deathCounter = -1; } }
void GrimEngine::mainLoop() { _movieTime = 0; _frameTime = 0; _frameStart = g_system->getMillis(); _frameCounter = 0; _timeAccum = 0; _frameTimeCollection = 0; _prevSmushFrame = 0; _savegameLoadRequest = false; _savegameSaveRequest = false; _savegameFileName = NULL; _refreshShadowMask = false; for (;;) { uint32 startTime = g_system->getMillis(); if (_savegameLoadRequest) { savegameRestore(); } if (_savegameSaveRequest) { savegameSave(); } g_imuse->flushTracks(); g_imuse->refreshScripts(); if (_mode == ENGINE_MODE_IDLE) { // don't kill CPU g_system->delayMillis(10); continue; } // Process events Common::Event event; while (g_system->getEventManager()->pollEvent(event)) { // Handle any buttons, keys and joystick operations if (event.type == Common::EVENT_KEYDOWN) { if (_mode != ENGINE_MODE_DRAW && _mode != ENGINE_MODE_SMUSH && (event.kbd.ascii == 'q')) { handleExit(); break; } else { handleChars(event.type, event.kbd.keycode, event.kbd.flags, event.kbd.ascii); } } if (event.type == Common::EVENT_KEYDOWN || event.type == Common::EVENT_KEYUP) { handleControls(event.type, event.kbd.keycode, event.kbd.flags, event.kbd.ascii); } // Check for "Hard" quit" if (event.type == Common::EVENT_QUIT) return; if (event.type == Common::EVENT_SCREEN_CHANGED) _refreshDrawNeeded = true; } luaUpdate(); if (_mode != ENGINE_MODE_PAUSE) { updateDisplayScene(); doFlip(); } if (g_imuseState != -1) { g_imuse->setMusicState(g_imuseState); g_imuseState = -1; } uint32 endTime = g_system->getMillis(); if (startTime > endTime) continue; uint32 diffTime = endTime - startTime; if (_speedLimitMs == 0) continue; if (diffTime < _speedLimitMs) { uint32 delayTime = _speedLimitMs - diffTime; g_system->delayMillis(delayTime); } } }