/* * (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."); }