From c9019dd2eb2b2fc47cd8f2e9291b43f95b298c8e Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 5 May 2017 15:19:19 -0400 Subject: [PATCH] Added weapon upgrades, bugfixes --- build.gradle | 2 +- core/assets/sprites/back.png | Bin 11473 -> 7987 bytes core/assets/sprites/mindsutry.png | Bin 4244 -> 0 bytes core/assets/sprites/mindustry.atlas | 51 ++++-- core/assets/sprites/mindustry.png | Bin 0 -> 4461 bytes core/assets/ui/uiskin.json | 2 + core/src/io/anuke/mindustry/GameState.java | 7 + core/src/io/anuke/mindustry/Input.java | 26 ++- core/src/io/anuke/mindustry/Inventory.java | 6 + core/src/io/anuke/mindustry/Renderer.java | 4 +- core/src/io/anuke/mindustry/UI.java | 151 +++++++----------- core/src/io/anuke/mindustry/Vars.java | 8 +- .../io/anuke/mindustry/entities/Player.java | 7 +- .../io/anuke/mindustry/entities/Weapon.java | 36 ++++- .../io/anuke/mindustry/resource/Recipe.java | 1 + .../io/anuke/mindustry/ui/LevelDialog.java | 48 ++++++ .../src/io/anuke/mindustry/ui/MenuDialog.java | 40 +++++ .../io/anuke/mindustry/ui/TutorialDialog.java | 35 ++++ .../io/anuke/mindustry/ui/UpgradeDialog.java | 119 ++++++++++++++ core/src/io/anuke/mindustry/world/Block.java | 10 +- .../mindustry/world/blocks/Conveyor.java | 4 +- .../anuke/mindustry/world/blocks/Crafter.java | 2 +- .../world/blocks/ProductionBlocks.java | 39 ++++- .../anuke/mindustry/world/blocks/Turret.java | 2 +- .../anuke/mindustry/client/HtmlLauncher.java | 3 +- 25 files changed, 470 insertions(+), 133 deletions(-) delete mode 100644 core/assets/sprites/mindsutry.png create mode 100644 core/assets/sprites/mindustry.png create mode 100644 core/src/io/anuke/mindustry/ui/LevelDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/MenuDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/TutorialDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/UpgradeDialog.java diff --git a/build.gradle b/build.gradle index 3094edfff4..ddde814c4a 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ project(":core") { dependencies { - compile fileTree(dir: '../core/lib', include: '*.jar') + // compile fileTree(dir: '../core/lib', include: '*.jar') compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/assets/sprites/back.png b/core/assets/sprites/back.png index 1280a92827e9756bba9bea86ca8f94e69d427bcf..9a2c29bc0f12976918f6adbcd2584ba8feac4469 100644 GIT binary patch literal 7987 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 NI_Tv_IdJN?{|A;gWcvUB literal 11473 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 diff --git a/core/assets/sprites/mindsutry.png b/core/assets/sprites/mindsutry.png deleted file mode 100644 index ff944819a835ed1844d1d5bce34ab4ddedc3328f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4244 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 Yiu+nZR`!LZgKq<{FtIYOHX_9T5Aj>L1ONa4 diff --git a/core/assets/sprites/mindustry.atlas b/core/assets/sprites/mindustry.atlas index 13f07673c3..7d9c3f89c7 100644 --- a/core/assets/sprites/mindustry.atlas +++ b/core/assets/sprites/mindustry.atlas @@ -1,5 +1,5 @@ -mindsutry.png +mindustry.png size: 256,32 format: RGBA8888 filter: Nearest,Nearest @@ -228,6 +228,13 @@ ironwall orig: 8, 8 offset: 0, 0 index: -1 +junction + rotate: false + xy: 178, 13 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 laser rotate: false xy: 95, 7 @@ -251,7 +258,7 @@ machineturret index: -1 mech1 rotate: false - xy: 178, 13 + xy: 188, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -265,7 +272,7 @@ megarepairturret index: -1 player rotate: false - xy: 188, 13 + xy: 198, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -279,7 +286,7 @@ repairturret index: -1 router rotate: false - xy: 198, 13 + xy: 208, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -307,77 +314,77 @@ sniperturret index: -1 steelconveyor rotate: false - xy: 208, 13 + xy: 218, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelconveyormove rotate: false - xy: 218, 13 + xy: 228, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelwall rotate: false - xy: 228, 13 + xy: 238, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone rotate: false - xy: 238, 13 + xy: 98, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 98, 3 + xy: 108, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 108, 3 + xy: 118, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 118, 3 + xy: 128, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock rotate: false - xy: 128, 3 + xy: 138, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stonedrill rotate: false - xy: 138, 3 + xy: 148, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stonedrillhead rotate: false - xy: 138, 3 + xy: 148, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stonewall rotate: false - xy: 148, 3 + xy: 158, 3 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -389,3 +396,17 @@ turret orig: 10, 10 offset: 0, 0 index: -1 +weapon-blaster + rotate: false + xy: 168, 3 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +weapon-trishot + rotate: false + xy: 178, 3 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 diff --git a/core/assets/sprites/mindustry.png b/core/assets/sprites/mindustry.png new file mode 100644 index 0000000000000000000000000000000000000000..37617bc2d98fece00b418af5ac228043bc375228 GIT binary patch literal 4461 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 k8U4iy*AvR3%|)C*8l(j literal 0 HcmV?d00001 diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index 44a8adcd37..ea3db6d49a 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -34,6 +34,8 @@ io.anuke.ucore.scene.ui.TextButton$TextButtonStyle: { }, io.anuke.ucore.scene.ui.ImageButton$ImageButtonStyle: { default: {down: button-down, up: button }, + static: {up: button }, + static-down: {up: button-down }, blue: {down: button-blue-down, up: button-blue }, toggle: {checked: button-down, down: button-down, up: button }, togglemap: {checked: button-map-down, down: button-map-down, up: button-map }, diff --git a/core/src/io/anuke/mindustry/GameState.java b/core/src/io/anuke/mindustry/GameState.java index 5894599b0f..f5d1a1e3c6 100644 --- a/core/src/io/anuke/mindustry/GameState.java +++ b/core/src/io/anuke/mindustry/GameState.java @@ -15,6 +15,12 @@ import io.anuke.ucore.util.Timers; public class GameState{ public static void reset(){ + for(Weapon weapon : Weapon.values()){ + weapons.put(weapon, weapon.unlocked); + } + + currentWeapon = Weapon.blaster; + wave = 1; wavetime = waveSpacing(); Entities.clear(); @@ -25,6 +31,7 @@ public class GameState{ spawnpoints.clear(); ui.updateItems(); + ui.updateWeapons(); } public static void play(){ diff --git a/core/src/io/anuke/mindustry/Input.java b/core/src/io/anuke/mindustry/Input.java index f59054cf07..06f23b0f8b 100644 --- a/core/src/io/anuke/mindustry/Input.java +++ b/core/src/io/anuke/mindustry/Input.java @@ -5,6 +5,7 @@ import static io.anuke.mindustry.Vars.*; import com.badlogic.gdx.Input.Buttons; import io.anuke.mindustry.ai.Pathfind; +import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Blocks; @@ -18,9 +19,32 @@ import io.anuke.ucore.util.Mathf; public class Input{ public static void doInput(){ - //player is dead if(player.health <= 0) return; + + if(Inputs.scrolled()){ + Weapon[] val = Weapon.values(); + int index = 0; + for(int i = 0; i < val.length; i ++) + if(val[i] == currentWeapon){ + index = i; + break; + } + + for(int i = 0; i < val.length; i ++){ + index += Inputs.scroll(); + if(index >= 0 && index < val.length){ + if(weapons.get(val[index])){ + currentWeapon = (val[index]); + break; + } + }else{ + break; + } + } + + ui.updateWeapons(); + } if(Inputs.keyUp("rotate")) rotation++; diff --git a/core/src/io/anuke/mindustry/Inventory.java b/core/src/io/anuke/mindustry/Inventory.java index c009d55a61..e3ba894e3d 100644 --- a/core/src/io/anuke/mindustry/Inventory.java +++ b/core/src/io/anuke/mindustry/Inventory.java @@ -39,4 +39,10 @@ public class Inventory{ items.put(req.item, items.get(req.item, 0)-req.amount); ui.updateItems(); } + + public static void removeItems(ItemStack... reqs){ + for(ItemStack req : reqs) + items.put(req.item, items.get(req.item, 0)-req.amount); + ui.updateItems(); + } } diff --git a/core/src/io/anuke/mindustry/Renderer.java b/core/src/io/anuke/mindustry/Renderer.java index 3a92f71e61..331dbcc36c 100644 --- a/core/src/io/anuke/mindustry/Renderer.java +++ b/core/src/io/anuke/mindustry/Renderer.java @@ -158,6 +158,7 @@ public class Renderer{ float offset = 7; float fraction = Mathf.clamp((float) health / maxhealth); + float w = (len * 2 * fraction); Draw.thickness(3f); Draw.color(Color.GRAY); @@ -166,7 +167,8 @@ public class Renderer{ Draw.color(Color.BLACK); Draw.line(x - len + 1, y - offset, x + len, y - offset); Draw.color(Color.RED); - Draw.line(x - len + 1, y - offset, x - len + (int)(len * 2 * fraction), y - offset); + if(w >= 1) + Draw.line(x - len + 1, y - offset, x - len + w, y - offset); Draw.clear(); } } diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 57fcb6e1e4..7c1f2f5561 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -7,10 +7,11 @@ import java.util.function.BooleanSupplier; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.*; +import io.anuke.mindustry.ui.*; import io.anuke.ucore.core.Draw; import io.anuke.ucore.core.Settings; import io.anuke.ucore.graphics.Hue; @@ -25,12 +26,10 @@ import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Timers; public class UI extends SceneModule{ - Table itemtable; + Table itemtable, weapontable; SettingsDialog prefs; KeybindDialog keys; - Dialog about, menu, restart, tutorial, levels; - //Texture conveyor = new Texture("sprites/conveyor.png"), conveyort = new Texture("sprites/conveyort.png"); - int selectedMap = 0; + Dialog about, menu, restart, tutorial, levels, upgrades; BooleanSupplier play = () -> { return playing; @@ -100,35 +99,16 @@ public class UI extends SceneModule{ @Override public void init(){ - ButtonGroup mapgroup = new ButtonGroup<>(); + //TODO oh my god just move these dialogs to different files - levels = new Dialog("Level Select"); - levels.addCloseButton(); - levels.getButtonTable().addButton("Play", ()->{ - levels.hide(); - World.loadMap(selectedMap); - GameState.play(); - }); + upgrades = new UpgradeDialog(); - for(int i = 0; i < maps.length; i ++){ - levels.content().add(maps[i]); - } - - levels.content().row(); - - for(int i = 0; i < maps.length; i ++){ - int index = i; - ImageButton image = new ImageButton(new TextureRegion(mapTextures[i]), "togglemap"); - mapgroup.add(image); - image.clicked(()->{ - selectedMap = index; - }); - image.getImageCell().size(150, 150); - levels.content().add(image).size(180); - } + levels = new LevelDialog(); prefs = new SettingsDialog(); + menu = new MenuDialog(); + prefs.sliderPref("difficulty", "Difficulty", 1, 0, 2, i -> { return i == 0 ? "Easy" : i == 1 ? "Normal" : "Hard"; }); @@ -143,25 +123,7 @@ public class UI extends SceneModule{ about = new TextDialog("About", aboutText); - tutorial = new TextDialog("Tutorial", tutorialText) - .setDialog(); - - tutorial.hidden(()->{ - playing = true; - paused = false; - }); - - tutorial.getButtonTable().addButton("OK", ()->{ - tutorial.hide(); - }); - - tutorial.content().pad(8); - - tutorial.content().row(); - tutorial.content().addCheck("Don't show again", b->{ - Settings.putBool("tutorial", !b); - Settings.save(); - }).padTop(4); + tutorial = new TutorialDialog(); restart = new Dialog("The core was destroyed.", "dialog"){ public Dialog show(Scene scene){ @@ -179,41 +141,9 @@ public class UI extends SceneModule{ GameState.reset(); }); - menu = new Dialog("Paused", "dialog"); - menu.content().addButton("Back", ()->{ - menu.hide(); - paused = false; - }).width(200); - - menu.content().row(); - menu.content().addButton("Settings", ()->{ - prefs.show(); - }).width(200); - - menu.content().row(); - menu.content().addButton("Controls", ()->{ - keys.show(); - }).width(200); - - menu.content().row(); - menu.content().addButton("Back to menu", ()->{ - new Dialog("Confirm", "dialog"){ - { - text("Are you sure you want to quit?"); - button("Ok", true); - button("Cancel", false); - } - - protected void result(Object object){ - if(object == Boolean.TRUE){ - menu.hide(); - paused = false; - playing = false; - } - } - }.show(scene); - - }).width(200); + weapontable = fill(); + weapontable.bottom(); + weapontable.setVisible(play); build.begin(scene); @@ -319,12 +249,6 @@ public class UI extends SceneModule{ table.add().size(size); } - - if(sec == Section.distribution){ - table.row(); - table.add().size(size); - } - table.setVisible(()->{ return button.isChecked(); }); @@ -337,7 +261,14 @@ public class UI extends SceneModule{ add(stack).colspan(3); get().pad(10f); - }}.right().bottom(); + end(); + }}.right().bottom().uniformX(); + + row(); + + new button("Upgrades", ()->{ + upgrades.show(); + }).uniformX().fillX(); get().setVisible(play); @@ -446,6 +377,46 @@ public class UI extends SceneModule{ build.end(); } + public void updateWeapons(){ + weapontable.clearChildren(); + + for(Weapon weapon : Weapon.values()){ + if(weapons.get(weapon) == Boolean.TRUE){ + ImageButton button = new ImageButton(Draw.region("weapon-"+weapon.name()), "static"); + button.getImageCell().size(40); + button.setDisabled(true); + if(weapon != currentWeapon) + button.setColor(Color.GRAY); + weapontable.add(button).size(48, 52); + + Table tiptable = new Table(); + String description = weapon.description; + + tiptable.background("button"); + tiptable.add("[PURPLE]" + weapon.name(), 0.75f).left().padBottom(2f); + + tiptable.row(); + tiptable.row(); + tiptable.add("[ORANGE]" + description).left(); + tiptable.pad(10f); + + Tooltip tip = new Tooltip(tiptable); + + tip.setInstant(true); + + button.addListener(tip); + } + } + } + + public void showPrefs(){ + prefs.show(); + } + + public void showControls(){ + keys.show(); + } + public void showMenu(){ menu.show(); } diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 03c0f0b5b3..08ab27053d 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.world.Tile; @@ -17,8 +18,8 @@ public class Vars{ public static final float respawntime = 60*4; public static final float wavespace = 20*60; public static final float enemyspawnspace = 65; - public static final float breakduration = 40; - public static boolean debug = false; + public static final float breakduration = 30; + public static boolean debug = true; public static final Vector2 vector = new Vector2(); @@ -28,6 +29,8 @@ public class Vars{ public static UI ui; public static final ObjectMap items = new ObjectMap<>(); + public static final ObjectMap weapons = new ObjectMap(); + public static Weapon currentWeapon; public static Player player; @@ -39,6 +42,7 @@ public class Vars{ public static int worldsize = 128; public static int pixsize = worldsize*tilesize; public static Tile[][] tiles = new Tile[worldsize][worldsize]; + public static Recipe recipe; public static int rotation; diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 80837b4ae0..495486585c 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -16,7 +16,6 @@ public class Player extends DestructibleEntity{ float speed = 1f; float rotation; float reload; - Weapon weapon = Weapon.blaster; public Player(){ hitsize = 5; @@ -74,14 +73,14 @@ public class Player extends DestructibleEntity{ boolean shooting = Inputs.buttonDown(Buttons.LEFT) && recipe == null && !ui.hasMouse(); if(shooting && reload <= 0){ - weapon.shoot(this); + currentWeapon.shoot(this); Sounds.play("shoot"); - reload = weapon.reload; + reload = currentWeapon.reload; } vector.limit(speed); - move(vector.x*delta, vector.y*delta); + move(vector.x*delta, vector.y*delta, 4); if(!shooting){ direction.add(vector.scl(delta)); diff --git a/core/src/io/anuke/mindustry/entities/Weapon.java b/core/src/io/anuke/mindustry/entities/Weapon.java index a330d30168..76a12f2f49 100644 --- a/core/src/io/anuke/mindustry/entities/Weapon.java +++ b/core/src/io/anuke/mindustry/entities/Weapon.java @@ -1,28 +1,54 @@ package io.anuke.mindustry.entities; +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.resource.ItemStack; import io.anuke.ucore.entities.Entity; import io.anuke.ucore.util.Angles; public enum Weapon{ - blaster(15, BulletType.shot){ + blaster(15, BulletType.shot, "Shoots a slow, weak bullet."){ { unlocked = true; } + }, + trishot(15, BulletType.shot, "Shoots 3 bullets in a spread.", stack(Item.iron, 40)){ + + @Override + public void shoot(Player p){ + float ang = mouseAngle(p); + float space = 12; + + bullet(p, p.x, p.y, ang); + bullet(p, p.x, p.y, ang+space); + bullet(p, p.x, p.y, ang-space); + } }; public float reload; public BulletType type; public boolean unlocked; + public ItemStack[] requirements; + public String description = "no desc for you"; - private Weapon(float reload, BulletType type){ + private Weapon(float reload, BulletType type, String desc, ItemStack... requirements){ this.reload = reload; this.type = type; + this.requirements = requirements; + this.description = desc; } public void shoot(Player p){ - bullet(p, p.x, p.y); + bullet(p, p.x, p.y, mouseAngle(p)); } - void bullet(Entity owner, float x, float y){ - new Bullet(type, owner, x, y, Angles.mouseAngle(owner.x, owner.y)).add(); + float mouseAngle(Entity owner){ + return Angles.mouseAngle(owner.x, owner.y); + } + + void bullet(Entity owner, float x, float y, float angle){ + new Bullet(type, owner, x, y, angle).add(); + } + + private static ItemStack stack(Item item, int amount){ + return new ItemStack(item, amount); } } diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 23bc101529..3d58fca099 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -16,6 +16,7 @@ public enum Recipe{ conveyor(distribution, ProductionBlocks.conveyor, stack(Item.stone, 1)), fastconveyor(distribution, ProductionBlocks.steelconveyor, stack(Item.steel, 1)), router(distribution, ProductionBlocks.router, stack(Item.stone, 3)), + junction(distribution, ProductionBlocks.junction, stack(Item.iron, 5)), turret(defense, WeaponBlocks.turret, stack(Item.stone, 6)), dturret(defense, WeaponBlocks.doubleturret, stack(Item.stone, 12)), diff --git a/core/src/io/anuke/mindustry/ui/LevelDialog.java b/core/src/io/anuke/mindustry/ui/LevelDialog.java new file mode 100644 index 0000000000..e128bfc7cf --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/LevelDialog.java @@ -0,0 +1,48 @@ +package io.anuke.mindustry.ui; + +import static io.anuke.mindustry.Vars.*; + +import com.badlogic.gdx.graphics.g2d.TextureRegion; + +import io.anuke.mindustry.GameState; +import io.anuke.mindustry.World; +import io.anuke.ucore.scene.ui.ButtonGroup; +import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.ImageButton; + +public class LevelDialog extends Dialog{ + private int selectedMap; + + public LevelDialog(){ + super("Level Select"); + setup(); + } + + void setup(){ + ButtonGroup mapgroup = new ButtonGroup<>(); + + addCloseButton(); + getButtonTable().addButton("Play", ()->{ + hide(); + World.loadMap(selectedMap); + GameState.play(); + }); + + for(int i = 0; i < maps.length; i ++){ + content().add(maps[i]); + } + + content().row(); + + for(int i = 0; i < maps.length; i ++){ + int index = i; + ImageButton image = new ImageButton(new TextureRegion(mapTextures[i]), "togglemap"); + mapgroup.add(image); + image.clicked(()->{ + selectedMap = index; + }); + image.getImageCell().size(150, 150); + content().add(image).size(180); + } + } +} diff --git a/core/src/io/anuke/mindustry/ui/MenuDialog.java b/core/src/io/anuke/mindustry/ui/MenuDialog.java new file mode 100644 index 0000000000..3775550fc2 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/MenuDialog.java @@ -0,0 +1,40 @@ +package io.anuke.mindustry.ui; + +import static io.anuke.mindustry.Vars.*; + +import io.anuke.ucore.scene.ui.ConfirmDialog; +import io.anuke.ucore.scene.ui.Dialog; + +public class MenuDialog extends Dialog{ + + public MenuDialog(){ + super("Paused", "dialog"); + setup(); + } + + void setup(){ + content().addButton("Back", ()->{ + hide(); + paused = false; + }).width(200); + + content().row(); + content().addButton("Settings", ()->{ + ui.showPrefs(); + }).width(200); + + content().row(); + content().addButton("Controls", ()->{ + ui.showControls(); + }).width(200); + + content().row(); + content().addButton("Back to menu", ()->{ + new ConfirmDialog("Confirm", "Are you sure you want to quit?", ()->{ + hide(); + paused = false; + playing = false; + }); + }).width(200); + } +} diff --git a/core/src/io/anuke/mindustry/ui/TutorialDialog.java b/core/src/io/anuke/mindustry/ui/TutorialDialog.java new file mode 100644 index 0000000000..9d44eff94c --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/TutorialDialog.java @@ -0,0 +1,35 @@ +package io.anuke.mindustry.ui; + +import static io.anuke.mindustry.Vars.*; + +import io.anuke.ucore.core.Settings; +import io.anuke.ucore.scene.ui.TextDialog; + +public class TutorialDialog extends TextDialog{ + + public TutorialDialog(){ + super("Tutorial", tutorialText); + setup(); + } + + void setup(){ + setDialog(); + + hidden(()->{ + playing = true; + paused = false; + }); + + getButtonTable().addButton("OK", ()->{ + hide(); + }); + + content().pad(8); + + content().row(); + content().addCheck("Don't show again", b->{ + Settings.putBool("tutorial", !b); + Settings.save(); + }).padTop(4); + } +} diff --git a/core/src/io/anuke/mindustry/ui/UpgradeDialog.java b/core/src/io/anuke/mindustry/ui/UpgradeDialog.java new file mode 100644 index 0000000000..4f8a2e51a1 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/UpgradeDialog.java @@ -0,0 +1,119 @@ +package io.anuke.mindustry.ui; + +import static io.anuke.mindustry.Vars.*; + +import com.badlogic.gdx.graphics.Color; + +import io.anuke.mindustry.Inventory; +import io.anuke.mindustry.entities.Weapon; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.scene.event.Touchable; +import io.anuke.ucore.scene.ui.*; +import io.anuke.ucore.scene.ui.layout.Table; + +public class UpgradeDialog extends Dialog{ + + public UpgradeDialog() { + super("Upgrades"); + setup(); + } + + void setup(){ + addCloseButton(); + + hidden(()->{ + paused = false; + }); + shown(()->{ + paused = true; + }); + + getButtonTable().addButton("Ok", ()->{ + hide(); + }); + + Table weptab = new Table(); + weptab.background("button"); + weptab.pad(20); + + for(Weapon weapon : Weapon.values()){ + TextButton button = new TextButton(weapon.name()); + + Image img = new Image(Draw.region("weapon-"+weapon.name())); + button.add(img).size(8*5); + button.getCells().reverse(); + button.row(); + button.pack(); + + button.update(()->{ + + if(weapons.get(weapon) == Boolean.TRUE){ + button.setDisabled(true); + button.setColor(Color.GRAY); + button.setTouchable(Touchable.disabled); + }else{ + button.setColor(Color.WHITE); + button.setDisabled(false); + } + + button.setDisabled(!Inventory.hasItems(weapon.requirements)); + }); + + + weptab.add(button).width(160); + + Table tiptable = new Table(); + + Runnable run = ()->{ + tiptable.clearChildren(); + + String description = weapon.description; + + tiptable.background("button"); + tiptable.add("[PURPLE]" + weapon.name(), 0.75f).left().padBottom(2f); + + if(weapons.get(weapon) != Boolean.TRUE){ + ItemStack[] req = weapon.requirements; + for(ItemStack s : req){ + tiptable.row(); + int amount = Math.min(items.get(s.item, 0), s.amount); + tiptable.add( + (amount >= s.amount ? "[YELLOW]" : "[RED]") + +s.item + ": " + amount + " / " +s.amount, 0.5f).left(); + } + } + + tiptable.row(); + tiptable.add().size(10); + tiptable.row(); + tiptable.add("[ORANGE]" + description).left(); + tiptable.row(); + if(weapons.get(weapon) == Boolean.TRUE) + tiptable.add("[LIME]Purchased!").left(); + tiptable.pad(10f); + }; + + run.run(); + + Tooltip tip = new Tooltip(tiptable, run); + + tip.setInstant(true); + + button.addListener(tip); + + button.clicked(()->{ + Inventory.removeItems(weapon.requirements); + weapons.put(weapon, true); + ui.updateWeapons(); + run.run(); + }); + } + + content().add("Weapons"); + content().row(); + content().add(weptab); + content().row(); + } + +} diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index ee8a09a0f4..f06a26f0e0 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -36,11 +36,11 @@ public class Block{ return null; } - protected void handleItem(Tile tile, Item item, Tile source){ + public void handleItem(Tile tile, Item item, Tile source){ tile.entity.addItem(item, 1); } - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return false; } @@ -62,7 +62,7 @@ public class Block{ for(int j = 0; j < 4; j ++){ Tile other = tiles[i]; - if(other != null && other.block().accept(item) + if(other != null && other.block().accept(item, other, tile) //don't output to things facing this thing && !(other.block().rotate && (other.rotation + 2) % 4 == i)){ @@ -98,7 +98,7 @@ public class Block{ if(todump != null && item != todump) continue; - if(tile.entity.hasItem(item) && other != null && other.block().accept(item) && + if(tile.entity.hasItem(item) && other != null && other.block().accept(item, other, tile) && //don't output to things facing this thing !(other.block().rotate && (other.rotation + 2) % 4 == i)){ other.block().handleItem(other, item, tile); @@ -119,7 +119,7 @@ public class Block{ */ protected boolean offloadDir(Tile tile, Item item){ Tile other = tile.getNearby()[tile.rotation]; - if(other != null && other.block().accept(item)){ + if(other != null && other.block().accept(item, other, tile)){ other.block().handleItem(other, item, tile); //other.entity.addCovey(item, ch == 1 ? 0.5f : ch ==2 ? 1f : 0f); return true; diff --git a/core/src/io/anuke/mindustry/world/blocks/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/Conveyor.java index fe8ba32bcc..6cd4704477 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Conveyor.java @@ -64,7 +64,7 @@ public class Conveyor extends Block{ } @Override - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return true; } @@ -74,7 +74,7 @@ public class Conveyor extends Block{ } @Override - protected void handleItem(Tile tile, Item item, Tile source){ + public void handleItem(Tile tile, Item item, Tile source){ int ch = Math.abs(source.relativeTo(tile.x, tile.y) - tile.rotation); int ang = ((source.relativeTo(tile.x, tile.y) - tile.rotation)); diff --git a/core/src/io/anuke/mindustry/world/blocks/Crafter.java b/core/src/io/anuke/mindustry/world/blocks/Crafter.java index 4443feaced..8a5516b75d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Crafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/Crafter.java @@ -40,7 +40,7 @@ public class Crafter extends Block{ } @Override - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return item == Item.iron || item == Item.coal; } } diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index 36619d0abb..df18e8ac3c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -17,12 +17,12 @@ public class ProductionBlocks{ } @Override - protected void handleItem(Tile tile, Item item, Tile source){ + public void handleItem(Tile tile, Item item, Tile source){ Inventory.addItem(item, 1); } @Override - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return true; } }, @@ -44,14 +44,14 @@ public class ProductionBlocks{ @Override public void update(Tile tile){ - if(Timers.get(tile, 10) && tile.entity.totalItems() > 0){ + if(Timers.get(tile, 2) && tile.entity.totalItems() > 0){ tryDump(tile, tile.rotation++, null); tile.rotation %= 4; } } @Override - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return true; } @@ -61,6 +61,37 @@ public class ProductionBlocks{ } }, + junction = new Block("junction"){ + { + update = true; + solid = true; + } + + @Override + public void handleItem(Tile tile, Item item, Tile source){ + int dir = source.relativeTo(tile.x, tile.y); + dir = (dir+4)%4; + Tile to = tile.getNearby()[dir]; + Timers.run(15, ()->{ + to.block().handleItem(to, item, tile); + }); + + } + + @Override + public boolean accept(Item item, Tile dest, Tile source){ + int dir = source.relativeTo(dest.x, dest.y); + dir = (dir+4)%4; + Tile to = dest.getNearby()[dir]; + return to != null && to.block() != junction && to.block().accept(item, dest, to); + } + + @Override + public String description(){ + return "Serves as a conveyor junction."; + } + }, + smelter = new Crafter("smelter"){{ health = 70; requirements = new Item[]{Item.coal, Item.iron}; diff --git a/core/src/io/anuke/mindustry/world/blocks/Turret.java b/core/src/io/anuke/mindustry/world/blocks/Turret.java index fbd538c513..4f2c3d2120 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/Turret.java @@ -64,7 +64,7 @@ public class Turret extends Block{ } @Override - public boolean accept(Item item){ + public boolean accept(Item item, Tile dest, Tile source){ return item == ammo; } diff --git a/html/src/io/anuke/mindustry/client/HtmlLauncher.java b/html/src/io/anuke/mindustry/client/HtmlLauncher.java index ea532df17f..a162763b88 100644 --- a/html/src/io/anuke/mindustry/client/HtmlLauncher.java +++ b/html/src/io/anuke/mindustry/client/HtmlLauncher.java @@ -3,12 +3,13 @@ package io.anuke.mindustry.client; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.backends.gwt.GwtApplication; import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration; -import io.anuke.mindustry.Mindustry; import com.google.gwt.dom.client.*; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.VerticalPanel; +import io.anuke.mindustry.Mindustry; + public class HtmlLauncher extends GwtApplication { static final int WIDTH = 800; static final int HEIGHT = 600;