diff --git a/core/assets-raw/sprites/blocks/powerlaserrouter.png b/core/assets-raw/sprites/blocks/powerlaserrouter.png new file mode 100644 index 0000000000..ea7c8122f3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/powerlaserrouter.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 8a93a7565e..a5fcf4862f 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -445,13 +445,20 @@ blocks/powerlaser orig: 8, 8 offset: 0, 0 index: -1 -blocks/pump +blocks/powerlaserrouter rotate: false xy: 499, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +blocks/pump + rotate: false + xy: 389, 224 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 blocks/repairturret rotate: false xy: 177, 2 @@ -461,35 +468,35 @@ blocks/repairturret index: -1 blocks/rock rotate: false - xy: 389, 214 + xy: 389, 204 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2 rotate: false - xy: 389, 204 + xy: 332, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2shadow rotate: false - xy: 332, 197 + xy: 332, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow rotate: false - xy: 332, 187 + xy: 342, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/router rotate: false - xy: 342, 197 + xy: 332, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -503,7 +510,7 @@ blocks/shadow index: -1 blocks/shieldgenerator rotate: false - xy: 332, 177 + xy: 342, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -517,21 +524,21 @@ blocks/shotgunturret index: -1 blocks/shrub rotate: false - xy: 342, 187 + xy: 342, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shrubshadow rotate: false - xy: 342, 177 + xy: 352, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/smelter rotate: false - xy: 352, 192 + xy: 352, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -545,21 +552,21 @@ blocks/sniperturret index: -1 blocks/steelconveyor rotate: false - xy: 352, 182 + xy: 362, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyormove rotate: false - xy: 362, 192 + xy: 362, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall rotate: false - xy: 362, 182 + xy: 372, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -573,49 +580,49 @@ blocks/stone index: -1 blocks/stone1 rotate: false - xy: 372, 192 + xy: 372, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone2 rotate: false - xy: 372, 182 + xy: 382, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone3 rotate: false - xy: 382, 192 + xy: 382, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock rotate: false - xy: 382, 182 + xy: 352, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock2 rotate: false - xy: 352, 172 + xy: 362, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock3 rotate: false - xy: 362, 172 + xy: 372, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonedrill rotate: false - xy: 372, 172 + xy: 382, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -629,63 +636,63 @@ blocks/stoneedge index: -1 blocks/stonewall rotate: false - xy: 382, 172 + xy: 392, 194 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/thermalgenerator rotate: false - xy: 392, 194 + xy: 392, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium1 rotate: false - xy: 392, 184 + xy: 392, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium2 rotate: false - xy: 392, 174 + xy: 332, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium3 rotate: false - xy: 332, 167 + xy: 342, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumdrill rotate: false - xy: 342, 167 + xy: 352, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumpurifier rotate: false - xy: 352, 162 + xy: 362, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumshieldwall rotate: false - xy: 362, 162 + xy: 372, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall rotate: false - xy: 372, 162 + xy: 382, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -699,35 +706,35 @@ blocks/turret index: -1 blocks/uranium1 rotate: false - xy: 392, 164 + xy: 389, 282 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium2 rotate: false - xy: 389, 282 + xy: 389, 272 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium3 rotate: false - xy: 389, 272 + xy: 389, 262 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uraniumdrill rotate: false - xy: 389, 262 + xy: 389, 252 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/water rotate: false - xy: 389, 252 + xy: 391, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1381,14 +1388,14 @@ weapons/multigun index: -1 weapons/railgun rotate: false - xy: 389, 224 + xy: 389, 214 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 382, 162 + xy: 392, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 991e6853a7..beb78d77be 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/Tutorial.java b/core/src/io/anuke/mindustry/Tutorial.java index 321c295976..3fabf445e6 100644 --- a/core/src/io/anuke/mindustry/Tutorial.java +++ b/core/src/io/anuke/mindustry/Tutorial.java @@ -33,24 +33,27 @@ public class Tutorial{ public void buildUI(table table){ + //TODO maybe align it to the bottom? table.atop(); new table("pane"){{ atop(); - get().pad(Unit.dp.inPixels(14)); + get().pad(Unit.dp.inPixels(12)); + + info = new label(()->stage.text).pad(10f).padBottom(5f).width(340f).units(Unit.dp).colspan(2).get(); + info.setWrap(true); + + row(); prev = new button("< Prev", ()->{ if(!prev.isDisabled()) move(false); - }).get(); - - info = new label(()->stage.text).pad(10f).width(340f).units(Unit.dp).get(); - info.setWrap(true); + }).left().get(); next = new button("Next >", ()->{ if(!next.isDisabled()) move(true); - }).get(); + }).right().get(); }}.end(); diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 6a6ca79f27..44713e17f3 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -345,6 +345,12 @@ public class UI extends SceneModule{ }}.end(); + new table(){{ + control.tutorial.buildUI(this); + + visible(()->control.tutorial.active()); + }}.end(); + //paused table new table(){{ visible(()->GameState.is(State.paused)); @@ -377,12 +383,6 @@ public class UI extends SceneModule{ get().setVisible(play); }}.end(); - - new table(){{ - control.tutorial.buildUI(this); - - visible(()->control.tutorial.active()); - }}.end(); //menu table new table(){{ diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index b5a4494ca3..20ec00b8ee 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -59,6 +59,7 @@ public enum Recipe{ nuclearreactor(power, ProductionBlocks.nuclearReactor, stack(Item.titanium, 10), stack(Item.dirium, 10)), powerbooster(power, DistributionBlocks.powerbooster, stack(Item.titanium, 10), stack(Item.dirium, 10)), powerlaser(power, DistributionBlocks.powerlaser, stack(Item.titanium, 10), stack(Item.dirium, 10)), + powerlaserrouter(power, DistributionBlocks.powerlaserrouter, stack(Item.titanium, 10), stack(Item.dirium, 10)), pump(production, ProductionBlocks.pump, stack(Item.steel, 10)); diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index 8641f47400..fd8db75789 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -70,7 +70,7 @@ public class Generator{ floor = Blocks.titanium; } - if(Noise.nnoise(x + 99999, y + 99999, 6, 1) > 0.256){ + if(Noise.nnoise(x + 99999, y + 99999, 7, 1) > 0.257){ floor = Blocks.uranium; } } diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index 68c3a8d982..bb6370e275 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -308,6 +308,7 @@ public class World{ if(!tile.block().isMultiblock() && !tile.isLinked()){ tile.setBlock(Blocks.air); + Effects.effect("break", tile.worldx(), tile.worldy()); }else{ Tile target = tile.isLinked() ? tile.getLinked() : tile; Array removals = target.getLinkedTiles(); diff --git a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java index 7a3a320503..7899c72bc7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java @@ -51,5 +51,10 @@ public class DistributionBlocks{ { formalName = "power laser"; } + }, + powerlaserrouter = new PowerLaserRouter("powerlaserrouter"){ + { + formalName = "laser router"; + } }; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaser.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaser.java index a34c2ed061..e56114e97f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaser.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaser.java @@ -26,12 +26,32 @@ public class PowerLaser extends PowerBlock{ @Override public void drawOver(Tile tile){ - Tile target = target(tile); - PowerEntity entity = tile.entity(); - if(target != null && entity.power > powerAmount){ - Angles.translation(tile.rotation * 90, 6f); + if(entity.power > powerAmount){ + drawLaserTo(tile, tile.rotation); + } + } + + @Override + public void update(Tile tile){ + PowerEntity entity = tile.entity(); + Tile target = target(tile, tile.rotation); + + if(target == null) return; + + PowerAcceptor p = (PowerAcceptor)target.block(); + if(p.acceptsPower(target) && entity.power >= powerAmount){ + entity.power -= (powerAmount - p.addPower(target, powerAmount)); + } + } + + protected void drawLaserTo(Tile tile, int rotation){ + + Tile target = target(tile, rotation); + + if(target != null){ + Angles.translation(rotation * 90, 6f); Draw.color(Color.GRAY, Color.WHITE, 0.902f + Mathf.sin(Timers.time(), 1.7f, 0.08f)); Draw.alpha(1f); @@ -47,21 +67,11 @@ public class PowerLaser extends PowerBlock{ } } - @Override - public void update(Tile tile){ - PowerEntity entity = tile.entity(); - Tile target = target(tile); - - if(target == null) return; - - PowerAcceptor p = (PowerAcceptor)target.block(); - if(p.acceptsPower(target) && entity.power >= powerAmount){ - entity.power -= (powerAmount - p.addPower(target, powerAmount)); - } - } - - private Tile target(Tile tile){ - GridPoint2 point = Geometry.getD4Points()[tile.rotation]; + protected Tile target(Tile tile, int rotation){ + if(rotation < 0) + rotation += 4; + rotation %= 4; + GridPoint2 point = Geometry.getD4Points()[rotation]; int i = 0; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaserRouter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaserRouter.java new file mode 100644 index 0000000000..2206cc875c --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerLaserRouter.java @@ -0,0 +1,39 @@ +package io.anuke.mindustry.world.blocks.types.distribution; + +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.PowerAcceptor; + +public class PowerLaserRouter extends PowerLaser{ + + public PowerLaserRouter(String name) { + super(name); + } + + @Override + public void drawOver(Tile tile){ + + PowerEntity entity = tile.entity(); + + if(entity.power > powerAmount){ + for(int i = -1; i <= 1; i ++){ + drawLaserTo(tile, tile.rotation + i); + } + } + } + + @Override + public void update(Tile tile){ + PowerEntity entity = tile.entity(); + for(int i = -1; i <= 1; i ++){ + Tile target = target(tile, tile.rotation + i); + + if(target == null) return; + + PowerAcceptor p = (PowerAcceptor)target.block(); + if(p.acceptsPower(target) && entity.power >= powerAmount/3f){ + entity.power -= (powerAmount/3f - p.addPower(target, powerAmount/3f)); + } + } + } + +}