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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 G2~7a8HDRLw 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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 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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 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;