예제 #1
0
 public void update() {
   runTasks();
   if (networkManager != null) {
     long time = System.currentTimeMillis();
     float lastDelta2;
     delta = (time - lastTickTime) / 8.0F;
     lastTickTime = time;
     if (!lagging
         && networkManager.waitingForPingReturn
         && time - networkManager.lastPacketTime > 420) {
       lagging = true;
     }
     if (lagging) {
       lagMultiplier *= 0.85F;
       if (lagMultiplier < 0.01F) {
         lagMultiplier = 0.01F;
       }
     } else {
       if (lagMultiplier < 1.0F) {
         lagMultiplier += 0.05F;
         if (lagMultiplier >= 1.0F) {
           lagMultiplier = 1.0F;
         }
       }
     }
     if (delta > 120) {
       delta = 120;
     }
     delta *= lagMultiplier;
     errorTime *= lagMultiplier;
     lastTicks = ticks;
     ticks += delta;
     lastDelta = (float) (Math.floor(ticks) - Math.floor(lastTicks));
     lastTicks2 = ticks2;
     ticks2 += delta * 2;
     lastDelta2 = (float) (Math.floor(ticks2) - Math.floor(lastTicks2));
     if (globalAlpha < 1.0F) {
       globalAlpha += 0.0075F * delta;
       if (globalAlpha > 1.0F) {
         globalAlpha = 1.0F;
       }
     } else if (globalAlpha > 0.0F) {
       globalAlpha -= 0.0075F * delta;
       if (globalAlpha < 0.0F) {
         globalAlpha = 0.0F;
       }
     }
     if (qsm > 1.0F) {
       qsm -= 0.00004F * delta;
       if (qsm < 1.0F) {
         qsm = 1.0F;
       }
     } else if (qsm < MAX_QSM) {
       qsm += 0.00004F;
       if (qsm > MAX_QSM) {
         qsm = MAX_QSM;
       }
     }
     if (player != null) {
       if (!networkManager.waitingForPingReturn) {
         if (time - networkManager.lastPingSendTime > 250) {
           networkManager.lastPingSendTime = time;
           networkManager.ping();
         }
       }
       errorTime *= Math.pow(0.993, lastDelta);
       if (allowUserInput) {
         controller.update(this);
         float targetAngle = controller.getTargetAngle();
         targetAngle %= PI_2;
         if (targetAngle < 0) {
           targetAngle += PI_2;
         }
         if (targetAngle != lastSendAngle || lastSendAngleTime == 0) {
           if (time - lastSendAngleTime > 100) {
             lastSendAngle = targetAngle;
             networkManager.send(new MessageSetAngle(targetAngle));
           }
         }
         player.accelerating = controller.shouldAccelerate();
         if (time - lastAccelerateUpdateTime > 150) {
           if (player.accelerating != player.wasAccelerating) {
             lastAccelerateUpdateTime = time;
             networkManager.send(new MessageAccelerate(player.accelerating));
             player.wasAccelerating = player.accelerating;
           }
         }
       }
       Iterator<Entity> entityIter = entityIterator();
       while (entityIter.hasNext()) {
         Entity entity = entityIter.next();
         if (entity.updateBase(delta, lastDelta, lastDelta2)) {
           entityIter.remove();
         }
       }
     }
   } else {
     ticks++;
   }
 }