From ce75be6204914557a172e8f77b25bc33431f4a6b Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 25 Sep 2017 19:48:24 -0400 Subject: [PATCH] Fixed save crash --- core/src/io/anuke/mindustry/Renderer.java | 6 ++++++ core/src/io/anuke/mindustry/UI.java | 2 +- .../mindustry/entities/enemies/Enemy.java | 2 +- .../mindustry/entities/enemies/TankEnemy.java | 3 ++- .../anuke/mindustry/input/AndroidInput.java | 7 ++++--- core/src/io/anuke/mindustry/io/SaveIO.java | 12 ++++++++++-- .../src/io/anuke/mindustry/ui/SaveDialog.java | 13 +++++++++---- .../mindustry/world/blocks/types/Drill.java | 5 +++-- desktop/mindustry-saves/0.mins | Bin 1140 -> 5089 bytes desktop/mindustry-saves/2.mins | Bin 0 -> 362 bytes 10 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 desktop/mindustry-saves/2.mins diff --git a/core/src/io/anuke/mindustry/Renderer.java b/core/src/io/anuke/mindustry/Renderer.java index 6933d9ad13..6496823282 100644 --- a/core/src/io/anuke/mindustry/Renderer.java +++ b/core/src/io/anuke/mindustry/Renderer.java @@ -126,6 +126,12 @@ public class Renderer extends RendererModule{ //render the entire map if(floorCache == null || floorCache.length != chunksx || floorCache[0].length != chunksy){ floorCache = new Cache[chunksx][chunksy]; + + for(int x = 0; x < chunksx; x ++){ + for(int y = 0; y < chunksy; y ++){ + renderCache(x, y); + } + } } OrthographicCamera camera = Core.camera; diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 142e10fe6b..11c9c129cf 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -435,7 +435,7 @@ public class UI extends SceneModule{ new table(){{ new table("pane"){{ - new label(()->"Respawning in " + (int)(control.getRespawnTime()/60)).scale(0.75f).pad(10); + new label(()->"[orange]Respawning in " + (int)(control.getRespawnTime()/60)).scale(0.75f).pad(10); visible(()->control.getRespawnTime() > 0 && !GameState.is(State.menu)); diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 133b58ea97..332667fa3e 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -161,7 +161,6 @@ public class Enemy extends DestructibleEntity{ @Override public void draw(){ - Draw.color(); String region = ClassReflection.getSimpleName(getClass()).toLowerCase() + "-t" + Mathf.clamp(tier, 1, 3); @@ -170,6 +169,7 @@ public class Enemy extends DestructibleEntity{ Draw.getShader(Outline.class).region = Draw.region(region); Draw.shader(Outline.class); + Draw.color(); Draw.rect(region, x, y, direction.angle()-90); Draw.shader(); } diff --git a/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java b/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java index 52a95bbb59..75c43a8ac7 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/TankEnemy.java @@ -14,12 +14,13 @@ public class TankEnemy extends Enemy{ speed = 0.2f; reload = 90f; bullet = BulletType.small; + length = 3f; } void shoot(){ vector.set(length, 0).rotate(direction.angle()); - Angles.shotgun(3, 4f, direction.angle(), f->{ + Angles.shotgun(3, 8f, direction.angle(), f->{ Bullet out = new Bullet(bullet, this, x+vector.x, y+vector.y, f).add(); out.damage = (int)(damage*Vars.multiplier); }); diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java index 78bfadbb40..ccb784514d 100644 --- a/core/src/io/anuke/mindustry/input/AndroidInput.java +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -14,6 +14,7 @@ import io.anuke.mindustry.world.World; import io.anuke.mindustry.world.blocks.Blocks; import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.ucore.core.*; +import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.util.Mathf; public class AndroidInput extends InputAdapter{ @@ -101,7 +102,7 @@ public class AndroidInput extends InputAdapter{ public static void doInput(){ if(Gdx.input.isTouched(0) - && Mathf.near2d(lmousex, lmousey, Gdx.input.getX(0), Gdx.input.getY(0), 50) + && Mathf.near2d(lmousex, lmousey, Gdx.input.getX(0), Gdx.input.getY(0), Unit.dp.inPixels(50)) && !ui.hasMouse() /*&& (player.recipe == null || mode == PlaceMode.touch)*/){ warmup += Timers.delta(); @@ -127,8 +128,8 @@ public class AndroidInput extends InputAdapter{ mousey = ly; }else{ warmup = 0; - lmousex = Gdx.input.getX(0); - lmousey = Gdx.input.getY(0); + //lmousex = Gdx.input.getX(0); + //lmousey = Gdx.input.getY(0); player.breaktime = 0; mousex = Mathf.clamp(mousex, 0, Gdx.graphics.getWidth()); diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index ab25f56b3f..a65eef4d87 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -59,6 +59,7 @@ import io.anuke.ucore.entities.Entity; * spawn lane (byte) * x (float) * y (float) + * tier (byte) * health (int) * * @@ -82,7 +83,7 @@ import io.anuke.ucore.entities.Entity; */ public class SaveIO{ /**Save file version ID. Should be incremented every breaking release.*/ - private static final int fileVersionID = 6; + private static final int fileVersionID = 7; private static FormatProvider provider = null; @@ -91,7 +92,11 @@ public class SaveIO{ Enemy.class, FastEnemy.class, RapidEnemy.class, - FlamerEnemy.class + FlamerEnemy.class, + TankEnemy.class, + BlastEnemy.class, + MortarEnemy.class, + TestEnemy.class ); private static final ObjectMap, Byte> idEnemies = new ObjectMap, Byte>(){{ @@ -186,6 +191,7 @@ public class SaveIO{ stream.writeByte(enemy.spawn); //lane stream.writeFloat(enemy.x); //x stream.writeFloat(enemy.y); //y + stream.writeByte(enemy.tier); //tier stream.writeInt(enemy.health); //health } } @@ -308,6 +314,7 @@ public class SaveIO{ int lane = stream.readByte(); float x = stream.readFloat(); float y = stream.readFloat(); + byte tier = stream.readByte(); int health = stream.readInt(); try{ @@ -315,6 +322,7 @@ public class SaveIO{ enemy.health = health; enemy.x = x; enemy.y = y; + enemy.tier = tier; enemy.add(); enemiesToUpdate.add(enemy); }catch (Exception e){ diff --git a/core/src/io/anuke/mindustry/ui/SaveDialog.java b/core/src/io/anuke/mindustry/ui/SaveDialog.java index ec3df63741..89e555c3a4 100644 --- a/core/src/io/anuke/mindustry/ui/SaveDialog.java +++ b/core/src/io/anuke/mindustry/ui/SaveDialog.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.ui; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; +import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.SaveIO; @@ -68,13 +69,17 @@ public class SaveDialog extends Dialog{ @Override public void run(){ hide(); + Vars.ui.hideLoading(); try{ SaveIO.saveToSlot(slot); - }catch (Exception e){ - Vars.ui.showError("[orange]Failed to save game!"); - return; + }catch (Throwable e){ + e = (e.getCause() == null ? e : e.getCause()); + + Vars.ui.showError("[orange]Failed to save game!\n[white]" + + ClassReflection.getSimpleName(e.getClass()) + ": " + e.getMessage() + "\n" + + "at " + e.getStackTrace()[0].getFileName() + ":"+ e.getStackTrace()[0].getLineNumber()); } - Vars.ui.hideLoading(); + } }, 5f/60f); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Drill.java b/core/src/io/anuke/mindustry/world/blocks/types/Drill.java index 54d0374b91..720401bebd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/Drill.java @@ -21,8 +21,9 @@ public class Drill extends Block{ @Override public void update(Tile tile){ - - if(tile.floor() == resource && Timers.get(tile, 60 * time)){ + + //drills can only hold up to 10 items at a time + if(tile.floor() == resource && Timers.get(tile, 60 * time) && tile.entity.totalItems() < 10){ offloadNear(tile, result); Effects.effect("spark", tile.worldx(), tile.worldy()); } diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index da7b8173529a0de6d776f5b78a9627dfbb42a8a4..5e0bc3db65cc28becbd611802b2d13125308b729 100644 GIT binary patch literal 5089 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 diff --git a/desktop/mindustry-saves/2.mins b/desktop/mindustry-saves/2.mins new file mode 100644 index 0000000000000000000000000000000000000000..d52c495f97acf62a5872e4704553b0be0fbdfc3d GIT binary patch literal 362 zcmZQzU|?flV2si~y0AZ-;F7J$2j(%k_}~BQl4-LK%wupi_wjTo zNlXOuKq^gKa?XW=c}y<;Z>PCr?l1=N7#WhgvaFK z+a~7{{N4*B$H3rhcQnW)XBHbsAK3QmE`>t3z&s`w|D)GjG6F(DJVplRK!1LhNbfHo zeIPSm_PIoysRHwuT>PYMTq4bGgLn)K&ZcJ{xs-m81?dBudD*2fJ_XEUatRP9aLM`# ovfYT0!Pzh7noCTq14tjp%%|EeiJAgn9+Qjj%W9YK;-w%S0H^X-YXATM literal 0 HcmV?d00001