diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 2d86fae1b3..8bdd5a4a7e 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -13,6 +13,7 @@ text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard. text.editor.web=The web version does not support the editor!\nDownload the game to use it. text.web.unsupported=The web version does not support this feature! Download the game to use it. text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page. +text.host.web=The web version does not support hosting games! Download the game to use this feature. text.gameover=The core was destroyed. text.highscore=[YELLOW]New highscore! text.lasted=You lasted until wave diff --git a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java index ac358b9afa..19641ddca1 100644 --- a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java @@ -78,13 +78,11 @@ public class PowerBlocks extends BlockList implements ContentList { battery = new PowerGenerator("battery") {{ powerCapacity = 320f; - hasItems = false; }}; batteryLarge = new PowerGenerator("batterylarge") {{ size = 3; powerCapacity = 2000f; - hasItems = false; }}; powernode = new PowerDistributor("powernode") {{ diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java index 92c4888e64..439d17618c 100644 --- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -8,7 +8,7 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.blocks.units.*; public class UnitBlocks extends BlockList implements ContentList { - public static Block resupplyPoint, repairPoint, droneFactory, dropPoint, reconstructor; + public static Block resupplyPoint, repairPoint, droneFactory, dropPoint, reconstructor, overdriveProjector, shieldProjector; @Override public void load() { @@ -39,5 +39,13 @@ public class UnitBlocks extends BlockList implements ContentList { reconstructor = new Reconstructor("reconstructor") {{ size = 2; }}; + + overdriveProjector = new OverdriveProjector("overdriveprojector") {{ + size = 2; + }}; + + shieldProjector = new ShieldProjector("shieldprojector") {{ + size = 2; + }}; } } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 29209d52e0..e7357665ac 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -39,7 +39,6 @@ import static io.anuke.mindustry.Vars.*; public class NetServer extends Module{ private final static float serverSyncTime = 4, kickDuration = 30 * 1000; - private final static boolean preventDuplicatNames = false; private final static Vector2 vector = new Vector2(); /**If a play goes away of their server-side coordinates by this distance, they get teleported back.*/ private final static float correctDist = 16f; @@ -94,12 +93,19 @@ public class NetServer extends Module{ return; } - if(preventDuplicatNames) { + boolean preventDuplicates = headless; + + if(preventDuplicates) { for (Player player : playerGroup.all()) { if (player.name.equalsIgnoreCase(packet.name)) { kick(id, KickReason.nameInUse); return; } + + if (player.uuid.equals(packet.uuid)) { + kick(id, KickReason.idInUse); + return; + } } } diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index b25bc66f63..db9bb1bb82 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -216,6 +216,27 @@ public class Units { }); } + /**Iterates over all units in a circle around this position.*/ + public static void getNearby(Team team, float x, float y, float radius, Consumer cons){ + rect.setSize(radius * 2).setCenter(x, y); + + EntityGroup group = unitGroups[team.ordinal()]; + if(!group.isEmpty()){ + EntityPhysics.getNearby(group, rect, entity -> { + if(entity.distanceTo(x, y) <= radius) { + cons.accept((Unit) entity); + } + }); + } + + //now check all players + EntityPhysics.getNearby(playerGroup, rect, player -> { + if(((Unit)player).team == team && player.distanceTo(x, y) <= radius){ + cons.accept((Unit)player); + } + }); + } + /**Iterates over all units in a rectangle.*/ public static void getNearby(Rectangle rect, Consumer cons){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index 10a5107727..5caf0f519b 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -63,11 +63,14 @@ public class PausedDialog extends FloatingDialog{ content().row(); - if(!gwt) { - content().addButton("$text.hostserver", () -> { + content().addButton("$text.hostserver", () -> { + if(!gwt){ ui.host.show(); - }).disabled(b -> Net.active()); - } + }else{ + ui.showInfo("$text.host.web"); + } + }).disabled(b -> Net.active()); + content().row(); diff --git a/core/src/io/anuke/mindustry/world/BaseBlock.java b/core/src/io/anuke/mindustry/world/BaseBlock.java index 99d5b1a909..3135812c79 100644 --- a/core/src/io/anuke/mindustry/world/BaseBlock.java +++ b/core/src/io/anuke/mindustry/world/BaseBlock.java @@ -12,7 +12,7 @@ import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; public abstract class BaseBlock { - public boolean hasItems = true; + public boolean hasItems; public boolean hasLiquids; public boolean hasPower; diff --git a/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java b/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java index ff60b5c1cd..bda16d1167 100644 --- a/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/LiquidBlock.java @@ -15,7 +15,6 @@ public class LiquidBlock extends Block{ update = true; solid = true; hasLiquids = true; - hasItems = false; group = BlockGroup.liquids; } diff --git a/core/src/io/anuke/mindustry/world/blocks/Wall.java b/core/src/io/anuke/mindustry/world/blocks/Wall.java index 97004f598f..e28fc5d7e5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Wall.java +++ b/core/src/io/anuke/mindustry/world/blocks/Wall.java @@ -10,7 +10,6 @@ public class Wall extends Block{ solid = true; destructible = true; group = BlockGroup.walls; - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java index 95bc2885d3..56055d7862 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/ShieldBlock.java @@ -23,7 +23,6 @@ public class ShieldBlock extends PowerBlock{ public ShieldBlock(String name) { super(name); powerCapacity = 80f; - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java index 7ebdd7cfc2..0751cb3142 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Turret.java @@ -72,7 +72,6 @@ public abstract class Turret extends Block{ solid = true; layer = Layer.turret; group = BlockGroup.turrets; - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java index 0ed3c2ec1a..2a366bf0d4 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java @@ -19,6 +19,7 @@ public class BufferedItemBridge extends ExtendingItemBridge { public BufferedItemBridge(String name) { super(name); hasPower = false; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java index 5cec679fbf..f427593c6d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ExtendingItemBridge.java @@ -14,6 +14,7 @@ public class ExtendingItemBridge extends ItemBridge { public ExtendingItemBridge(String name) { super(name); + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java index 2c42f3f025..84a18a77c9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -47,6 +47,7 @@ public class ItemBridge extends Block { expanded = true; itemCapacity = 30; configurable = true; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java index af21d078ac..af1995d030 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java @@ -21,7 +21,6 @@ public class Junction extends Block{ solid = true; instantTransfer = true; group = BlockGroup.transportation; - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java index eba073e898..bb1ba9df14 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java @@ -8,6 +8,7 @@ public class OverflowGate extends Splitter { public OverflowGate(String name) { super(name); + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java index 231ad4d4cf..0324fe7447 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java @@ -13,6 +13,7 @@ public class Router extends Block{ update = true; solid = true; itemCapacity = 20; + hasItems = true; group = BlockGroup.transportation; autoSleep = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java index 4fa776dc01..54b4a2e3b5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Splitter.java @@ -13,7 +13,6 @@ public class Splitter extends Block{ solid = true; instantTransfer = true; destructible = true; - hasItems = false; group = BlockGroup.transportation; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java index d53f00d00f..1b636cd22a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConduit.java @@ -16,6 +16,7 @@ public class TunnelConduit extends LiquidBlock { rotate = true; solid = true; health = 70; + hasItems = true; instantTransfer = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java deleted file mode 100644 index da3410c575..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/TunnelConveyor.java +++ /dev/null @@ -1,118 +0,0 @@ -package io.anuke.mindustry.world.blocks.distribution; - -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.NumberUtils; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.meta.BlockGroup; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.util.Bits; - -public class TunnelConveyor extends Block{ - protected int maxdist = 3; - protected float speed = 53; //frames taken to go through this tunnel - protected int capacity = 32; - - protected TunnelConveyor(String name) { - super(name); - rotate = true; - update = true; - solid = true; - health = 70; - instantTransfer = true; - bars.add(new io.anuke.mindustry.world.meta.BlockBar(BarType.inventory, true, tile -> (float)tile.entity().index/capacity)); - group = BlockGroup.transportation; - } - - @Override - public void handleItem(Item item, Tile tile, Tile source){ - TunnelEntity entity = tile.entity(); - - if(entity.index >= entity.buffer.length) return; - - entity.buffer[entity.index ++] = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), item.id); - } - - @Override - public void update(Tile tile){ - TunnelEntity entity = tile.entity(); - - if(entity.index > 0){ - long l = entity.buffer[0]; - float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l)); - - if(Timers.time() >= time + speed || Timers.time() < time){ - - Item item = Item.getByID(Bits.getRightInt(l)); - - Tile tunnel = getDestTunnel(tile, item); - if(tunnel == null) return; - Tile target = tunnel.getNearby(tunnel.getRotation()); - if(target == null) return; - - if(!target.block().acceptItem(item, target, tunnel)) return; - - target.block().handleItem(item, target, tunnel); - System.arraycopy(entity.buffer, 1, entity.buffer, 0, entity.index - 1); - entity.index --; - } - } - } - - @Override - public boolean acceptItem(Item item, Tile tile, Tile source) { - TunnelEntity entity = tile.entity(); - int rot = source.relativeTo(tile.x, tile.y); - return rot == (tile.getRotation() + 2) % 4 && entity.index < entity.buffer.length - 1; - } - - @Override - public TileEntity getEntity() { - return new TunnelEntity(); - } - - @Override - public Array getDebugInfo(Tile tile){ - TunnelEntity entity = tile.entity(); - Array arr = super.getDebugInfo(tile); - for(int i = 0; i < 4; i ++){ - arr.add("nearby." + i); - arr.add(tile.getNearby(i)); - } - - arr.add("buffer"); - arr.add(entity.index); - - for(int i = 0; i < entity.index; i++){ - long l = entity.items.items[i]; - float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l)); - Item item = Item.getByID(Bits.getRightInt(l)); - Tile dest = getDestTunnel(tile, item); - arr.add(" buffer.item"); - arr.add(time + " | " + item.name + " | " + ( dest == null ? "no dest" : dest.block() + ":" + dest.floor())); - } - - return arr; - } - - Tile getDestTunnel(Tile tile, Item item){ - Tile dest = tile; - int rel = (tile.getRotation() + 2)%4; - for(int i = 0; i < maxdist; i ++){ - if(dest == null) return null; - dest = dest.getNearby(rel); - if(dest != null && dest.block() instanceof TunnelConveyor && dest.getRotation() == rel - && dest.getNearby(rel) != null - && dest.getNearby(rel).block().acceptItem(item, dest.getNearby(rel), dest)){ - return dest; - } - } - return null; - } - - class TunnelEntity extends TileEntity { - long[] buffer = new long[capacity]; - int index; - } -} diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/WarpGate.java b/core/src/io/anuke/mindustry/world/blocks/distribution/WarpGate.java index 1b0f65dc0f..4caffe77cd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/WarpGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/WarpGate.java @@ -77,6 +77,7 @@ public class WarpGate extends PowerBlock{ size = 3; itemCapacity = 100; hasLiquids = true; + hasItems = true; liquidCapacity = 100f; configurable = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java index 46d0cb29c2..59a4095244 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/BurnerGenerator.java @@ -27,6 +27,7 @@ public class BurnerGenerator extends PowerGenerator { public BurnerGenerator(String name) { super(name); itemCapacity = 20; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java index ce5f1599c7..84600c225e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/DecayGenerator.java @@ -6,6 +6,7 @@ public class DecayGenerator extends BurnerGenerator { public DecayGenerator(String name) { super(name); + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java index da872476d4..5a9edf6fba 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/LiquidBurnerGenerator.java @@ -23,7 +23,6 @@ public class LiquidBurnerGenerator extends PowerGenerator { super(name); liquidCapacity = 30f; hasLiquids = true; - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java index be2b1b31de..081bf37cb7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/LiquidHeatGenerator.java @@ -6,7 +6,6 @@ public class LiquidHeatGenerator extends LiquidBurnerGenerator { public LiquidHeatGenerator(String name) { super(name); - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java index 50afa3af4e..e05082a3f0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerDistributor.java @@ -47,7 +47,6 @@ public class PowerDistributor extends PowerBlock{ super(name); expanded = true; layer = Layer.power; - hasItems = false; powerCapacity = 5f; configurable = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java index 3d8ff7338a..47513fe2b5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java @@ -3,13 +3,12 @@ package io.anuke.mindustry.world.blocks.power; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; -public class SolarGenerator extends io.anuke.mindustry.world.blocks.power.PowerGenerator { +public class SolarGenerator extends PowerGenerator { /**power generated per frame*/ protected float generation = 0.005f; public SolarGenerator(String name){ super(name); - hasItems = false; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index b089814f7d..7c1b733c4b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -65,6 +65,7 @@ public class Drill extends Block{ group = BlockGroup.drills; hasLiquids = true; liquidCapacity = 5f; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java index a7902a1e33..d826013d8a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java @@ -13,6 +13,7 @@ public class Fracker extends SolidPump { public Fracker(String name) { super(name); + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java index 2dd5731110..4437f70165 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java @@ -25,7 +25,7 @@ import java.io.IOException; public class GenericCrafter extends Block{ protected final int timerDump = timers++; - /**Can be null. If you use this, make sure to set hasInvetory to true!*/ + /**Can be null. If you use this, make sure to set hasItems to true!*/ protected ItemStack inputItem; /**Can be null. If you use this, make sure to set hasLiquids to true!*/ protected Liquid inputLiquid; diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java index e5e5f28432..b230121294 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java @@ -23,7 +23,6 @@ public class Incinerator extends Block { public Incinerator(String name) { super(name); hasPower = true; - hasItems = false; hasLiquids = true; update = true; solid = true; diff --git a/core/src/io/anuke/mindustry/world/blocks/production/MechFactory.java b/core/src/io/anuke/mindustry/world/blocks/production/MechFactory.java index a4f9bbc869..9f66c7a352 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/MechFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/MechFactory.java @@ -36,6 +36,7 @@ public class MechFactory extends Block{ public MechFactory(String name){ super(name); solid = true; + hasItems = true; destructible = true; configurable = true; update = true; diff --git a/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java b/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java index 7146af500f..af6fb7aac5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/PowerCrafter.java @@ -28,6 +28,7 @@ public class PowerCrafter extends Block{ solid = true; update = true; hasPower = true; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java b/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java index 3cc3faa432..daa8e0d877 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/PowerSmelter.java @@ -46,6 +46,7 @@ public class PowerSmelter extends PowerBlock { public PowerSmelter(String name) { super(name); + hasItems = true; update = true; solid = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java b/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java index fd3015c915..d9bdfe2930 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Pulverizer.java @@ -8,6 +8,7 @@ public class Pulverizer extends GenericCrafter { public Pulverizer(String name) { super(name); + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java index 165d047ea8..85eecc87a7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java @@ -36,6 +36,7 @@ public class Smelter extends Block{ public Smelter(String name) { super(name); update = true; + hasItems = true; solid = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java index fd20d72728..f65cf710c6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java @@ -9,6 +9,7 @@ public abstract class StorageBlock extends Block { public StorageBlock(String name){ super(name); + hasItems = true; } /**Removes an item and returns it. If item is not null, it should return the item. diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java index 3f935e1c1d..71d801153e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -15,6 +15,7 @@ public class Unloader extends Block { solid = true; health = 70; group = BlockGroup.transportation; + hasItems = true; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/units/OverdriveProjector.java b/core/src/io/anuke/mindustry/world/blocks/units/OverdriveProjector.java new file mode 100644 index 0000000000..00cd0d2397 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/units/OverdriveProjector.java @@ -0,0 +1,8 @@ +package io.anuke.mindustry.world.blocks.units; + +public class OverdriveProjector extends Projector { + + public OverdriveProjector(String name) { + super(name); + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/units/Projector.java b/core/src/io/anuke/mindustry/world/blocks/units/Projector.java new file mode 100644 index 0000000000..f309688d30 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/units/Projector.java @@ -0,0 +1,34 @@ +package io.anuke.mindustry.world.blocks.units; + +import io.anuke.mindustry.entities.Units; +import io.anuke.mindustry.type.StatusEffect; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Timers; + +public abstract class Projector extends Block { + protected final int timerApply = timers++; + protected final float applyTime = 4f; + + protected float powerUse = 0.01f; + protected float range = 40f; + + protected StatusEffect status; + protected float intensity; + + public Projector(String name) { + super(name); + hasPower = true; + update = true; + solid = true; + } + + @Override + public void update(Tile tile) { + if(Timers.get(timerApply, applyTime)) { + Units.getNearby(tile.getTeam(), tile.drawx(), tile.drawy(), range, unit -> { + unit.applyEffect(status, intensity); + }); + } + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java index 4ed94ae4cc..c7f321d2e0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java @@ -34,7 +34,6 @@ public class RepairPoint extends Block{ flags = EnumSet.of(BlockFlag.repair); layer = Layer.turret; layer2 = Layer.laser; - hasItems = false; hasPower = true; powerCapacity = 20f; } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/ShieldProjector.java b/core/src/io/anuke/mindustry/world/blocks/units/ShieldProjector.java new file mode 100644 index 0000000000..c2c2c6976c --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/units/ShieldProjector.java @@ -0,0 +1,11 @@ +package io.anuke.mindustry.world.blocks.units; + +import io.anuke.mindustry.world.Block; + +public class ShieldProjector extends Projector { + + public ShieldProjector(String name) { + super(name); + hasPower = true; + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java index 3e57e76e95..6cfd42443c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java @@ -1,7 +1,6 @@ package io.anuke.mindustry.world.blocks.units; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.math.Rectangle; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.entities.TileEntity; @@ -14,9 +13,9 @@ import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.meta.BlockBar; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.modules.InventoryModule; +import io.anuke.mindustry.world.meta.BlockBar; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Timers; @@ -29,8 +28,6 @@ import java.io.DataOutputStream; import java.io.IOException; public class UnitFactory extends Block { - private final Rectangle rect = new Rectangle(); - protected UnitType type; protected ItemStack[] requirements; protected float produceTime = 1000f; @@ -43,6 +40,7 @@ public class UnitFactory extends Block { super(name); update = true; hasPower = true; + hasItems = true; solidifes = true; }