Пример #1
0
  /*
   * (non-Javadoc)
   *
   * @see java.lang.Thread#run()
   */
  @Override
  public void run() {
    logger.debug("UpdateThread started.");
    lasttick = timer.getTimeInSeconds();
    float currentTime = 0.0f;
    while (keepRunning) {
      lock.lock();
      currentTime = timer.getTimeInSeconds();
      float dt = (float) (currentTime - (lasttick + offset));
      offset = 0;
      GameTaskQueueManager.getManager().getQueue(GameTaskQueue.UPDATE).execute();
      sceneData.getRoomNode().updateGeometricState(dt, true);
      sceneData.getRootNode().updateGeometricState(dt, true);
      performCameraMotion();
      GameStateManager.getInstance().update(dt);
      if (!isPaused()) {
        sceneData.getCollisionHandler().update(dt);
        sceneData.getPhysicsSpace().update(dt);
      }
      TextOverlayManager.getInstance().update(dt);
      float timePassed = currentTime - lasttick;
      synchronized (repeatedActions) {
        for (RepeatedUpdateAction action : repeatedActions) {
          action.doUpdate(timePassed);
        }
      }

      if (sceneData.getRootNode() != null) {
        // TODO: should probably go away
        sceneData.getRootNode().updateRenderState();
      }
      lasttick = currentTime;
      fieldService.checkFields();
      lock.unlock();
      try {
        sleep(10);
      } catch (InterruptedException e) {
        // we can ignore this buddy
      }
      if (isPaused()) {
        offset += 0.001f;
      }
    }
    logger.debug("UpdateThread stopped.");
  }