Time processor
This commit is contained in:
@@ -6,6 +6,7 @@ package mc.core;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import mc.core.time.TimeProcessor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Calendar;
|
||||
@@ -23,14 +24,13 @@ public class GameLoop extends Thread {
|
||||
private int lowTps;
|
||||
|
||||
/* Time */
|
||||
private long gameTime;
|
||||
private Runnable gameTimeUpdateFunc;
|
||||
@Setter
|
||||
private TimeProcessor gameTimer;
|
||||
|
||||
public GameLoop() {
|
||||
super();
|
||||
setTps(20);
|
||||
setPercentWarnLowTps(5);
|
||||
setStartGameTime(0);
|
||||
}
|
||||
|
||||
public void setPercentWarnLowTps(int value) {
|
||||
@@ -51,42 +51,6 @@ public class GameLoop extends Thread {
|
||||
this.pause = (1000 / tps);
|
||||
}
|
||||
|
||||
public void setStartGameTime(long value) {
|
||||
this.gameTime = value;
|
||||
}
|
||||
|
||||
public void setTimeMode(String mode) {
|
||||
if (mode.equals("0") || mode.equalsIgnoreCase("idle")) {
|
||||
gameTimeUpdateFunc = () -> {};
|
||||
} else if (mode.equalsIgnoreCase("realtime")) {
|
||||
gameTimeUpdateFunc = () -> {
|
||||
final long DIFF = 21600L;
|
||||
final long HOUR24 = 86400L;
|
||||
final long SYSTIME = System.currentTimeMillis();
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(SYSTIME);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
long time = (SYSTIME - calendar.getTimeInMillis())/1000;
|
||||
if (time < DIFF) time += HOUR24;
|
||||
|
||||
gameTime = (long) ((time - DIFF) / 3.6);
|
||||
};
|
||||
} else {
|
||||
if (!mode.equalsIgnoreCase("normal")) {
|
||||
log.warn("Unknown time mode: {}. Set normal mode", mode);
|
||||
}
|
||||
gameTimeUpdateFunc = () -> {
|
||||
gameTime++;
|
||||
if (gameTime > 24000) gameTime = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
log.info("Target TPS: {}; Low TPS: {}", tps, lowTps);
|
||||
@@ -108,10 +72,7 @@ public class GameLoop extends Thread {
|
||||
|
||||
/* --- --- --- */
|
||||
|
||||
gameTimeUpdateFunc.run();
|
||||
|
||||
/* --- --- --- */
|
||||
|
||||
long gameTime = gameTimer.getGameTime();
|
||||
playerManager.getBroadcastChannel().sendTimeUpdate(gameTime);
|
||||
|
||||
/* --- --- --- */
|
||||
|
||||
14
core/src/main/java/mc/core/time/IdleTime.java
Normal file
14
core/src/main/java/mc/core/time/IdleTime.java
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-05-01
|
||||
*/
|
||||
package mc.core.time;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class IdleTime implements TimeProcessor {
|
||||
@Getter
|
||||
private final long gameTime;
|
||||
}
|
||||
39
core/src/main/java/mc/core/time/RealTime.java
Normal file
39
core/src/main/java/mc/core/time/RealTime.java
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-05-01
|
||||
*/
|
||||
package mc.core.time;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class RealTime implements TimeProcessor {
|
||||
private static final long DIFF = 21600L;
|
||||
private static final long HOUR24 = 86400L;
|
||||
private final Calendar calendar = Calendar.getInstance();
|
||||
private long lastUpdate = 0;
|
||||
private long gameTime;
|
||||
|
||||
private void calcRealTime() {
|
||||
lastUpdate = System.currentTimeMillis();
|
||||
|
||||
calendar.setTimeInMillis(lastUpdate);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
long time = (lastUpdate - calendar.getTimeInMillis())/1000;
|
||||
if (time < DIFF) time += HOUR24;
|
||||
|
||||
gameTime = (long) ((time - DIFF) / 3.6);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getGameTime() {
|
||||
if ((System.currentTimeMillis() - lastUpdate) > 1000) {
|
||||
calcRealTime();
|
||||
}
|
||||
|
||||
return gameTime;
|
||||
}
|
||||
}
|
||||
21
core/src/main/java/mc/core/time/TimePerTick.java
Normal file
21
core/src/main/java/mc/core/time/TimePerTick.java
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-05-01
|
||||
*/
|
||||
package mc.core.time;
|
||||
|
||||
public class TimePerTick implements TimeProcessor {
|
||||
private long gameTime;
|
||||
|
||||
public void setStartGameTime(long value) {
|
||||
gameTime = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getGameTime() {
|
||||
gameTime++;
|
||||
if (gameTime > 24000) gameTime = 0;
|
||||
|
||||
return gameTime;
|
||||
}
|
||||
}
|
||||
9
core/src/main/java/mc/core/time/TimeProcessor.java
Normal file
9
core/src/main/java/mc/core/time/TimeProcessor.java
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-05-01
|
||||
*/
|
||||
package mc.core.time;
|
||||
|
||||
public interface TimeProcessor {
|
||||
long getGameTime();
|
||||
}
|
||||
Reference in New Issue
Block a user