diff --git a/build.gradle b/build.gradle index f27f7358c2..40f8ad9f87 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.8' roboVMVersion = '2.3.0' - uCoreVersion = '4d8019c8f37fdc2a7a64cbd55ef6ee30fb9f1ba5' + uCoreVersion = '65a4a39a4529881463ea2d7f126583b59cdeba26' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/src/Mindustry.gwt.xml b/core/src/Mindustry.gwt.xml index 24698d564c..8fbf313c24 100644 --- a/core/src/Mindustry.gwt.xml +++ b/core/src/Mindustry.gwt.xml @@ -8,7 +8,6 @@ - diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/io/anuke/mindustry/ai/BlockIndexer.java index 124e069a73..db70de360e 100644 --- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java +++ b/core/src/io/anuke/mindustry/ai/BlockIndexer.java @@ -50,18 +50,18 @@ public class BlockIndexer{ private Array returnArray = new ThreadArray<>(); public BlockIndexer(){ - Events.on(TileChangeEvent.class, tile -> { - if(typeMap.get(tile.packedPosition()) != null){ - TileIndex index = typeMap.get(tile.packedPosition()); + Events.on(TileChangeEvent.class, event -> { + if(typeMap.get(event.tile.packedPosition()) != null){ + TileIndex index = typeMap.get(event.tile.packedPosition()); for(BlockFlag flag : index.flags){ - getFlagged(index.team)[flag.ordinal()].remove(tile); + getFlagged(index.team)[flag.ordinal()].remove(event.tile); } } - process(tile); - updateQuadrant(tile); + process(event.tile); + updateQuadrant(event.tile); }); - Events.on(WorldLoadEvent.class, () -> { + Events.on(WorldLoadEvent.class, event -> { flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length]; for(int i = 0; i < flagMap.length; i++){ for(int j = 0; j < BlockFlag.all.length; j++){ diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index 681ab83dd1..1edf0defc4 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -25,18 +25,18 @@ public class Pathfinder{ private IntArray blocked = new IntArray(); public Pathfinder(){ - Events.on(WorldLoadEvent.class, this::clear); - Events.on(TileChangeEvent.class, tile -> { + Events.on(WorldLoadEvent.class, event -> clear()); + Events.on(TileChangeEvent.class, event -> { if(Net.client()) return; for(Team team : Team.all){ TeamData data = state.teams.get(team); - if(state.teams.isActive(team) && data.team != tile.getTeam() && paths[data.team.ordinal()].weights[tile.x][tile.y] >= Float.MAX_VALUE){ - update(tile, data.team); + if(state.teams.isActive(team) && data.team != event.tile.getTeam() && paths[data.team.ordinal()].weights[event.tile.x][event.tile.y] >= Float.MAX_VALUE){ + update(event.tile, data.team); } } - update(tile, tile.getTeam()); + update(event.tile, event.tile.getTeam()); }); } diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index a5e6e3bcf4..573edec198 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -163,7 +163,7 @@ public class WaveSpawner{ } } - private void reset(){ + private void reset(WorldLoadEvent event){ flySpawns.clear(); groundSpawns.clear(); quadrants = new GridBits(quadWidth(), quadHeight()); diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 2f122dfbae..0a67dcfab9 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -51,7 +51,6 @@ public class Control extends Module{ private Throwable error; public Control(){ - saves = new Saves(); db = new ContentDatabase(); @@ -97,13 +96,13 @@ public class Control extends Module{ saves.load(); - Events.on(StateChangeEvent.class, (from, to) -> { - if((from == State.playing && to == State.menu) || (from == State.menu && to != State.menu)){ + Events.on(StateChangeEvent.class, event -> { + if((event.from == State.playing && event.to == State.menu) || (event.from == State.menu && event.to != State.menu)){ Timers.runTask(5f, Platform.instance::updateRPC); } }); - Events.on(PlayEvent.class, () -> { + Events.on(PlayEvent.class, event -> { for(Player player : players){ player.add(); } @@ -117,13 +116,13 @@ public class Control extends Module{ } }); - Events.on(WorldLoadGraphicsEvent.class, () -> { + Events.on(WorldLoadGraphicsEvent.class, event -> { if(mobile){ Core.camera.position.set(players[0].x, players[0].y, 0); } }); - Events.on(ResetEvent.class, () -> { + Events.on(ResetEvent.class, event -> { for(Player player : players){ player.reset(); } @@ -133,7 +132,7 @@ public class Control extends Module{ saves.resetSave(); }); - Events.on(WaveEvent.class, () -> { + Events.on(WaveEvent.class, event -> { int last = Settings.getInt("hiscore" + world.getMap().name, 0); @@ -146,7 +145,7 @@ public class Control extends Module{ Platform.instance.updateRPC(); }); - Events.on(GameOverEvent.class, () -> { + Events.on(GameOverEvent.class, event -> { //delete saves for game-over sectors if(world.getSector() != null && world.getSector().hasSave()){ world.getSector().getSave().delete(); @@ -159,7 +158,7 @@ public class Control extends Module{ }); }); - Events.on(WorldLoadEvent.class, () -> threads.runGraphics(() -> Events.fire(WorldLoadGraphicsEvent.class))); + Events.on(WorldLoadEvent.class, event -> threads.runGraphics(() -> Events.fire(new WorldLoadGraphicsEvent()))); } public void addPlayer(int index){ diff --git a/core/src/io/anuke/mindustry/core/GameState.java b/core/src/io/anuke/mindustry/core/GameState.java index a38a46e01f..4e20c5ba75 100644 --- a/core/src/io/anuke/mindustry/core/GameState.java +++ b/core/src/io/anuke/mindustry/core/GameState.java @@ -19,7 +19,7 @@ public class GameState{ private State state = State.menu; public void set(State astate){ - Events.fire(StateChangeEvent.class, state, astate); + Events.fire(new StateChangeEvent(state, astate)); state = astate; } diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index 658b2ff74a..dea47a7e3d 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -65,7 +65,7 @@ public class Logic extends Module{ } } - Events.fire(PlayEvent.class); + Events.fire(new PlayEvent()); } public void reset(){ @@ -78,7 +78,7 @@ public class Logic extends Module{ Entities.clear(); TileEntity.sleepingEntities = 0; - Events.fire(ResetEvent.class); + Events.fire(new ResetEvent()); } public void runWave(){ @@ -86,14 +86,14 @@ public class Logic extends Module{ state.wave++; state.wavetime = wavespace * state.difficulty.timeScaling; - Events.fire(WaveEvent.class); + Events.fire(new WaveEvent()); } //this never triggers in PvP; only for checking sector game-overs private void checkGameOver(){ if(state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){ state.gameOver = true; - Events.fire(GameOverEvent.class); + Events.fire(new GameOverEvent()); } } diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 5adbbdd937..b8f43db7e3 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -193,7 +193,7 @@ public class UI extends SceneModule{ public void resize(int width, int height){ super.resize(width, height); - Events.fire(ResizeEvent.class); + Events.fire(new ResizeEvent()); } public Locale getLocale(){ diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index 94ad6f9dcd..6f0a3dd43d 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -213,7 +213,7 @@ public class World extends Module{ EntityPhysics.resizeTree(0, 0, tiles.length * tilesize, tiles[0].length * tilesize); generating = false; - Events.fire(WorldLoadEvent.class); + Events.fire(new WorldLoadEvent()); } /**Loads up a sector map. This does not call play(), but calls reset().*/ @@ -279,7 +279,7 @@ public class World extends Module{ public void notifyChanged(Tile tile){ if(!generating){ - threads.runDelay(() -> Events.fire(TileChangeEvent.class, tile)); + threads.runDelay(() -> Events.fire(new TileChangeEvent(tile))); } } diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java index ca2a4d7ac3..b161693312 100644 --- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java +++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java @@ -268,11 +268,11 @@ public class Drone extends FlyingUnit implements BuilderTrait{ private static void initEvents(){ if(initialized) return; - Events.on(BlockBuildEvent.class, (team, tile) -> { - EntityGroup group = unitGroups[team.ordinal()]; + Events.on(BlockBuildEvent.class, event -> { + EntityGroup group = unitGroups[event.team.ordinal()]; - if(!(tile.entity instanceof BuildEntity)) return; - BuildEntity entity = tile.entity(); + if(!(event.tile.entity instanceof BuildEntity)) return; + BuildEntity entity = event.tile.entity(); for(BaseUnit unit : group.all()){ if(unit instanceof Drone){ diff --git a/core/src/io/anuke/mindustry/game/ContentDatabase.java b/core/src/io/anuke/mindustry/game/ContentDatabase.java index a325786546..a5b1e82056 100644 --- a/core/src/io/anuke/mindustry/game/ContentDatabase.java +++ b/core/src/io/anuke/mindustry/game/ContentDatabase.java @@ -48,7 +48,7 @@ public class ContentDatabase{ //fire unlock event so other classes can use it if(ret){ content.onUnlock(); - Events.fire(UnlockEvent.class, content); + Events.fire(new UnlockEvent(content)); dirty = true; } diff --git a/core/src/io/anuke/mindustry/game/EventType.java b/core/src/io/anuke/mindustry/game/EventType.java index ec880f3be9..6b781a01e2 100644 --- a/core/src/io/anuke/mindustry/game/EventType.java +++ b/core/src/io/anuke/mindustry/game/EventType.java @@ -6,64 +6,78 @@ import io.anuke.ucore.function.Event; public class EventType{ - public interface PlayEvent extends Event{ - void handle(); + public static class PlayEvent implements Event{ + } - public interface ResetEvent extends Event{ - void handle(); + public static class ResetEvent implements Event{ + } - public interface WaveEvent extends Event{ - void handle(); + public static class WaveEvent implements Event{ + } - public interface GameOverEvent extends Event{ - void handle(); + public static class GameOverEvent implements Event{ + } /** * This event is called from the logic thread. * DO NOT INITIALIZE GRAPHICS HERE. */ - public interface WorldLoadEvent extends Event{ - void handle(); + public static class WorldLoadEvent implements Event{ + } /** * Called after the WorldLoadEvent is, and all logic has been loaded. * It is safe to intialize graphics here. */ - public interface WorldLoadGraphicsEvent extends Event{ - void handle(); + public static class WorldLoadGraphicsEvent implements Event{ + } /** * Called from the logic thread. Do not access graphics here! */ - public interface TileChangeEvent extends Event{ - void handle(Tile tile); + public static class TileChangeEvent implements Event{ + public final Tile tile; + + public TileChangeEvent(Tile tile){ + this.tile = tile; + } } - //TODO unimplemented; remove? - public interface TileRemoveEvent extends Event{ - void handle(Tile tile, Team oldTeam); + public static class StateChangeEvent implements Event{ + public final State from, to; + + public StateChangeEvent(State from, State to){ + this.from = from; + this.to = to; + } } - public interface StateChangeEvent extends Event{ - void handle(State from, State to); + public static class UnlockEvent implements Event{ + public final Content content; + + public UnlockEvent(Content content){ + this.content = content; + } } - public interface UnlockEvent extends Event{ - void handle(Content content); + public static class BlockBuildEvent implements Event{ + public final Tile tile; + public final Team team; + + public BlockBuildEvent(Tile tile, Team team){ + this.tile = tile; + this.team = team; + } } - public interface BlockBuildEvent extends Event{ - void handle(Team team, Tile tile); - } + public static class ResizeEvent implements Event{ - public interface ResizeEvent extends Event{ - void handle(); } } diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java index e764b79a77..ec2475c7ba 100644 --- a/core/src/io/anuke/mindustry/game/Saves.java +++ b/core/src/io/anuke/mindustry/game/Saves.java @@ -31,8 +31,8 @@ public class Saves{ private long lastTimestamp; public Saves(){ - Events.on(StateChangeEvent.class, (prev, state) -> { - if(state == State.menu){ + Events.on(StateChangeEvent.class, event -> { + if(event.to == State.menu){ threads.run(() -> { totalPlaytime = 0; lastTimestamp = 0; diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index d21d2feb06..7779aa3958 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -40,18 +40,18 @@ public class BlockRenderer{ requests.set(i, new BlockRequest()); } - Events.on(WorldLoadGraphicsEvent.class, () -> { + Events.on(WorldLoadGraphicsEvent.class, event -> { lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated }); - Events.on(TileChangeEvent.class, tile -> { + Events.on(TileChangeEvent.class, event -> { threads.runGraphics(() -> { int avgx = Mathf.scl(camera.position.x, tilesize); int avgy = Mathf.scl(camera.position.y, tilesize); int rangex = (int) (camera.viewportWidth * camera.zoom / tilesize / 2) + 2; int rangey = (int) (camera.viewportHeight * camera.zoom / tilesize / 2) + 2; - if(Math.abs(avgx - tile.x) <= rangex && Math.abs(avgy - tile.y) <= rangey){ + if(Math.abs(avgx - event.tile.x) <= rangex && Math.abs(avgy - event.tile.y) <= rangey){ lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated } }); diff --git a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java index b075de6bac..1081ca6075 100644 --- a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java @@ -42,7 +42,7 @@ public class FloorRenderer{ private IntArray drawnLayers = new IntArray(); public FloorRenderer(){ - Events.on(WorldLoadGraphicsEvent.class, this::clearTiles); + Events.on(WorldLoadGraphicsEvent.class, event -> clearTiles()); gutterTile = new Tile(0, 0){ @Override diff --git a/core/src/io/anuke/mindustry/graphics/FogRenderer.java b/core/src/io/anuke/mindustry/graphics/FogRenderer.java index 42e819b63f..b3854361db 100644 --- a/core/src/io/anuke/mindustry/graphics/FogRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/FogRenderer.java @@ -40,7 +40,7 @@ public class FogRenderer implements Disposable{ private boolean dirty; public FogRenderer(){ - Events.on(WorldLoadGraphicsEvent.class, () -> { + Events.on(WorldLoadGraphicsEvent.class, event -> { dispose(); padding = world.getSector() != null ? mapPadding + extraPadding : 0; @@ -66,9 +66,9 @@ public class FogRenderer implements Disposable{ dirty = true; }); - Events.on(TileChangeEvent.class, tile -> threads.runGraphics(() -> { - if(tile.getTeam() == players[0].getTeam() && tile.block().synthetic() && tile.block().viewRange > 0){ - changeQueue.add(tile); + Events.on(TileChangeEvent.class, event -> threads.runGraphics(() -> { + if(event.tile.getTeam() == players[0].getTeam() && event.tile.block().synthetic() && event.tile.block().viewRange > 0){ + changeQueue.add(event.tile); } })); } diff --git a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java index 89bb5ede2f..1e002fb5c7 100644 --- a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java @@ -39,13 +39,13 @@ public class MinimapRenderer implements Disposable{ private int zoom = 4; public MinimapRenderer(){ - Events.on(WorldLoadGraphicsEvent.class, () -> { + Events.on(WorldLoadGraphicsEvent.class, event -> { reset(); updateAll(); }); //make sure to call on the graphics thread - Events.on(TileChangeEvent.class, tile -> Gdx.app.postRunnable(() -> update(tile))); + Events.on(TileChangeEvent.class, event -> Gdx.app.postRunnable(() -> update(event.tile))); } public Texture getTexture(){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java index 16ba45bcff..31ffae453a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java @@ -34,7 +34,7 @@ public class FloatingDialog extends Dialog{ } protected void onResize(Runnable run){ - Events.on(ResizeEvent.class, () -> { + Events.on(ResizeEvent.class, event -> { if(isShown()){ run.run(); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index c3407ec336..d61e9619d5 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -89,14 +89,12 @@ public class BlocksFragment extends Fragment{ }).bottom().right().get(); }); - Events.on(WorldLoadEvent.class, this::rebuild); + Events.on(WorldLoadEvent.class, event -> rebuild()); rebuild(); } - /** - * Rebuilds the whole placement menu, attempting to preserve previous state. - */ + /**Rebuilds the whole placement menu, attempting to preserve previous state.*/ void rebuild(){ selectTable.clear(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index f606b7b9ea..1605c2755b 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -138,8 +138,8 @@ public class HudFragment extends Fragment{ parent.fill(t -> { float notifDuration = 240f; - Events.on(StateChangeEvent.class, (from, to) -> { - if(to == State.menu || from == State.menu){ + Events.on(StateChangeEvent.class, event -> { + if(event.to == State.menu || event.from == State.menu){ coreAttackTime = 0f; lastCoreHP = Float.NaN; } diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index 0fb7ea9d2e..4a88709e8b 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -27,7 +27,7 @@ public class MenuFragment extends Fragment{ buildDesktop(); }else{ buildMobile(); - Events.on(ResizeEvent.class, this::buildMobile); + Events.on(ResizeEvent.class, event -> buildMobile()); } }); diff --git a/core/src/io/anuke/mindustry/world/Build.java b/core/src/io/anuke/mindustry/world/Build.java index 727682165d..549719cdea 100644 --- a/core/src/io/anuke/mindustry/world/Build.java +++ b/core/src/io/anuke/mindustry/world/Build.java @@ -99,7 +99,7 @@ public class Build{ } - threads.runDelay(() -> Events.fire(BlockBuildEvent.class, team, tile)); + threads.runDelay(() -> Events.fire(new BlockBuildEvent(tile, team))); } /**Returns whether a tile can be placed at this location by this team.*/ diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index aaf2adf2a5..d7e8bc829a 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -94,7 +94,7 @@ public class ServerControl extends Module{ "&lrWARNING: &lyIt is highly advised to specify which version you're using by building with gradle args &lc-Pbuildversion=&lm&ly so that clients know which version you are using."); } - Events.on(GameOverEvent.class, () -> { + Events.on(GameOverEvent.class, event -> { if(inExtraRound) return; info("Game over!");