Sync/save @tick/@time; make @time be based off of @tick
Closes Anuken/Mindustry-Suggestions/issues/2976
This commit is contained in:
@@ -16,6 +16,8 @@ public class GameState{
|
|||||||
public int wave = 1;
|
public int wave = 1;
|
||||||
/** Wave countdown in ticks. */
|
/** Wave countdown in ticks. */
|
||||||
public float wavetime;
|
public float wavetime;
|
||||||
|
/** Logic tick. */
|
||||||
|
public double tick;
|
||||||
/** Whether the game is in game over state. */
|
/** Whether the game is in game over state. */
|
||||||
public boolean gameOver = false, serverPaused = false;
|
public boolean gameOver = false, serverPaused = false;
|
||||||
/** Server ticks/second. Only valid in multiplayer. */
|
/** Server ticks/second. Only valid in multiplayer. */
|
||||||
|
|||||||
@@ -370,6 +370,9 @@ public class Logic implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!state.isPaused()){
|
if(!state.isPaused()){
|
||||||
|
float delta = Core.graphics.getDeltaTime();
|
||||||
|
state.tick += Float.isNaN(delta) || Float.isInfinite(delta) ? 0f : delta * 60f;
|
||||||
|
|
||||||
state.teams.updateTeamStats();
|
state.teams.updateTeamStats();
|
||||||
|
|
||||||
if(state.isCampaign()){
|
if(state.isCampaign()){
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
"build", Version.build,
|
"build", Version.build,
|
||||||
"mapname", state.map.name(),
|
"mapname", state.map.name(),
|
||||||
"wave", state.wave,
|
"wave", state.wave,
|
||||||
|
"tick", state.tick,
|
||||||
"wavetime", state.wavetime,
|
"wavetime", state.wavetime,
|
||||||
"stats", JsonIO.write(state.stats),
|
"stats", JsonIO.write(state.stats),
|
||||||
"rules", JsonIO.write(state.rules),
|
"rules", JsonIO.write(state.rules),
|
||||||
@@ -110,6 +111,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
|
|
||||||
state.wave = map.getInt("wave");
|
state.wave = map.getInt("wave");
|
||||||
state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing);
|
state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing);
|
||||||
|
state.tick = map.getFloat("tick");
|
||||||
state.stats = JsonIO.read(GameStats.class, map.get("stats", "{}"));
|
state.stats = JsonIO.read(GameStats.class, map.get("stats", "{}"));
|
||||||
state.rules = JsonIO.read(Rules.class, map.get("rules", "{}"));
|
state.rules = JsonIO.read(Rules.class, map.get("rules", "{}"));
|
||||||
if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get();
|
if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get();
|
||||||
|
|||||||
@@ -57,9 +57,10 @@ public class LExecutor{
|
|||||||
|
|
||||||
/** Runs a single instruction. */
|
/** Runs a single instruction. */
|
||||||
public void runOnce(){
|
public void runOnce(){
|
||||||
//set time
|
//set up time; note that @time is now only updated once every invocation and directly based off of @tick.
|
||||||
vars[varTime].numval = Time.millis();
|
//having time be based off of user system time was a very bad idea.
|
||||||
vars[varTick].numval = Time.time;
|
vars[varTime].numval = state.tick / 60.0 * 1000.0;
|
||||||
|
vars[varTick].numval = state.tick;
|
||||||
|
|
||||||
//reset to start
|
//reset to start
|
||||||
if(vars[varCounter].numval >= instructions.length || vars[varCounter].numval < 0){
|
if(vars[varCounter].numval >= instructions.length || vars[varCounter].numval < 0){
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public class NetworkIO{
|
|||||||
|
|
||||||
stream.writeInt(state.wave);
|
stream.writeInt(state.wave);
|
||||||
stream.writeFloat(state.wavetime);
|
stream.writeFloat(state.wavetime);
|
||||||
|
stream.writeDouble(state.tick);
|
||||||
|
|
||||||
stream.writeInt(player.id);
|
stream.writeInt(player.id);
|
||||||
player.write(Writes.get(stream));
|
player.write(Writes.get(stream));
|
||||||
@@ -61,6 +62,7 @@ public class NetworkIO{
|
|||||||
|
|
||||||
state.wave = stream.readInt();
|
state.wave = stream.readInt();
|
||||||
state.wavetime = stream.readFloat();
|
state.wavetime = stream.readFloat();
|
||||||
|
state.tick = stream.readDouble();
|
||||||
|
|
||||||
Groups.clear();
|
Groups.clear();
|
||||||
int id = stream.readInt();
|
int id = stream.readInt();
|
||||||
|
|||||||
Reference in New Issue
Block a user