From 8e676494e3bd098d1739d245fa04df6916ff0107 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 9 Jan 2018 13:19:36 -0500 Subject: [PATCH] Changes to save importing, player sync fix, autosave on death fix --- core/assets-raw/sprites/weapons/blaster.png | Bin 253 -> 253 bytes core/assets/bundles/bundle.properties | 2 +- core/assets/sprites/sprites.png | Bin 82109 -> 82109 bytes core/src/io/anuke/mindustry/core/Control.java | 5 +++ .../io/anuke/mindustry/core/GameState.java | 2 +- .../src/io/anuke/mindustry/core/Renderer.java | 1 - core/src/io/anuke/mindustry/core/World.java | 3 +- .../io/anuke/mindustry/entities/Player.java | 9 ++-- .../mindustry/entities/effect/Shield.java | 2 +- core/src/io/anuke/mindustry/io/NetworkIO.java | 2 + core/src/io/anuke/mindustry/io/Saves.java | 12 ++++- core/src/io/anuke/mindustry/net/Syncable.java | 8 +++- .../mindustry/ui/dialogs/LevelDialog.java | 5 +++ .../mindustry/ui/dialogs/LoadDialog.java | 42 +++++++++--------- .../mindustry/ui/dialogs/RestartDialog.java | 6 +-- .../io/anuke/mindustry/world/Generator.java | 2 +- .../world/blocks/types/defense/CoreBlock.java | 2 +- .../blocks/types/production/Smelter.java | 24 +++++----- kryonet/src/io/anuke/kryonet/KryoServer.java | 3 +- 19 files changed, 77 insertions(+), 53 deletions(-) diff --git a/core/assets-raw/sprites/weapons/blaster.png b/core/assets-raw/sprites/weapons/blaster.png index f26a1d8bb7ad51f7b23268d23ec9dcfbf1801d80..b677a58bcdac176306b37e56c88e585ccd57d41f 100644 GIT binary patch delta 144 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 delta 11008 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 Z;&_2AHL)pN4g~CniJ`eciJtqd{|E6J#9IIW diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 2b21075d41..3ee8003968 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -22,6 +22,7 @@ import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.ucore.UCore; import io.anuke.ucore.core.*; import io.anuke.ucore.core.Inputs.Axis; @@ -406,6 +407,10 @@ public class Control extends Module{ Timers.run(60, ()-> ui.restart.show()); } + + public boolean isGameOver(){ + return core.block() != ProductionBlocks.core; + } float waveSpacing(){ int scale = Settings.getInt("difficulty"); diff --git a/core/src/io/anuke/mindustry/core/GameState.java b/core/src/io/anuke/mindustry/core/GameState.java index 2d8d489f82..c4b1951573 100644 --- a/core/src/io/anuke/mindustry/core/GameState.java +++ b/core/src/io/anuke/mindustry/core/GameState.java @@ -20,6 +20,6 @@ public class GameState{ } public enum State{ - paused, playing, menu, dead + paused, playing, menu } } diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 2e24248672..bdea17f52f 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -107,7 +107,6 @@ public class Renderer extends RendererModule{ } if(control.core.block() == ProductionBlocks.core){ - if(!smoothcam){ setCamera(player.x, player.y); }else{ diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index c50be11177..67466f984f 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -185,8 +185,7 @@ public class World extends Module{ Generator.generate(map.pixmap, tiles); if(control.getCore() == null) return; - - //TODO multiblock core + control.getInput().placeBlock(control.getCore().x, control.getCore().y, ProductionBlocks.core, 0, false, false); if(!map.name.equals("tutorial")){ diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 412b38db19..ab5523fe69 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -29,6 +29,7 @@ public class Player extends DestructibleEntity implements Syncable{ public float angle; public transient float targetAngle = 0f; + public transient boolean dashing = false; public transient int clientid; public transient boolean isLocal = false; @@ -70,7 +71,7 @@ public class Player extends DestructibleEntity implements Syncable{ Effects.shake(4f, 5f, this); Effects.sound("die", this); - //TODO respawning doesn't work for multiplayer + //TODO respawning doesn't work properly for multiplayer at all if(isLocal) { Vars.control.setRespawnTime(respawnduration); ui.hudfrag.fadeRespawn(true); @@ -119,8 +120,10 @@ public class Player extends DestructibleEntity implements Syncable{ if(!isDead() && !isLocal) inter.update(this); return; } + + dashing = Inputs.keyDown("dash"); - float speed = Inputs.keyDown("dash") ? Player.dashSpeed : Player.speed; + float speed = dashing ? Player.dashSpeed : Player.speed; if(health < maxhealth && Timers.get(this, "regen", 50)) health ++; @@ -148,7 +151,7 @@ public class Player extends DestructibleEntity implements Syncable{ weaponRight.update(player, false); } - if(Inputs.keyDown("dash") && Timers.get(this, "dashfx", 3) && vector.len() > 0){ + if(dashing && Timers.get(this, "dashfx", 3) && vector.len() > 0){ Angles.translation(angle + 180, 3f); Effects.effect(Fx.dashsmoke, x + Angles.x(), y + Angles.y()); } diff --git a/core/src/io/anuke/mindustry/entities/effect/Shield.java b/core/src/io/anuke/mindustry/entities/effect/Shield.java index f2feb7b46f..8f6219c88f 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Shield.java +++ b/core/src/io/anuke/mindustry/entities/effect/Shield.java @@ -68,7 +68,7 @@ public class Shield extends Entity{ @Override public void draw(){ - if(!(tile.block() instanceof ShieldBlock)){ + if(!(tile.block() instanceof ShieldBlock) || radius <= 1f){ return; } diff --git a/core/src/io/anuke/mindustry/io/NetworkIO.java b/core/src/io/anuke/mindustry/io/NetworkIO.java index db108fcbc3..143a0fa896 100644 --- a/core/src/io/anuke/mindustry/io/NetworkIO.java +++ b/core/src/io/anuke/mindustry/io/NetworkIO.java @@ -228,6 +228,8 @@ public class NetworkIO { Vars.world.loadMap(Vars.world.maps().getMap(mapid), seed); Vars.renderer.clearTiles(); + Vars.player.set(Vars.control.getCore().worldx(), Vars.control.getCore().worldy()); + for(int x = 0; x < Vars.world.width(); x ++){ for(int y = 0; y < Vars.world.height(); y ++){ Tile tile = Vars.world.tile(x, y); diff --git a/core/src/io/anuke/mindustry/io/Saves.java b/core/src/io/anuke/mindustry/io/Saves.java index 61374e4506..ed3c3bc8fa 100644 --- a/core/src/io/anuke/mindustry/io/Saves.java +++ b/core/src/io/anuke/mindustry/io/Saves.java @@ -45,7 +45,7 @@ public class Saves { } public void update(){ - if(!GameState.is(State.menu) && !GameState.is(State.dead) && current != null && current.isAutosave()){ + if(!GameState.is(State.menu) && !Vars.control.isGameOver() && current != null && current.isAutosave()){ time += Timers.delta(); if(time > Settings.getInt("saveinterval")*60) { saving = true; @@ -85,6 +85,16 @@ public class Saves { current = slot; } + public void importSave(FileHandle file) throws IOException{ + SaveSlot slot = new SaveSlot(nextSlot); + slot.importFile(file); + nextSlot ++; + slot.setName(file.nameWithoutExtension()); + saves.add(slot); + slot.meta = SaveIO.getData(slot.index); + current = slot; + } + public Array getSaveSlots(){ return saves; } diff --git a/core/src/io/anuke/mindustry/net/Syncable.java b/core/src/io/anuke/mindustry/net/Syncable.java index 62e07e26d8..8347991acc 100644 --- a/core/src/io/anuke/mindustry/net/Syncable.java +++ b/core/src/io/anuke/mindustry/net/Syncable.java @@ -24,7 +24,7 @@ public interface Syncable { public static final SyncType player = new SyncType() { @Override public float[] write(Player entity) { - return new float[]{entity.x, entity.y, entity.angle, entity.health}; + return new float[]{entity.x, entity.y, entity.angle, entity.health, entity.dashing ? 1f : -1f}; } @Override @@ -32,6 +32,7 @@ public interface Syncable { entity.getInterpolator().target.set(data[0], data[1]); entity.getInterpolator().targetrot = data[2]; entity.health = (int)data[3]; + entity.dashing = data[4] > 0; } @Override @@ -46,6 +47,11 @@ public interface Syncable { Effects.effect(Fx.dashsmoke, entity.x + Angles.x(), entity.y + Angles.y()); } + if(entity.dashing && Timers.get(entity, "dashfx", 3)){ + Angles.translation(entity.angle + 180, 3f); + Effects.effect(Fx.dashsmoke, entity.x + Angles.x(), entity.y + Angles.y()); + } + entity.x = Mathf.lerpDelta(entity.x, i.target.x, 0.4f); entity.y = Mathf.lerpDelta(entity.y, i.target.y, 0.4f); entity.angle = Mathf.lerpAngDelta(entity.angle, i.targetrot, 0.6f); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LevelDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LevelDialog.java index 183559d9f8..c232052ca6 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LevelDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LevelDialog.java @@ -65,6 +65,11 @@ public class LevelDialog extends FloatingDialog{ if(i % maxwidth == 0){ maps.row(); } + + //TODO this is a hack + if(!Settings.has("hiscore" + map.name)){ + Settings.defaults("hiscore" + map.name, 1); + } Table inset = new Table("pane-button"); inset.add("[accent]" + Bundles.get("map."+map.name+".name", map.name)).pad(3f); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 356e0cd369..983a8ca43a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -89,24 +89,6 @@ public class LoadDialog extends FloatingDialog{ dialog.content().row(); - dialog.content().addImageTextButton("$text.save.import", "icon-save", 14*3, () -> { - new FileChooser("$text.save.import", f -> f.extension().equals("mins"), true, file -> { - if(SaveIO.isSaveValid(file)){ - try{ - slot.importFile(file); - setup(); - }catch (IOException e){ - Vars.ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false))); - } - }else{ - Vars.ui.showError("$text.save.import.invalid"); - } - dialog.hide(); - }).show(); - }); - - dialog.content().row(); - dialog.content().addImageTextButton("$text.save.export", "icon-load", 14*3, () -> { new FileChooser("$text.save.export", false, file -> { try{ @@ -151,11 +133,29 @@ public class LoadDialog extends FloatingDialog{ } public void addSetup(){ - if(Vars.control.getSaves().getSaveSlots().size != 0) return; + if(Vars.control.getSaves().getSaveSlots().size == 0) { + + slots.row(); + slots.addButton("$text.save.none", "clear", () -> { + }).disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f); + } slots.row(); - slots.addButton("$text.save.none", "clear", ()->{}) - .disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f); + + slots.addImageTextButton("$text.save.import", "icon-add", "clear", 14*3, () -> { + new FileChooser("$text.save.import", f -> f.extension().equals("mins"), true, file -> { + if(SaveIO.isSaveValid(file)){ + try{ + Vars.control.getSaves().importSave(file); + setup(); + }catch (IOException e){ + Vars.ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false))); + } + }else{ + Vars.ui.showError("$text.save.import.invalid"); + } + }).show(); + }).fillX().margin(10f).minWidth(300f).height(70f).pad(4f).padRight(-4); } public void modifyButton(TextButton button, SaveSlot slot){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/RestartDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/RestartDialog.java index 1b52b6985c..6ec166071c 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/RestartDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/RestartDialog.java @@ -11,14 +11,14 @@ public class RestartDialog extends Dialog { public RestartDialog(){ super("$text.gameover", "dialog"); - shown(()->{ + shown(() -> { content().clearChildren(); if(control.isHighScore()){ content().add("$text.highscore").pad(6); content().row(); } content().add("$text.lasted").pad(12).get(); - content().add("[GREEN]" + control.getWave()); + content().add("[accent]" + control.getWave()); pack(); }); @@ -26,6 +26,6 @@ public class RestartDialog extends Dialog { hide(); GameState.set(State.menu); control.reset(); - }); + }).size(130f, 60f); } } diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index aa1336303f..f54420deb5 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -26,7 +26,7 @@ public class Generator{ /**Returns world size.*/ public static void generate(Pixmap pixmap, Tile[][] tiles){ - boolean hasenemies = true, hascore = false;; + boolean hasenemies = true, hascore = false; Noise.setSeed(Vars.world.getSeed()); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/CoreBlock.java index 5216e7a517..12c983a4e7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/CoreBlock.java @@ -19,7 +19,7 @@ public class CoreBlock extends Block { @Override public int handleDamage(Tile tile, int amount){ - return Vars.debug ? 0 : amount; + return Vars.debug ? amount : amount; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java index f0bea03f46..c807d75f50 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Smelter.java @@ -29,7 +29,7 @@ public class Smelter extends Block{ protected float burnDuration = 60f; //by default, the fuel will burn 60 frames, so that's 2 items/fuel at most protected Effect craftEffect = Fx.smelt, burnEffect = Fx.fuelburn; - protected int capacity = 30; + protected int capacity = 20; public Smelter(String name) { super(name); @@ -92,15 +92,16 @@ public class Smelter extends Block{ @Override public boolean acceptItem(Item item, Tile tile, Tile source){ - int amount = 0; boolean isInput = false; for(Item req : inputs){ - if(req == item) isInput = true; - amount += tile.entity.getItem(req); + if(req == item){ + isInput = true; + break; + } } - return (isInput && amount < capacity) || (item == fuel && tile.entity.getItem(fuel) < capacity); + return (isInput && tile.entity.getItem(item) < capacity) || (item == fuel && tile.entity.getItem(fuel) < capacity); } @Override @@ -120,17 +121,12 @@ public class Smelter extends Block{ @Override public void drawSelect(Tile tile){ - //all required items are put into one big capacity buffer - int totalCapacity = capacity; - int amount = 0; + //draw a separate bar for each requirement + for(int i = 0; i < inputs.length; i ++){ + float fract = ((float)tile.entity.getItem(inputs[i]))/capacity; - for(Item item : inputs){ - amount += tile.entity.getItem(item); + Vars.renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 6 + i*4, fract); } - - float fract = ((float)amount)/totalCapacity; - - Vars.renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 6, fract); } @Override diff --git a/kryonet/src/io/anuke/kryonet/KryoServer.java b/kryonet/src/io/anuke/kryonet/KryoServer.java index c4d4f92426..14166f0e6b 100644 --- a/kryonet/src/io/anuke/kryonet/KryoServer.java +++ b/kryonet/src/io/anuke/kryonet/KryoServer.java @@ -136,6 +136,7 @@ public class KryoServer implements ServerProvider { @Override public void sendStream(int id, Streamable stream) { Connection connection = getByID(id); + UCore.log("Sending stream: " + stream.getClass().getSimpleName() + " / " + stream.stream.available()); connection.addListener(new InputStreamSender(stream.stream, 512) { int id; @@ -147,14 +148,12 @@ public class KryoServer implements ServerProvider { begin.type = stream.getClass(); connection.sendTCP(begin); id = begin.id; - UCore.log("Sending begin packet: " + begin); } protected Object next (byte[] bytes) { StreamChunk chunk = new StreamChunk(); chunk.id = id; chunk.data = bytes; - UCore.log("Sending chunk of size " + chunk.data.length); return chunk; //wrap the byte[] with an object so the receiving side knows how to handle it. } });