From f36eed32b9897e990ec5b43eea65c8b575fcdfa6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 19 Mar 2019 12:47:09 -0400 Subject: [PATCH] Bugfixes / Balancing --- core/assets/bundles/bundle.properties | 2 +- .../io/anuke/mindustry/ai/WaveSpawner.java | 10 +++++- .../io/anuke/mindustry/content/TechTree.java | 20 ++++++------ .../anuke/mindustry/entities/type/Player.java | 2 ++ .../mindustry/ui/fragments/HudFragment.java | 31 ++++++++++++++++--- .../anuke/mindustry/world/blocks/Floor.java | 6 ++-- 6 files changed, 53 insertions(+), 18 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 5b4bbe308e..371e18d9ec 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -292,7 +292,7 @@ uncover = Uncover configure = Configure Loadout configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}. zone.unlocked = [LIGHT_GRAY]{0} unlocked. -zone.complete = Wave {0} reached:\nNew zone requirements met. +zone.complete = Wave {0} reached:\nNext zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: add = Add... diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index cfdb2b134d..fca6df51a7 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -27,6 +27,7 @@ public class WaveSpawner{ private Array flySpawns = new Array<>(); private Array groundSpawns = new Array<>(); private IntArray loadedSpawns = new IntArray(); + private boolean spawning = false; public WaveSpawner(){ Events.on(WorldLoadEvent.class, e -> reset()); @@ -57,6 +58,7 @@ public class WaveSpawner{ } public void spawnEnemies(){ + spawning = true; for(SpawnGroup group : state.rules.spawns){ int spawned = group.getUnitsSpawned(state.wave); @@ -90,7 +92,7 @@ public class WaveSpawner{ BaseUnit unit = group.createUnit(waveTeam); unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y); - Time.run(i*5, () -> shockwave(unit)); + Time.run(Math.min(i*5, 60*2), () -> shockwave(unit)); } Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize)); //would be interesting to see player structures survive this without hacks @@ -98,6 +100,12 @@ public class WaveSpawner{ } } } + + Time.runTask(121f, () -> spawning = false); + } + + public boolean isSpawning(){ + return spawning; } private void reset(){ diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/io/anuke/mindustry/content/TechTree.java index 46e34eb01d..330cdc8114 100644 --- a/core/src/io/anuke/mindustry/content/TechTree.java +++ b/core/src/io/anuke/mindustry/content/TechTree.java @@ -43,20 +43,22 @@ public class TechTree implements ContentList{ }); node(duo, () -> { - node(hail, () -> { + node(scatter, () -> { + node(hail, () -> { - node(salvo, () -> { - node(swarmer, () -> { - node(cyclone, () -> { - node(spectre, () -> { + node(salvo, () -> { + node(swarmer, () -> { + node(cyclone, () -> { + node(spectre, () -> { + }); }); }); - }); - node(ripple, () -> { - node(fuse, () -> { + node(ripple, () -> { + node(fuse, () -> { + }); }); }); }); @@ -257,7 +259,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 * 10); + requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 8); } return new TechNode(block, requirements, children); diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index f7713bb7f6..93aaa2588c 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -579,6 +579,8 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{ if(!ui.chatfrag.chatOpen()){ velocity.add(movement.x, movement.y); + }else{ + isShooting = false; } float prex = x, prey = y; updateVelocityStatus(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 682fabf56e..58a46650b8 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -4,6 +4,7 @@ import io.anuke.arc.Core; import io.anuke.arc.Events; import io.anuke.arc.collection.Array; import io.anuke.arc.graphics.Color; +import io.anuke.arc.input.KeyCode; import io.anuke.arc.math.Interpolation; import io.anuke.arc.math.Mathf; import io.anuke.arc.scene.Element; @@ -31,6 +32,7 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.mindustry.ui.Bar; import io.anuke.mindustry.ui.IntFormat; +import io.anuke.mindustry.ui.dialogs.FloatingDialog; import static io.anuke.mindustry.Vars.*; @@ -222,16 +224,37 @@ public class HudFragment extends Fragment{ //launch button parent.fill(t -> { t.top().visible(() -> !state.is(State.menu)); + TextButton[] testb = {null}; - TextButton button = Elements.newButton("$launch", () -> ui.showConfirm("$launch", "$launch.confirm", Call::launchZone)); + TextButton button = Elements.newButton("$launch", () -> { + FloatingDialog dialog = new FloatingDialog("$launch"); + dialog.update(() -> { + if(!testb[0].isVisible()){ + dialog.hide(); + } + }); + dialog.cont.add("$launch.confirm").width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); + dialog.buttons.defaults().size(200f, 54f).pad(2f); + dialog.setFillParent(false); + dialog.buttons.addButton("$cancel", dialog::hide); + dialog.buttons.addButton("$ok", () -> { + dialog.hide(); + Call.launchZone(); + }); + dialog.keyDown(KeyCode.ESCAPE, dialog::hide); + dialog.keyDown(KeyCode.BACK, dialog::hide); + dialog.show(); + + }); + + testb[0] = button; button.getStyle().disabledFontColor = Color.WHITE; button.visible(() -> world.isZone() && world.getZone().metCondition() && !Net.client() && - state.wave % world.getZone().launchPeriod == 0 && - state.wavetime < state.rules.waveSpacing * launchWaveMultiplier - 70); + state.wave % world.getZone().launchPeriod == 0 && !world.spawner.isSpawning()); button.update(() -> { if(world.getZone() == null){ @@ -444,6 +467,6 @@ public class HudFragment extends Fragment{ } }).growY().fillX().right().width(40f) .visible(() -> state.rules.waves && ((Net.server() || players[0].isAdmin) || !Net.active()) && state.enemies() == 0 - && (state.wavetime < state.rules.waveSpacing - 60 || !state.rules.waveTimer)); + && (!world.spawner.isSpawning() || !state.rules.waveTimer)); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java index e79efd5c23..023224df81 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java @@ -7,7 +7,6 @@ import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Point2; -import io.anuke.arc.util.Log; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.StatusEffects; @@ -110,12 +109,13 @@ public class Floor extends Block{ Mathf.random.setSeed(tile.pos()); Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy()); + + drawEdges(tile); + Floor floor = tile.ore(); if(floor != Blocks.air && floor != this){ //ore should never have itself on top, but it's possible, so prevent a crash in that case floor.draw(tile); } - - drawEdges(tile); }