diff --git a/core/src/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java index 33050b996e..6ed3800eb1 100644 --- a/core/src/mindustry/core/GameState.java +++ b/core/src/mindustry/core/GameState.java @@ -16,6 +16,8 @@ public class GameState{ public int wave = 1; /** Wave countdown in ticks. */ public float wavetime; + /** Logic tick. */ + public double tick; /** Whether the game is in game over state. */ public boolean gameOver = false, serverPaused = false; /** Server ticks/second. Only valid in multiplayer. */ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index d0a6b24a35..1facfa1c96 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -370,6 +370,9 @@ public class Logic implements ApplicationListener{ } if(!state.isPaused()){ + float delta = Core.graphics.getDeltaTime(); + state.tick += Float.isNaN(delta) || Float.isInfinite(delta) ? 0f : delta * 60f; + state.teams.updateTeamStats(); if(state.isCampaign()){ diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 527742d836..ec3b09d0c5 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -92,6 +92,7 @@ public abstract class SaveVersion extends SaveFileReader{ "build", Version.build, "mapname", state.map.name(), "wave", state.wave, + "tick", state.tick, "wavetime", state.wavetime, "stats", JsonIO.write(state.stats), "rules", JsonIO.write(state.rules), @@ -110,6 +111,7 @@ public abstract class SaveVersion extends SaveFileReader{ state.wave = map.getInt("wave"); state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing); + state.tick = map.getFloat("tick"); state.stats = JsonIO.read(GameStats.class, map.get("stats", "{}")); state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get(); diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 04482fb521..c0dc4df1c5 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -57,9 +57,10 @@ public class LExecutor{ /** Runs a single instruction. */ public void runOnce(){ - //set time - vars[varTime].numval = Time.millis(); - vars[varTick].numval = Time.time; + //set up time; note that @time is now only updated once every invocation and directly based off of @tick. + //having time be based off of user system time was a very bad idea. + vars[varTime].numval = state.tick / 60.0 * 1000.0; + vars[varTick].numval = state.tick; //reset to start if(vars[varCounter].numval >= instructions.length || vars[varCounter].numval < 0){ diff --git a/core/src/mindustry/net/NetworkIO.java b/core/src/mindustry/net/NetworkIO.java index 9253f71181..d81955fa42 100644 --- a/core/src/mindustry/net/NetworkIO.java +++ b/core/src/mindustry/net/NetworkIO.java @@ -40,6 +40,7 @@ public class NetworkIO{ stream.writeInt(state.wave); stream.writeFloat(state.wavetime); + stream.writeDouble(state.tick); stream.writeInt(player.id); player.write(Writes.get(stream)); @@ -61,6 +62,7 @@ public class NetworkIO{ state.wave = stream.readInt(); state.wavetime = stream.readFloat(); + state.tick = stream.readDouble(); Groups.clear(); int id = stream.readInt();