コード例 #1
0
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;
  }
}
コード例 #2
0
ファイル: grim.cpp プロジェクト: jvprat/residual
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);
		}
	}
}