diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 67043ac36c..a97bfdc48f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -52,13 +52,17 @@ text.addplayers=Add/Remove Players text.customgame=Custom Game text.campaign=Campaign text.sectors=Sectors -text.sector=Selected Sector: [LIGHT_GRAY]{0} +text.sector=Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} text.sector.deploy=Deploy text.sector.resume=Resume text.sector.unlocked=Sector completed! text.sector.locked=[scarlet][[Incomplete] text.sector.unexplored=[accent][[Unexplored] +text.mission=Mission:[LIGHT_GRAY] {0} +text.mission.wave=Survive [accent]{0}[] waves. +text.mission.battle=Destroy the enemy base. +text.none= text.close=Close text.quit=Quit text.maps=Maps diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index 8b637ad216..4f43942747 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -33,6 +33,7 @@ Color: { lightgray: {a: 1, b: 0.65, g: 0.65, r: 0.65 } orange: {hex: "FFA500"}, accent: {hex: "f4ba6e"}, + accentDark: {hex: "f4ba6e"}, }, TintedDrawable: { dialogDim: {name: white, color: {r: 0, g: 0, b: 0, a: 0.9} }, diff --git a/core/src/io/anuke/mindustry/maps/Sector.java b/core/src/io/anuke/mindustry/maps/Sector.java index af8089f1d4..8678309a3d 100644 --- a/core/src/io/anuke/mindustry/maps/Sector.java +++ b/core/src/io/anuke/mindustry/maps/Sector.java @@ -28,6 +28,8 @@ public class Sector{ public transient Array spawns = new Array<>(); /**Ores that appear in this sector.*/ public transient Array ores = new Array<>(); + /**Difficulty of the sector, measured by calculating distance from origin.*/ + public transient int difficulty; public int getSeed(){ return Bits.packInt(x, y); diff --git a/core/src/io/anuke/mindustry/maps/Sectors.java b/core/src/io/anuke/mindustry/maps/Sectors.java index 20e6860c7c..0169d08c94 100644 --- a/core/src/io/anuke/mindustry/maps/Sectors.java +++ b/core/src/io/anuke/mindustry/maps/Sectors.java @@ -10,6 +10,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.maps.generation.WorldGenerator.GenResult; import io.anuke.mindustry.maps.missions.BattleMission; +import io.anuke.mindustry.maps.missions.WaveMission; import io.anuke.mindustry.world.ColorMapper; import io.anuke.mindustry.world.Edges; import io.anuke.ucore.core.Settings; @@ -130,15 +131,23 @@ public class Sectors{ } private void initSector(Sector sector){ - sector.mission = new BattleMission(); + sector.difficulty = (int)(Mathf.dst(sector.x, sector.y)/2); + + if(sector.difficulty < 1){ + sector.mission = new WaveMission(30); + }else{ + sector.mission = Mathf.choose( + new BattleMission(sector.difficulty), + new WaveMission(30 + sector.difficulty*5 + Mathf.randomSeed(sector.getSeed(), 0, 5)*5) + ); + } + //add all ores for now since material differences aren't well handled yet sector.ores.addAll(Items.tungsten, Items.coal, Items.lead, Items.thorium, Items.titanium); } private int round2(int i){ - if(i < 0){ - i --; - } + if(i < 0) i --; return i/2*2; } diff --git a/core/src/io/anuke/mindustry/maps/missions/BattleMission.java b/core/src/io/anuke/mindustry/maps/missions/BattleMission.java index de37236596..ddbbd10d63 100644 --- a/core/src/io/anuke/mindustry/maps/missions/BattleMission.java +++ b/core/src/io/anuke/mindustry/maps/missions/BattleMission.java @@ -5,8 +5,19 @@ import io.anuke.mindustry.content.blocks.StorageBlocks; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.maps.Sector; import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.util.Bundles; public class BattleMission implements Mission{ + private final int difficulty; + + public BattleMission(int difficulty){ + this.difficulty = difficulty; + } + + @Override + public String displayString(){ + return Bundles.get("text.mission.battle"); + } @Override public void generate(Tile[][] tiles, Sector sector){ diff --git a/core/src/io/anuke/mindustry/maps/missions/Mission.java b/core/src/io/anuke/mindustry/maps/missions/Mission.java index 9b9c22c082..d50caf72b5 100644 --- a/core/src/io/anuke/mindustry/maps/missions/Mission.java +++ b/core/src/io/anuke/mindustry/maps/missions/Mission.java @@ -5,6 +5,7 @@ import io.anuke.mindustry.world.Tile; public interface Mission{ boolean isComplete(); + String displayString(); default void generate(Tile[][] tiles, Sector sector){} } diff --git a/core/src/io/anuke/mindustry/maps/missions/WaveMission.java b/core/src/io/anuke/mindustry/maps/missions/WaveMission.java index 88c84fa673..ba3575658a 100644 --- a/core/src/io/anuke/mindustry/maps/missions/WaveMission.java +++ b/core/src/io/anuke/mindustry/maps/missions/WaveMission.java @@ -1,5 +1,7 @@ package io.anuke.mindustry.maps.missions; +import io.anuke.ucore.util.Bundles; + import static io.anuke.mindustry.Vars.*; public class WaveMission implements Mission{ @@ -9,6 +11,11 @@ public class WaveMission implements Mission{ this.target = target; } + @Override + public String displayString(){ + return Bundles.format("text.mission.wave", target); + } + @Override public boolean isComplete(){ return state.wave >= target; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SectorsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SectorsDialog.java index f9236015ad..9226c65dd9 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SectorsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SectorsDialog.java @@ -12,7 +12,6 @@ import io.anuke.ucore.scene.Element; import io.anuke.ucore.scene.event.ClickListener; import io.anuke.ucore.scene.event.InputEvent; import io.anuke.ucore.scene.event.InputListener; -import io.anuke.ucore.scene.ui.TextButton; import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.utils.Cursors; import io.anuke.ucore.scene.utils.ScissorStack; @@ -37,18 +36,21 @@ public class SectorsDialog extends FloatingDialog{ addCloseButton(); - content().label(() -> Bundles.format("text.sector", selected == null ? "" : + content().label(() -> Bundles.format("text.sector", selected == null ? Bundles.get("text.none") : (selected.x + ", " + selected.y + (!selected.complete && selected.saveID != -1 ? " " + Bundles.get("text.sector.locked") : "")) + (selected.saveID == -1 ? " " + Bundles.get("text.sector.unexplored") : (selected.hasSave() ? " [accent]/[white] " + Bundles.format("text.sector.time", selected.getSave().getPlayTime()) : "")))); content().row(); + content().label(() -> Bundles.format("text.mission", selected == null ? Bundles.get("text.none") : selected.mission.displayString())); + content().row(); content().add(new SectorView()).grow(); content().row(); buttons().addImageTextButton("$text.sector.deploy", "icon-play", 10*3, () -> { hide(); ui.loadLogic(() -> world.sectors().playSector(selected)); - }).size(230f, 64f).name("deploy-button").disabled(b -> selected == null); + }).size(230f, 64f).disabled(b -> selected == null) + .update(t -> t.setText(selected != null && selected.hasSave() ? "$text.sector.resume" : "$text.sector.deploy")); if(debug){ buttons().addButton("unlock", () -> world.sectors().completeSector(selected.x, selected.y)).size(230f, 64f).disabled(b -> selected == null); @@ -56,7 +58,6 @@ public class SectorsDialog extends FloatingDialog{ } void selectSector(Sector sector){ - buttons().find("deploy-button").setText(sector.hasSave() ? "$text.sector.resume" : "$text.sector.deploy"); selected = sector; }