52public final class GameEngine
extends AbstractScheduledService {
54 public static final int TICK_MILLIS = 600;
56 public static int millisToTicks(
final int millis) {
57 return millis / TICK_MILLIS;
60 public static int clientTicksToMillis(
final int clientTicks) {
61 return clientTicks * 20;
64 public static int clientTicksToServerTicks(
final int clientTicks) {
65 return millisToTicks(clientTicksToMillis(clientTicks));
68 private static final Logger logger = LogManager.getLogger(GameEngine.class);
70 private final ClientSynchronizer synchronizer;
73 protected String serviceName() {
82 protected void runOneIteration() {
93 long elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
95 System.out.printf(
"world.dequeLogins(): %d ms%n", elapsed);
100 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
102 System.out.printf(
"world.dequeLogouts(): %d ms%n", elapsed);
107 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
109 System.out.printf(
"NpcPreUpateTask: %d ms%n", elapsed);
114 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
116 System.out.printf(
"PlayerPreUpdateTask: %d ms%n", elapsed);
121 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
123 System.out.printf(
"world.process(): %d ms%n", elapsed);
128 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
130 System.out.printf(
"npc.sequence(): %d ms%n", elapsed);
134 players.forEach(player -> {
137 }
catch (Exception ex) {
138 logger.error(String.format(
"error player.sequence(): %s", player), ex);
141 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
143 System.out.printf(
"player.sequence(): %d ms%n", elapsed);
148 synchronizer.synchronize(players, npcs);
149 }
catch (Exception ex) {
150 logger.fatal(
"Error in the main game sequencer.", ex);
152 elapsed = stopwatch.elapsedTime(TimeUnit.MILLISECONDS);
154 System.out.printf(
"synchronizer.synchronize(): %d ms%n", elapsed);
156 players.forEach(player -> {
162 System.out.printf(
"CYCLE END: %d ms%n", stopwatch2.elapsedTime(TimeUnit.MILLISECONDS));
164 }
catch(Exception e) {
170 protected Scheduler scheduler() {
171 return Scheduler.newFixedRateSchedule(0, TICK_MILLIS, TimeUnit.MILLISECONDS);