diff --git a/core/assets-raw/sprites/blocks/combustiongenerator.png b/core/assets-raw/sprites/blocks/combustiongenerator.png index 44e47307ac..968b4224a7 100644 Binary files a/core/assets-raw/sprites/blocks/combustiongenerator.png and b/core/assets-raw/sprites/blocks/combustiongenerator.png differ diff --git a/core/assets-raw/sprites/blocks/powerbooster.png b/core/assets-raw/sprites/blocks/powerbooster.png new file mode 100644 index 0000000000..5d0ce18461 Binary files /dev/null and b/core/assets-raw/sprites/blocks/powerbooster.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 82a8669d54..a2f1f70da8 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -417,27 +417,34 @@ blocks/plasmaturret orig: 10, 10 offset: 0, 0 index: -1 -blocks/poweredconveyor +blocks/powerbooster rotate: false xy: 489, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/poweredconveyormove +blocks/poweredconveyor rotate: false xy: 499, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/pump +blocks/poweredconveyormove rotate: false xy: 479, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +blocks/pump + rotate: false + xy: 489, 387 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 blocks/repairturret rotate: false xy: 177, 2 @@ -447,35 +454,35 @@ blocks/repairturret index: -1 blocks/rock rotate: false - xy: 499, 387 + xy: 389, 224 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2 rotate: false - xy: 389, 224 + xy: 389, 214 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2shadow rotate: false - xy: 389, 214 + xy: 389, 204 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow rotate: false - xy: 389, 204 + xy: 332, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/router rotate: false - xy: 332, 197 + xy: 332, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -489,7 +496,7 @@ blocks/shadow index: -1 blocks/shieldgenerator rotate: false - xy: 332, 187 + xy: 342, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -503,21 +510,21 @@ blocks/shotgunturret index: -1 blocks/shrub rotate: false - xy: 342, 197 + xy: 332, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shrubshadow rotate: false - xy: 332, 177 + xy: 342, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/smelter rotate: false - xy: 342, 187 + xy: 342, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -531,21 +538,21 @@ blocks/sniperturret index: -1 blocks/steelconveyor rotate: false - xy: 342, 177 + xy: 352, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyormove rotate: false - xy: 352, 192 + xy: 352, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall rotate: false - xy: 352, 182 + xy: 362, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -559,49 +566,49 @@ blocks/stone index: -1 blocks/stone1 rotate: false - xy: 362, 192 + xy: 362, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone2 rotate: false - xy: 362, 182 + xy: 372, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone3 rotate: false - xy: 372, 192 + xy: 372, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock rotate: false - xy: 372, 182 + xy: 382, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock2 rotate: false - xy: 382, 192 + xy: 382, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock3 rotate: false - xy: 382, 182 + xy: 352, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonedrill rotate: false - xy: 352, 172 + xy: 362, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -615,63 +622,63 @@ blocks/stoneedge index: -1 blocks/stonewall rotate: false - xy: 362, 172 + xy: 372, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/thermalgenerator rotate: false - xy: 372, 172 + xy: 382, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium1 rotate: false - xy: 382, 172 + xy: 392, 194 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium2 rotate: false - xy: 392, 194 + xy: 392, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium3 rotate: false - xy: 392, 184 + xy: 392, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumdrill rotate: false - xy: 392, 174 + xy: 332, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumpurifier rotate: false - xy: 332, 167 + xy: 342, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumshieldwall rotate: false - xy: 342, 167 + xy: 352, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall rotate: false - xy: 352, 162 + xy: 362, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -685,35 +692,35 @@ blocks/turret index: -1 blocks/uranium1 rotate: false - xy: 372, 162 + xy: 382, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium2 rotate: false - xy: 382, 162 + xy: 392, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium3 rotate: false - xy: 392, 164 + xy: 389, 282 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uraniumdrill rotate: false - xy: 389, 282 + xy: 389, 272 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/water rotate: false - xy: 389, 272 + xy: 389, 262 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1367,14 +1374,14 @@ weapons/multigun index: -1 weapons/railgun rotate: false - xy: 489, 387 + xy: 499, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 362, 162 + xy: 372, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index bf73a14cd1..5a5595a6c1 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/Renderer.java b/core/src/io/anuke/mindustry/Renderer.java index b466e1b20d..29b192a53a 100644 --- a/core/src/io/anuke/mindustry/Renderer.java +++ b/core/src/io/anuke/mindustry/Renderer.java @@ -305,7 +305,8 @@ public class Renderer extends RendererModule{ x = tilex*tilesize; y = tiley*tilesize; - boolean valid = World.validPlace(tilex, tiley, player.recipe.result); + boolean valid = World.validPlace(tilex, tiley, player.recipe.result) && (android || + Input.cursorNear()); Vector2 offset = player.recipe.result.getPlaceOffset(); diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 861c64143a..87d559a922 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -17,6 +17,8 @@ public enum Recipe{ healturret(defense, DefenseBlocks.repairturret, stack(Item.iron, 30)), megahealturret(defense, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), titaniumshieldwall(defense, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 2)), + shieldgenerator(defense, DefenseBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), + conveyor(distribution, DistributionBlocks.conveyor, stack(Item.stone, 1)), steelconveyor(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)), @@ -55,7 +57,7 @@ public enum Recipe{ thermalgenerator(power, ProductionBlocks.thermalgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), combustiongenerator(power, ProductionBlocks.combustiongenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), nuclearreactor(power, ProductionBlocks.nuclearReactor, stack(Item.titanium, 10), stack(Item.dirium, 10)), - shieldgenerator(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), + powerbooster(power, DistributionBlocks.powerbooster, 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/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java index 90eb488389..337821ed48 100644 --- a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java @@ -41,5 +41,10 @@ public class DistributionBlocks{ }, liquidjunction = new LiquidJunction("liquidjunction"){ + }, + powerbooster = new PowerBooster("powerbooster"){ + { + formalName = "power booster"; + } }; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java b/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java index b2d62dc92b..8ef032b353 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/BlockPart.java @@ -65,8 +65,19 @@ public class BlockPart extends Block implements PowerAcceptor, LiquidAcceptor{ } } + @Override + public boolean acceptsPower(Tile tile){ + Block block = linked(tile); + if(block instanceof PowerAcceptor){ + return ((PowerAcceptor)block).acceptsPower(tile.getLinked()); + }else{ + return false; + } + } + private Block linked(Tile tile){ return tile.getLinked().block(); } + } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/PowerAcceptor.java b/core/src/io/anuke/mindustry/world/blocks/types/PowerAcceptor.java index d2505aa3ca..282f9ca222 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/PowerAcceptor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/PowerAcceptor.java @@ -6,4 +6,5 @@ public interface PowerAcceptor{ /**Attempts to add some power to this block; returns the amount of power not accepted. * To add no power, you would return amount.*/ public float addPower(Tile tile, float amount); + public boolean acceptsPower(Tile tile); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java index 9749c82721..237eb189af 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/PowerBlock.java @@ -15,6 +15,7 @@ import io.anuke.ucore.util.Mathf; public abstract class PowerBlock extends Block implements PowerAcceptor{ public float powerCapacity = 10f; + public float voltage = 0.001f; public PowerBlock(String name) { super(name); @@ -47,8 +48,19 @@ public abstract class PowerBlock extends Block implements PowerAcceptor{ return false; } + @Override + public boolean acceptsPower(Tile tile){ + PowerEntity entity = tile.entity(); + + return entity.power + 0.001f <= powerCapacity; + } + + //TODO voltage requirement so blocks need specific voltage @Override public float addPower(Tile tile, float amount){ + if(amount < voltage){ + return amount; + } PowerEntity entity = tile.entity(); float canAccept = Math.min(powerCapacity - entity.power, amount); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java index 91d71752de..53cb4f6774 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java @@ -14,6 +14,7 @@ public class ShieldBlock extends PowerBlock{ public ShieldBlock(String name) { super(name); + voltage = powerDrain; } @Override @@ -27,7 +28,7 @@ public class ShieldBlock extends PowerBlock{ } if(entity.power > powerDrain * Timers.delta()){ - if(!entity.shield.active){ + if(!entity.shield.active && entity.power > powerDrain * Timers.delta() * 10f){ entity.shield.add(); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java index 2a4d015ecf..a225079cac 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java @@ -16,11 +16,9 @@ public class PowerBooster extends Generator{ } @Override - public float addPower(Tile tile, float amount){ + public boolean acceptsPower(Tile tile){ PowerEntity entity = tile.entity(); - float canAccept = Math.min(powerCapacity - entity.power, amount); - entity.power += canAccept; - return canAccept; + return entity.power + 0.001f <= powerCapacity; } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java index 098841b0e4..1910fc92d0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java @@ -51,7 +51,8 @@ public class Generator extends PowerBlock{ if(Vector2.dst(x, y, 0, 0) < powerRange){ Tile dest = World.tile(tile.x + x, tile.y + y); - if(dest != null && dest.block() instanceof PowerAcceptor){ + if(dest != null && dest.block() instanceof PowerAcceptor && + ((PowerAcceptor)dest.block()).acceptsPower(dest)){ if(i == 1){ PowerAcceptor block = (PowerAcceptor) dest.block(); @@ -67,15 +68,15 @@ public class Generator extends PowerBlock{ } } + //TODO better distribution scheme if(i == 0 && acceptors > 0){ - flow = Mathf.clamp(powerSpeed / acceptors, 0f, p.power / acceptors); + flow = Mathf.clamp(p.power / acceptors, 0f, powerSpeed / acceptors); } } } - //don't accept any power @Override - public float addPower(Tile tile, float amount){ - return amount; + public boolean acceptsPower(Tile tile){ + return false; } }