diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/arc-heat.png b/core/assets-raw/sprites/blocks/turrets/arc-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/arc-heat.png rename to core/assets-raw/sprites/blocks/turrets/arc-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/arc.png b/core/assets-raw/sprites/blocks/turrets/arc.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/arc.png rename to core/assets-raw/sprites/blocks/turrets/arc.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/cyclone.png b/core/assets-raw/sprites/blocks/turrets/cyclone.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/cyclone.png rename to core/assets-raw/sprites/blocks/turrets/cyclone.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/duo.png b/core/assets-raw/sprites/blocks/turrets/duo.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/duo.png rename to core/assets-raw/sprites/blocks/turrets/duo.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/fuse.png b/core/assets-raw/sprites/blocks/turrets/fuse.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/fuse.png rename to core/assets-raw/sprites/blocks/turrets/fuse.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/hail-heat.png b/core/assets-raw/sprites/blocks/turrets/hail-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/hail-heat.png rename to core/assets-raw/sprites/blocks/turrets/hail-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/hail.png b/core/assets-raw/sprites/blocks/turrets/hail.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/hail.png rename to core/assets-raw/sprites/blocks/turrets/hail.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/lancer-heat.png b/core/assets-raw/sprites/blocks/turrets/lancer-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/lancer-heat.png rename to core/assets-raw/sprites/blocks/turrets/lancer-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/lancer.png b/core/assets-raw/sprites/blocks/turrets/lancer.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/lancer.png rename to core/assets-raw/sprites/blocks/turrets/lancer.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/meltdown-heat.png b/core/assets-raw/sprites/blocks/turrets/meltdown-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/meltdown-heat.png rename to core/assets-raw/sprites/blocks/turrets/meltdown-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/meltdown.png b/core/assets-raw/sprites/blocks/turrets/meltdown.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/meltdown.png rename to core/assets-raw/sprites/blocks/turrets/meltdown.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/ripple-heat.png b/core/assets-raw/sprites/blocks/turrets/ripple-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/ripple-heat.png rename to core/assets-raw/sprites/blocks/turrets/ripple-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/ripple.png b/core/assets-raw/sprites/blocks/turrets/ripple.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/ripple.png rename to core/assets-raw/sprites/blocks/turrets/ripple.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/salvo-heat.png b/core/assets-raw/sprites/blocks/turrets/salvo-heat.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/salvo-heat.png rename to core/assets-raw/sprites/blocks/turrets/salvo-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/salvo-panel-left.png b/core/assets-raw/sprites/blocks/turrets/salvo-panel-left.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/salvo-panel-left.png rename to core/assets-raw/sprites/blocks/turrets/salvo-panel-left.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/salvo-panel-right.png b/core/assets-raw/sprites/blocks/turrets/salvo-panel-right.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/salvo-panel-right.png rename to core/assets-raw/sprites/blocks/turrets/salvo-panel-right.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/salvo.png b/core/assets-raw/sprites/blocks/turrets/salvo.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/salvo.png rename to core/assets-raw/sprites/blocks/turrets/salvo.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/spectre.png b/core/assets-raw/sprites/blocks/turrets/spectre.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/spectre.png rename to core/assets-raw/sprites/blocks/turrets/spectre.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/swarmer.png b/core/assets-raw/sprites/blocks/turrets/swarmer.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/swarmer.png rename to core/assets-raw/sprites/blocks/turrets/swarmer.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/wave-liquid.png b/core/assets-raw/sprites/blocks/turrets/wave-liquid.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/wave-liquid.png rename to core/assets-raw/sprites/blocks/turrets/wave-liquid.png diff --git a/core/assets-raw/sprites/blocks/turrets/turrets/wave.png b/core/assets-raw/sprites/blocks/turrets/wave.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/turrets/wave.png rename to core/assets-raw/sprites/blocks/turrets/wave.png diff --git a/core/assets-raw/sprites_replacement/blocks/turrets/duo.png b/core/assets-raw/sprites_replacement/blocks/turrets/duo.png new file mode 100644 index 0000000000..e21eec98f1 Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/turrets/duo.png differ diff --git a/core/assets-raw/sprites_replacement/blocks/turrets/lancer.png b/core/assets-raw/sprites_replacement/blocks/turrets/lancer.png new file mode 100644 index 0000000000..955b6b5f6a Binary files /dev/null and b/core/assets-raw/sprites_replacement/blocks/turrets/lancer.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 625648e507..d198280c80 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -2419,6 +2419,20 @@ vault orig: 96, 96 offset: 0, 0 index: -1 +arc + rotate: false + xy: 2013, 1570 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +arc-heat + rotate: false + xy: 2013, 1536 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 block-1 rotate: false xy: 1853, 748 @@ -2447,20 +2461,6 @@ block-4 orig: 128, 128 offset: 0, 0 index: -1 -arc - rotate: false - xy: 2013, 1570 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -arc-heat - rotate: false - xy: 2013, 1536 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 cyclone rotate: false xy: 291, 12 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 9f6343914e..9811fc23e0 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index 555a8fdc11..9ad4039266 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -28,8 +28,7 @@ import io.anuke.mindustry.world.blocks.units.UnitFactory; import io.anuke.mindustry.world.consumers.ConsumeItemFilter; import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter; -import static io.anuke.mindustry.Vars.content; -import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.*; public class Blocks implements ContentList{ public static Block @@ -187,8 +186,9 @@ public class Blocks implements ContentList{ }}; ice = new Floor("ice"){{ - dragMultiplier = 0.2f; - speedMultiplier = 0.1f; + //TODO fix + dragMultiplier = 1f; + speedMultiplier = 1f; }}; cliffs = new StaticWall("cliffs"){{ @@ -300,7 +300,7 @@ public class Blocks implements ContentList{ //region crafting graphitePress = new GenericCrafter("graphite-press"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 300, Items.lead, 50)); + requirements(Category.crafting, ItemStack.with(Items.copper, 200, Items.lead, 60)); craftEffect = Fx.pulverizeMedium; output = Items.graphite; @@ -1029,7 +1029,7 @@ public class Blocks implements ContentList{ }}; launchPad = new LaunchPad("launch-pad"){{ - requirements(Category.effect, ItemStack.with(Items.copper, 500, Items.titanium, 200, Items.silicon, 200, Items.lead, 200)); + requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.copper, 500, Items.titanium, 200, Items.silicon, 200, Items.lead, 200)); size = 3; itemCapacity = 100; launchTime = 60f * 6; diff --git a/core/src/io/anuke/mindustry/ui/ItemsDisplay.java b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java new file mode 100644 index 0000000000..2a91be51c8 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/ItemsDisplay.java @@ -0,0 +1,38 @@ +package io.anuke.mindustry.ui; + +import io.anuke.arc.collection.ObjectIntMap; +import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemType; + +import java.text.NumberFormat; +import java.util.Locale; + +import static io.anuke.mindustry.Vars.content; +import static io.anuke.mindustry.Vars.data; + +public class ItemsDisplay extends Table{ + private static final NumberFormat format = NumberFormat.getNumberInstance(Locale.getDefault()); + + public ItemsDisplay(){ + rebuild(); + } + + public void rebuild(){ + clear(); + top().left(); + + table("flat", t -> { + t.margin(4); + ObjectIntMap items = data.items(); + for(Item item : content.items()){ + if(item.type == ItemType.material && data.isUnlocked(item)){ + t.label(() -> format.format(items.get(item, 0))).left(); + t.addImage(item.region).size(8*3).padLeft(4).padRight(4); + t.add("[LIGHT_GRAY]" + item.localizedName()).left(); + t.row(); + } + } + }); + } +} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index 1bf68c9563..22da104913 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -2,7 +2,6 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.Core; import io.anuke.arc.collection.Array; -import io.anuke.arc.collection.ObjectIntMap; import io.anuke.arc.collection.ObjectSet; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.Lines; @@ -16,10 +15,9 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.Saves.SaveSlot; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.io.SaveIO.SaveException; -import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.type.ItemType; import io.anuke.mindustry.type.Zone; +import io.anuke.mindustry.ui.ItemsDisplay; import io.anuke.mindustry.ui.TreeLayout; import io.anuke.mindustry.ui.TreeLayout.TreeNode; import io.anuke.mindustry.world.Block; @@ -93,20 +91,7 @@ public class DeployDialog extends FloatingDialog{ }); }).growX().height(50f).pad(-12).padTop(10); - }}, new Table(){{ - top().left().margin(10); - - ObjectIntMap items = data.items(); - for(Item item : content.items()){ - if(item.type == ItemType.material && data.isUnlocked(item)){ - label(() -> items.get(item, 0) + "").left(); - addImage(item.region).size(8*4).pad(4); - add("[LIGHT_GRAY]" + item.localizedName()).left(); - row(); - } - } - - }}).grow(); + }}, new ItemsDisplay()).grow(); } boolean hidden(Zone zone){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java index 06bfd3d58a..34136eb722 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java @@ -20,6 +20,7 @@ import io.anuke.mindustry.content.TechTree; import io.anuke.mindustry.content.TechTree.TechNode; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.ui.ItemsDisplay; import io.anuke.mindustry.ui.TreeLayout; import io.anuke.mindustry.ui.TreeLayout.TreeNode; import io.anuke.mindustry.world.Block; @@ -28,9 +29,10 @@ import io.anuke.mindustry.world.Block.Icon; import static io.anuke.mindustry.Vars.*; public class TechTreeDialog extends FloatingDialog{ + private static final float nodeSize = 60f; private ObjectSet nodes = new ObjectSet<>(); private TechTreeNode root = new TechTreeNode(TechTree.root, null); - private static final float nodeSize = 60f; + private ItemsDisplay items; public TechTreeDialog(){ super(""); @@ -40,8 +42,9 @@ public class TechTreeDialog extends FloatingDialog{ layout.gapBetweenNodes = 40f; layout.layout(root); - cont.setFillParent(true); - cont.add(new View()).grow(); + titleTable.remove(); + margin(0f); + cont.stack(new View(), items = new ItemsDisplay()).grow(); { //debug code; TODO remove ObjectSet used = new ObjectSet().select(t -> true); @@ -74,6 +77,8 @@ public class TechTreeDialog extends FloatingDialog{ l.visible = !locked && l.node.block.isVisible(); checkNodes(l); } + + items.rebuild(); } void showToast(String info){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index d3bf544b84..19128bac74 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -73,8 +73,10 @@ public class PlacementFragment extends Fragment{ void rebuild(){ currentCategory = Category.turret; Group group = toggler.getParent(); + int index = toggler.getZIndex(); toggler.remove(); build(group); + toggler.setZIndex(index); } boolean gridUpdate(InputHandler input){ diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index 34beaf6245..ba8d3c188b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -6,16 +6,16 @@ import io.anuke.arc.Core; import io.anuke.arc.Events; import io.anuke.arc.Graphics.Cursor; import io.anuke.arc.Graphics.Cursor.SystemCursor; -import io.anuke.mindustry.entities.Effects; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.math.Mathf; import io.anuke.mindustry.content.Fx; +import io.anuke.mindustry.entities.Effects; +import io.anuke.mindustry.entities.effect.RubbleDecal; +import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.entities.type.Unit; -import io.anuke.mindustry.entities.effect.RubbleDecal; -import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.game.EventType.BlockBuildEndEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.gen.Call; @@ -280,7 +280,7 @@ public class BuildBlock extends Block{ public void setDeconstruct(Block previous){ this.previous = previous; this.progress = 1f; - if(previous.buildCost > 1f){ + if(previous.buildCost >= 0.01f){ this.block = previous; this.accumulator = new float[previous.buildRequirements.length]; this.totalAccumulator = new float[previous.buildRequirements.length]; diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java index d896bbcb65..94875bac5b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java @@ -9,6 +9,7 @@ import io.anuke.mindustry.type.ItemType; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.data; +import static io.anuke.mindustry.Vars.world; public class LaunchPad extends StorageBlock{ protected final int timerLaunch = timers++; @@ -31,7 +32,7 @@ public class LaunchPad extends StorageBlock{ public void update(Tile tile){ TileEntity entity = tile.entity; - if(entity.cons.valid()){ + if(entity.cons.valid() && world.isZone()){ for(Item item : Vars.content.items()){ if(entity.items.get(item) >= itemCapacity && entity.timer.get(timerLaunch, launchTime)){ //TODO play animation of some sort diff --git a/tools/build.gradle b/tools/build.gradle index 7f94f0871f..aee8429983 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -11,7 +11,11 @@ import java.awt.image.BufferedImage def outFolder = "../core/assets-raw/sprites_out/" def genFolder = "../core/assets-raw/sprites_out/generated/" +def doAntialias = true + def antialias = {File file -> + if(!doAntialias) return + def image = ImageIO.read(file) def out = ImageIO.read(file) def getRGB = { int ix, int iy -> diff --git a/tools/src/io/anuke/mindustry/ImagePacker.java b/tools/src/io/anuke/mindustry/ImagePacker.java index 3865756a76..15c94c63ba 100644 --- a/tools/src/io/anuke/mindustry/ImagePacker.java +++ b/tools/src/io/anuke/mindustry/ImagePacker.java @@ -80,6 +80,14 @@ public class ImagePacker{ return (AtlasRegion)regionCache.get(name); } + @Override + public AtlasRegion find(String name, TextureRegion def){ + if(!regionCache.containsKey(name)){ + return (AtlasRegion)def; + } + return (AtlasRegion)regionCache.get(name); + } + @Override public boolean has(String s) { return regionCache.containsKey(s);