From e112e3f949750ad65e6bafe56a8b65aea0c931c7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 24 Feb 2019 10:39:59 -0500 Subject: [PATCH] Removed most units from tech tree / Bugfixes / Balancing --- .../io/anuke/mindustry/ai/WaveSpawner.java | 1 + .../io/anuke/mindustry/content/TechTree.java | 20 +++++-------------- .../io/anuke/mindustry/content/UnitTypes.java | 6 +++--- .../io/anuke/mindustry/core/NetClient.java | 10 +++++----- .../src/io/anuke/mindustry/core/Platform.java | 5 ++--- .../entities/effect/RubbleDecal.java | 6 +++++- .../entities/effect/ScorchDecal.java | 1 + .../io/anuke/mindustry/input/MobileInput.java | 2 +- .../src/io/anuke/mindustry/net/NetworkIO.java | 4 ---- .../mindustry/ui/dialogs/PausedDialog.java | 2 ++ .../mindustry/ui/fragments/HudFragment.java | 2 ++ .../ui/fragments/PlacementFragment.java | 3 ++- .../world/blocks/distribution/ItemBridge.java | 7 ++++--- 13 files changed, 33 insertions(+), 36 deletions(-) diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index 005712e733..c32006b4de 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -102,6 +102,7 @@ public class WaveSpawner{ } private void reset(){ + flySpawns.clear(); groundSpawns.clear(); groups = state.rules.spawns; diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/io/anuke/mindustry/content/TechTree.java index 4b7a9cbc81..288b10cbbf 100644 --- a/core/src/io/anuke/mindustry/content/TechTree.java +++ b/core/src/io/anuke/mindustry/content/TechTree.java @@ -234,6 +234,10 @@ public class TechTree implements ContentList{ node(alphaDartPad, () -> { node(deltaPad, () -> { + node(spiritFactory, () -> { + node(phantomFactory); + }); + node(javelinPad, () -> { node(tridentPad, () -> { node(glaivePad); @@ -246,20 +250,6 @@ public class TechTree implements ContentList{ }); }); }); - - node(spiritFactory, () -> { - node(daggerFactory, () -> { - node(titanFactory, () -> { - node(fortressFactory); - }); - node(wraithFactory, () -> { - node(phantomFactory); - node(ghoulFactory, () -> { - node(revenantFactory); - }); - }); - }); - }); }); }); }); @@ -268,7 +258,7 @@ public class TechTree implements ContentList{ private TechNode node(Block block, Runnable children){ ItemStack[] requirements = new ItemStack[block.buildRequirements.length]; for(int i = 0; i < requirements.length; i++){ - requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 40); + requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 35); } return new TechNode(block, requirements, children); diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/io/anuke/mindustry/content/UnitTypes.java index 5a5a3d8e77..36178915dd 100644 --- a/core/src/io/anuke/mindustry/content/UnitTypes.java +++ b/core/src/io/anuke/mindustry/content/UnitTypes.java @@ -236,7 +236,7 @@ public class UnitTypes implements ContentList{ }}; revenant = new UnitType("revenant", Revenant.class, Revenant::new){{ - health = 3000; + health = 1000; mass = 5f; hitsize = 20f; speed = 0.1f; @@ -266,7 +266,7 @@ public class UnitTypes implements ContentList{ }}; lich = new UnitType("lich", Revenant.class, Revenant::new){{ - health = 9000; + health = 6000; mass = 20f; hitsize = 40f; speed = 0.01f; @@ -297,7 +297,7 @@ public class UnitTypes implements ContentList{ }}; reaper = new UnitType("reaper", Revenant.class, Revenant::new){{ - health = 20000; + health = 12000; mass = 30f; hitsize = 56f; speed = 0.01f; diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 3a47eee4ff..45da7f1586 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -7,9 +7,8 @@ import io.anuke.annotations.Annotations.Variant; import io.anuke.arc.ApplicationListener; import io.anuke.arc.Core; import io.anuke.arc.collection.IntSet; -import io.anuke.mindustry.entities.Entities; -import io.anuke.mindustry.entities.EntityGroup; import io.anuke.arc.graphics.Color; +import io.anuke.arc.math.RandomXS128; import io.anuke.arc.util.Interval; import io.anuke.arc.util.Log; import io.anuke.arc.util.Time; @@ -17,10 +16,12 @@ import io.anuke.arc.util.io.ReusableByteArrayInputStream; import io.anuke.arc.util.serialization.Base64Coder; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.type.Player; +import io.anuke.mindustry.entities.Entities; +import io.anuke.mindustry.entities.EntityGroup; import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.entities.traits.SyncTrait; import io.anuke.mindustry.entities.traits.TypeTrait; +import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.game.Version; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.gen.RemoteReadClient; @@ -34,7 +35,6 @@ import io.anuke.mindustry.world.modules.ItemModule; import java.io.DataInputStream; import java.io.IOException; -import java.util.Random; import java.util.zip.InflaterInputStream; import static io.anuke.mindustry.Vars.*; @@ -364,7 +364,7 @@ public class NetClient implements ApplicationListener{ return Core.settings.getString("usid-" + ip, null); }else{ byte[] bytes = new byte[8]; - new Random().nextBytes(bytes); + new RandomXS128().nextBytes(bytes); String result = new String(Base64Coder.encode(bytes)); Core.settings.put("usid-" + ip, result); Core.settings.save(); diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index 999c57fa7f..4e7591f323 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -4,11 +4,10 @@ import io.anuke.arc.Core; import io.anuke.arc.Input.TextInput; import io.anuke.arc.files.FileHandle; import io.anuke.arc.function.Consumer; +import io.anuke.arc.math.RandomXS128; import io.anuke.arc.scene.ui.TextField; import io.anuke.arc.util.serialization.Base64Coder; -import java.util.Random; - import static io.anuke.mindustry.Vars.mobile; public abstract class Platform { @@ -49,7 +48,7 @@ public abstract class Platform { String uuid = Core.settings.getString("uuid", ""); if(uuid.isEmpty()){ byte[] result = new byte[8]; - new Random().nextBytes(result); + new RandomXS128().nextBytes(result); uuid = new String(Base64Coder.encode(result)); Core.settings.put("uuid", uuid); Core.settings.save(); diff --git a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java b/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java index 89a727da61..4dcd39a79d 100644 --- a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java +++ b/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java @@ -5,14 +5,18 @@ import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; +import static io.anuke.mindustry.Vars.headless; + public class RubbleDecal extends Decal{ - private static TextureRegion[][] regions = new TextureRegion[16][0]; + private static final TextureRegion[][] regions = new TextureRegion[16][0]; private TextureRegion region; /** * Creates a rubble effect at a position. Provide a block size to use. */ public static void create(float x, float y, int size){ + if(headless) return; + if(regions[size].length == 0){ int i = 0; for(; i < 2; i++){ diff --git a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java b/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java index b9a4d35f84..eba584b76b 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java +++ b/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java @@ -16,6 +16,7 @@ public class ScorchDecal extends Decal{ public static void create(float x, float y){ if(headless) return; + if(regions[0] == null){ for(int i = 0; i < regions.length; i++){ regions[i] = Core.atlas.find("scorch" + (i + 1)); diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index b6f7467520..dd0b0b6604 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -319,11 +319,11 @@ public class MobileInput extends InputHandler implements GestureListener{ request.redness = Mathf.lerpDelta(request.redness, 1f, 0.2f); } - drawRequest(request); //draw last placed request if(!request.remove && request == lastPlaced && request.block != null){ + Draw.alpha(0f); request.block.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.block, rotation)); } } diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java index 04375e7a15..e9bc9308f1 100644 --- a/core/src/io/anuke/mindustry/net/NetworkIO.java +++ b/core/src/io/anuke/mindustry/net/NetworkIO.java @@ -103,8 +103,6 @@ public class NetworkIO{ player.resetID(id); player.add(); - world.beginMapLoad(); - //map world.spawner.read(stream); SaveIO.getSaveWriter().readMap(stream); @@ -135,8 +133,6 @@ public class NetworkIO{ } } - world.endMapLoad(); - }catch(IOException e){ throw new RuntimeException(e); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index d6d775f3c0..77e071c8a6 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -80,6 +80,8 @@ public class PausedDialog extends FloatingDialog{ cont.row(); cont.addRowImageTextButton("$load", "icon-load", isize, load::show).disabled(b -> Net.active()); + }else{ + cont.row(); } cont.addRowImageTextButton("$hostserver.mobile", "icon-host", isize, ui.host::show).disabled(b -> Net.active()); diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index d0fb28e0e1..a811f5aa7e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -87,6 +87,8 @@ public class HudFragment extends Fragment{ }else{ ui.chatfrag.toggle(); } + }else if(world.isZone()){ + ui.tech.show(); }else{ ui.database.show(); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index d6b9cfd5fa..22cb49fb20 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -10,6 +10,7 @@ import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.scene.Group; import io.anuke.arc.scene.actions.Actions; import io.anuke.arc.scene.event.Touchable; +import io.anuke.arc.scene.style.TextureRegionDrawable; import io.anuke.arc.scene.ui.ButtonGroup; import io.anuke.arc.scene.ui.Image; import io.anuke.arc.scene.ui.ImageButton; @@ -153,7 +154,7 @@ public class PlacementFragment extends Fragment{ } }).size(46f).group(group).get(); - button.replaceImage(new Image(block.icon(Icon.medium))); + button.getStyle().imageUp = new TextureRegionDrawable(block.icon(Icon.medium)); button.update(() -> { //color unplacable things gray TileEntity core = players[0].getClosestCore(); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java index b6bf145b67..b3b7ffc1d7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -91,7 +91,7 @@ public class ItemBridge extends Block{ } public Tile findLink(int x, int y){ - if(linkValid(world.tile(x, y), world.tile(lastPlaced))){ + if(linkValid(world.tile(x, y), world.tile(lastPlaced)) && lastPlaced != Pos.get(x, y)){ return world.tile(lastPlaced); } @@ -101,7 +101,7 @@ public class ItemBridge extends Block{ Tile tile = world.tile(x + p.x * i, y + p.y * i); if(tile == null) break; - if(tile.block() == this && tile.entity().link == Pos.invalid){ + if(tile.block() == this && !(tile.x == x && tile.y == y) && tile.entity != null && tile.entity().link == Pos.invalid){ return tile; } } @@ -113,7 +113,8 @@ public class ItemBridge extends Block{ public void drawPlace(int x, int y, int rotation, boolean valid){ Tile link = findLink(x, y); - Lines.stroke(1f, Pal.placing); + Draw.tint(Pal.placing); + Lines.stroke(1f); if(link != null){ int rot = link.absoluteRelativeTo(x, y); float w = (link.x == x ? tilesize : Math.abs(link.x - x) * tilesize - tilesize);