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|?flV2ssKbbX(S`lt1ea`0J}{5T#sB_amrR>|U>;DVkEcsXVj^6n ziA&D8aG1)s(_Aul7=w6>49;HL?ztprya4j#7=dQKh;@lP58*Mn__oQp1i$wJ$pLM* zI~wGYGYjYssO{HX3WaWgc|hBbUUSI^2nF$gW(NB6yF_|_0qFyo`LfR?;!G8o$K>KC zZQ~MYb{oV4nrV9WkxS_ZS&%-kk1o3u#;1UJOfCTe1uj`%LAHa;^ozOX5)gpB literal 0 HcmV?d00001