From 5e2dd89d3b1de25029ae83246878fbfd057755ba Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 18 Nov 2019 16:24:57 -0500 Subject: [PATCH] Entity type cleanup --- core/src/io/anuke/mindustry/world/Block.java | 5 ++-- .../mindustry/world/blocks/BuildBlock.java | 6 +--- .../world/blocks/defense/DeflectorWall.java | 6 +--- .../mindustry/world/blocks/defense/Door.java | 6 +--- .../world/blocks/defense/ForceProjector.java | 6 +--- .../world/blocks/defense/MendProjector.java | 6 +--- .../blocks/defense/OverdriveProjector.java | 6 +--- .../blocks/defense/turrets/ChargeTurret.java | 21 +++++-------- .../blocks/defense/turrets/ItemTurret.java | 6 +--- .../blocks/defense/turrets/LaserTurret.java | 6 +--- .../world/blocks/defense/turrets/Turret.java | 6 +--- .../distribution/BufferedItemBridge.java | 14 +++------ .../world/blocks/distribution/Conveyor.java | 6 +--- .../world/blocks/distribution/ItemBridge.java | 6 +--- .../world/blocks/distribution/Junction.java | 6 +--- .../world/blocks/distribution/MassDriver.java | 14 +-------- .../blocks/distribution/OverflowGate.java | 6 +--- .../world/blocks/distribution/Router.java | 6 +--- .../world/blocks/distribution/Sorter.java | 7 +---- .../world/blocks/liquid/Conduit.java | 6 +--- .../world/blocks/logic/MessageBlock.java | 8 +---- .../world/blocks/power/ImpactReactor.java | 7 +---- .../blocks/power/ItemLiquidGenerator.java | 10 ++----- .../world/blocks/power/LightBlock.java | 12 ++++++++ .../world/blocks/power/NuclearReactor.java | 7 +---- .../world/blocks/power/PowerGenerator.java | 6 +--- .../world/blocks/power/SolarGenerator.java | 14 ++------- .../world/blocks/production/Cultivator.java | 6 +--- .../world/blocks/production/Drill.java | 6 +--- .../world/blocks/production/Fracker.java | 7 +---- .../blocks/production/GenericCrafter.java | 6 +--- .../world/blocks/production/Incinerator.java | 6 +--- .../world/blocks/production/Separator.java | 30 +++++++------------ .../world/blocks/production/SolidPump.java | 6 +--- .../world/blocks/sandbox/ItemSource.java | 6 +--- .../world/blocks/sandbox/LiquidSource.java | 6 +--- .../world/blocks/storage/CoreBlock.java | 6 +--- .../world/blocks/storage/StorageBlock.java | 6 +--- .../world/blocks/storage/Unloader.java | 6 +--- .../world/blocks/units/CommandCenter.java | 6 +--- .../mindustry/world/blocks/units/MechPad.java | 6 +--- .../world/blocks/units/RepairPoint.java | 6 +--- .../world/blocks/units/UnitFactory.java | 7 ++--- 43 files changed, 79 insertions(+), 258 deletions(-) diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 1b0afa7d7d..f389886f41 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -139,6 +139,7 @@ public class Block extends BlockStorage{ protected TextureRegion[] cacheRegions = {}; protected Array cacheRegionStrings = new Array<>(); + protected Prov entityType = TileEntity::new; protected Array tempTiles = new Array<>(); protected TextureRegion[] generatedIcons; @@ -856,8 +857,8 @@ public class Block extends BlockStorage{ return destructible || update; } - public TileEntity newEntity(){ - return new TileEntity(); + public final TileEntity newEntity(){ + return entityType.get(); } /** Offset for placing and drawing multiblocks. */ diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index 799eaffaba..45023deac8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -42,6 +42,7 @@ public class BuildBlock extends Block{ layer = Layer.placement; consumesTap = true; solidifes = true; + entityType = BuildEntity::new; buildBlocks[size - 1] = this; } @@ -197,11 +198,6 @@ public class BuildBlock extends Block{ } } - @Override - public TileEntity newEntity(){ - return new BuildEntity(); - } - public class BuildEntity extends TileEntity{ /** * The recipe of the block that is being constructed. diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/DeflectorWall.java b/core/src/io/anuke/mindustry/world/blocks/defense/DeflectorWall.java index de358e7b53..1dff9f636c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/DeflectorWall.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/DeflectorWall.java @@ -20,6 +20,7 @@ public class DeflectorWall extends Wall{ public DeflectorWall(String name){ super(name); + entityType = DeflectorEntity::new; } @Override @@ -72,11 +73,6 @@ public class DeflectorWall extends Wall{ ((DeflectorEntity)entity).hit = 1f; } - @Override - public TileEntity newEntity(){ - return new DeflectorEntity(); - } - public static class DeflectorEntity extends TileEntity{ public float hit; } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java index d10afac6aa..b0c83fba9d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Door.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Door.java @@ -31,6 +31,7 @@ public class Door extends Wall{ solid = false; solidifes = true; consumesTap = true; + entityType = DoorEntity::new; } @Remote(called = Loc.server) @@ -89,11 +90,6 @@ public class Door extends Wall{ Call.onDoorToggle(null, tile, !entity.open); } - @Override - public TileEntity newEntity(){ - return new DoorEntity(); - } - public class DoorEntity extends TileEntity{ public boolean open = false; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java index 0ef91424a3..333d3818ae 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/ForceProjector.java @@ -54,6 +54,7 @@ public class ForceProjector extends Block{ hasLiquids = true; hasItems = true; consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.1f)).boost().update(false); + entityType = ForceEntity::new; } @Override @@ -179,11 +180,6 @@ public class ForceProjector extends Block{ Draw.reset(); } - @Override - public TileEntity newEntity(){ - return new ForceEntity(); - } - class ForceEntity extends TileEntity{ ShieldEntity shield; boolean broken = true; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java index 53d1d0cc5f..5ba2461265 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java @@ -38,6 +38,7 @@ public class MendProjector extends Block{ update = true; hasPower = true; hasItems = true; + entityType = MendEntity::new; } @Override @@ -137,11 +138,6 @@ public class MendProjector extends Block{ renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), color, 0.7f * tile.entity.efficiency()); } - @Override - public TileEntity newEntity(){ - return new MendEntity(); - } - class MendEntity extends TileEntity{ float heat; float charge = Mathf.random(reload); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java index d0a27e81d1..cc8c99a54e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java @@ -37,6 +37,7 @@ public class OverdriveProjector extends Block{ hasPower = true; hasItems = true; canOverdrive = false; + entityType = OverdriveEntity::new; } @Override @@ -137,11 +138,6 @@ public class OverdriveProjector extends Block{ Draw.reset(); } - @Override - public TileEntity newEntity(){ - return new OverdriveEntity(); - } - class OverdriveEntity extends TileEntity{ float heat; float charge = Mathf.random(reload); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java index aa7151df98..3f02328eed 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ChargeTurret.java @@ -1,13 +1,12 @@ package io.anuke.mindustry.world.blocks.defense.turrets; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.Effects.Effect; -import io.anuke.mindustry.entities.bullet.BulletType; -import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.world.Tile; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.Effects.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.tilesize; @@ -21,6 +20,7 @@ public class ChargeTurret extends PowerTurret{ public ChargeTurret(String name){ super(name); + entityType = LaserTurretEntity::new; } @Override @@ -59,11 +59,6 @@ public class ChargeTurret extends PowerTurret{ return !entity.shooting; } - @Override - public TileEntity newEntity(){ - return new LaserTurretEntity(); - } - public class LaserTurretEntity extends TurretEntity{ public boolean shooting; } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java index 3cce48833e..dca1324e66 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -28,6 +28,7 @@ public class ItemTurret extends CooledTurret{ public ItemTurret(String name){ super(name); hasItems = true; + entityType = ItemTurretEntity::new; } /** Initializes accepted ammo map. Format: [item1, bullet1, item2, bullet2...] */ @@ -148,11 +149,6 @@ public class ItemTurret extends CooledTurret{ return ammo != null && ammo.get(item) != null && entity.totalAmmo + ammo.get(item).ammoMultiplier <= maxAmmo; } - @Override - public TileEntity newEntity(){ - return new ItemTurretEntity(); - } - public class ItemTurretEntity extends TurretEntity{ @Override public void write(DataOutput stream) throws IOException{ diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java index d6b94f872c..2766e79724 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -23,6 +23,7 @@ public class LaserTurret extends PowerTurret{ consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.01f)).update(false); coolantMultiplier = 1f; + entityType = LaserTurretEntity::new; } @Override @@ -99,11 +100,6 @@ public class LaserTurret extends PowerTurret{ entity.bulletLife = shootDuration; } - @Override - public TileEntity newEntity(){ - return new LaserTurretEntity(); - } - @Override public boolean shouldActiveSound(Tile tile){ LaserTurretEntity entity = tile.entity(); diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java index e0b815d583..05edbe5091 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/turrets/Turret.java @@ -79,6 +79,7 @@ public abstract class Turret extends Block{ group = BlockGroup.turrets; flags = EnumSet.of(BlockFlag.turret); outlineIcon = true; + entityType = TurretEntity::new; } @Override @@ -305,11 +306,6 @@ public abstract class Turret extends Block{ return (tile.entity instanceof TurretEntity); } - @Override - public TileEntity newEntity(){ - return new TurretEntity(); - } - public static abstract class AmmoEntry{ public int amount; 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 74d47e2c6d..4fc815676d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/BufferedItemBridge.java @@ -1,10 +1,8 @@ package io.anuke.mindustry.world.blocks.distribution; -import io.anuke.arc.math.Mathf; -import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.world.ItemBuffer; -import io.anuke.mindustry.world.Tile; +import io.anuke.arc.math.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; import java.io.*; @@ -18,6 +16,7 @@ public class BufferedItemBridge extends ExtendingItemBridge{ super(name); hasPower = false; hasItems = true; + entityType = BufferedItemBridgeEntity::new; } @Override @@ -38,11 +37,6 @@ public class BufferedItemBridge extends ExtendingItemBridge{ } } - @Override - public TileEntity newEntity(){ - return new BufferedItemBridgeEntity(); - } - class BufferedItemBridgeEntity extends ItemBridgeEntity{ ItemBuffer buffer = new ItemBuffer(bufferCapacity, speed); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java index 9a909700e5..e05812d523 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java @@ -43,6 +43,7 @@ public class Conveyor extends Block implements Autotiler{ hasItems = true; itemCapacity = 4; conveyorPlacement = true; + entityType = ConveyorEntity::new; idleSound = Sounds.conveyor; idleSoundVolume = 0.004f; @@ -342,11 +343,6 @@ public class Conveyor extends Block implements Autotiler{ entity.lastInserted = (byte)(entity.convey.size - 1); } - @Override - public TileEntity newEntity(){ - return new ConveyorEntity(); - } - public static class ConveyorEntity extends TileEntity{ LongArray convey = new LongArray(); 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 89c6d868d9..826f35fbfd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/ItemBridge.java @@ -41,6 +41,7 @@ public class ItemBridge extends Block{ hasItems = true; unloadable = false; group = BlockGroup.transportation; + entityType = ItemBridgeEntity::new; } @Override @@ -340,11 +341,6 @@ public class ItemBridge extends Block{ return rel != rel2; } - @Override - public TileEntity newEntity(){ - return new ItemBridgeEntity(); - } - public boolean linkValid(Tile tile, Tile other){ return linkValid(tile, other, true); } 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 e184492864..7877317185 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java @@ -27,6 +27,7 @@ public class Junction extends Block{ instantTransfer = true; group = BlockGroup.transportation; unloadable = false; + entityType = JunctionEntity::new; } @Override @@ -87,11 +88,6 @@ public class Junction extends Block{ return to != null && to.link().entity != null; } - @Override - public TileEntity newEntity(){ - return new JunctionEntity(); - } - class JunctionEntity extends TileEntity{ DirectionalItemBuffer buffer = new DirectionalItemBuffer(capacity, speed); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java index 61caaa5fae..c4a1aba990 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -42,16 +42,9 @@ public class MassDriver extends Block{ layer = Layer.turret; hasPower = true; outlineIcon = true; + entityType = MassDriverEntity::new; } - /* - @Remote(targets = Loc.both, called = Loc.server, forward = true) - public static void linkMassDriver(Player player, Tile tile, int position){ - if(!Units.canInteract(player, tile)) return; - MassDriverEntity entity = tile.entity(); - entity.link = position; - }*/ - @Override public void configured(Tile tile, Player player, int value){ tile.entity().link = value; @@ -213,11 +206,6 @@ public class MassDriver extends Block{ return tile.entity.items.total() < itemCapacity && linkValid(tile); } - @Override - public TileEntity newEntity(){ - return new MassDriverEntity(); - } - protected void fire(Tile tile, Tile target){ MassDriverEntity entity = tile.entity(); MassDriverEntity other = target.entity(); 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 e1bdc27bd8..b25635e005 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/OverflowGate.java @@ -19,6 +19,7 @@ public class OverflowGate extends Block{ update = true; group = BlockGroup.transportation; unloadable = false; + entityType = OverflowGateEntity::new; } @Override @@ -108,11 +109,6 @@ public class OverflowGate extends Block{ return to; } - @Override - public TileEntity newEntity(){ - return new OverflowGateEntity(); - } - public class OverflowGateEntity extends TileEntity{ Item lastItem; Tile lastInput; 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 bd92126717..fdff392743 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Router.java @@ -19,6 +19,7 @@ public class Router extends Block{ itemCapacity = 1; group = BlockGroup.transportation; unloadable = false; + entityType = RouterEntity::new; } @Override @@ -82,11 +83,6 @@ public class Router extends Block{ return result; } - @Override - public TileEntity newEntity(){ - return new RouterEntity(); - } - public class RouterEntity extends TileEntity{ Item lastItem; Tile lastInput; diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java index 46486bc074..eec9fc1f98 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -28,6 +28,7 @@ public class Sorter extends Block{ group = BlockGroup.transportation; configurable = true; unloadable = false; + entityType = SorterEntity::new; } @Override @@ -137,12 +138,6 @@ public class Sorter extends Block{ }); } - @Override - public TileEntity newEntity(){ - return new SorterEntity(); - } - - public class SorterEntity extends TileEntity{ @Nullable Item sortItem; diff --git a/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java b/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java index a17b4f6376..80c2ab5baf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/liquid/Conduit.java @@ -29,6 +29,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ solid = false; floating = true; conveyorPlacement = true; + entityType = ConduitEntity::new; } @Override @@ -130,11 +131,6 @@ public class Conduit extends LiquidBlock implements Autotiler{ && ((source.absoluteRelativeTo(tile.x, tile.y) + 2) % 4 != tile.rotation()); } - @Override - public TileEntity newEntity(){ - return new ConduitEntity(); - } - public static class ConduitEntity extends TileEntity{ public float smoothLiquid; diff --git a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java index 0c21c5db15..da13ab499f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/logic/MessageBlock.java @@ -7,14 +7,12 @@ import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.scene.ui.TextField.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.*; -import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.*; import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.dialogs.*; @@ -33,6 +31,7 @@ public class MessageBlock extends Block{ configurable = true; solid = true; destructible = true; + entityType = MessageBlockEntity::new; } @Remote(targets = Loc.both, called = Loc.both, forward = true) @@ -147,11 +146,6 @@ public class MessageBlock extends Block{ table.setPosition(pos.x, pos.y, Align.bottom); } - @Override - public TileEntity newEntity(){ - return new MessageBlockEntity(); - } - public class MessageBlockEntity extends TileEntity{ protected String message = ""; protected String[] lines = {""}; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java index bebb81e7e6..6c55c9e466 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java @@ -7,7 +7,6 @@ import io.anuke.arc.math.*; import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; -import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; @@ -39,6 +38,7 @@ public class ImpactReactor extends PowerGenerator{ liquidCapacity = 30f; hasItems = true; outputsPower = consumesPower = true; + entityType = FusionReactorEntity::new; bottomRegion = reg("-bottom"); plasmaRegions = new int[plasmas]; @@ -127,11 +127,6 @@ public class ImpactReactor extends PowerGenerator{ return new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name)}; } - @Override - public TileEntity newEntity(){ - return new FusionReactorEntity(); - } - @Override public void onDestroyed(Tile tile){ super.onDestroyed(tile); diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java index 22133bf2bb..07effa5b30 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -8,7 +8,6 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.Effects.*; -import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.consumers.*; @@ -37,15 +36,15 @@ public class ItemLiquidGenerator extends PowerGenerator{ protected boolean defaults = false; public ItemLiquidGenerator(boolean hasItems, boolean hasLiquids, String name){ - super(name); + this(name); this.hasItems = hasItems; this.hasLiquids = hasLiquids; - setDefaults(); } public ItemLiquidGenerator(String name){ super(name); + this.entityType = ItemLiquidGeneratorEntity::new; } protected void setDefaults(){ @@ -189,11 +188,6 @@ public class ItemLiquidGenerator extends PowerGenerator{ return 0.0f; } - @Override - public TileEntity newEntity(){ - return new ItemLiquidGeneratorEntity(); - } - public static class ItemLiquidGeneratorEntity extends GeneratorEntity{ public float explosiveness; public float heat; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java b/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java index f2c0a6830c..02fc2227b1 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/LightBlock.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.world.blocks.power; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; +import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.renderer; @@ -17,6 +18,8 @@ public class LightBlock extends Block{ hasPower = true; update = true; topRegion = reg("-top"); + configurable = true; + entityType = LightEntity::new; } @Override @@ -29,8 +32,17 @@ public class LightBlock extends Block{ Draw.blend(); } + @Override + public void configured(Tile tile, Player player, int value){ + tile.entity().color = value; + } + @Override public void drawLight(Tile tile){ renderer.lights.add(tile.drawx(), tile.drawy(), radius, color, brightness * tile.entity.efficiency()); } + + public class LightEntity extends TileEntity{ + public int color; + } } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java index 7815caec2d..29928230d5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java @@ -8,7 +8,6 @@ import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; -import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; @@ -46,6 +45,7 @@ public class NuclearReactor extends PowerGenerator{ liquidCapacity = 30; hasItems = true; hasLiquids = true; + entityType = NuclearReactorEntity::new; } @Override @@ -181,11 +181,6 @@ public class NuclearReactor extends PowerGenerator{ Draw.reset(); } - @Override - public TileEntity newEntity(){ - return new NuclearReactorEntity(); - } - public static class NuclearReactorEntity extends GeneratorEntity{ public float heat; public float flash; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java index f4e1597445..9f0f21f008 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGenerator.java @@ -20,6 +20,7 @@ public class PowerGenerator extends PowerDistributor{ super(name); baseExplosiveness = 5f; flags = EnumSet.of(BlockFlag.producer); + entityType = GeneratorEntity::new; } @Override @@ -51,11 +52,6 @@ public class PowerGenerator extends PowerDistributor{ return false; } - @Override - public TileEntity newEntity(){ - return new GeneratorEntity(); - } - public static class GeneratorEntity extends TileEntity{ public float generateTime; /** The efficiency of the producer. An efficiency of 1.0 means 100% */ 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 248bc2d104..4844fc2297 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/SolarGenerator.java @@ -1,9 +1,8 @@ package io.anuke.mindustry.world.blocks.power; -import io.anuke.arc.collection.EnumSet; -import io.anuke.mindustry.entities.type.TileEntity; +import io.anuke.arc.collection.*; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.meta.StatUnit; +import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.state; @@ -13,6 +12,7 @@ public class SolarGenerator extends PowerGenerator{ super(name); // Remove the BlockFlag.producer flag to make this a lower priority target than other generators. flags = EnumSet.of(); + entityType = GeneratorEntity::new; } @Override @@ -27,12 +27,4 @@ public class SolarGenerator extends PowerGenerator{ stats.remove(generationType); stats.add(generationType, powerProduction * 60.0f, StatUnit.powerSecond); } - - @Override - public TileEntity newEntity(){ - return new GeneratorEntity(){{ - productionEfficiency = 1.0f; - }}; - } - } diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java index 62bdef1e2d..c3901d435c 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java @@ -28,6 +28,7 @@ public class Cultivator extends GenericCrafter{ public Cultivator(String name){ super(name); craftEffect = Fx.none; + entityType = CultivatorEntity::new; } @Override @@ -94,11 +95,6 @@ public class Cultivator extends GenericCrafter{ return new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top"),}; } - @Override - public TileEntity newEntity(){ - return new CultivatorEntity(); - } - @Override public void onProximityAdded(Tile tile){ super.onProximityAdded(tile); 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 d3756dbd35..c200de737b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -66,6 +66,7 @@ public class Drill extends Block{ hasLiquids = true; liquidCapacity = 5f; hasItems = true; + entityType = DrillEntity::new; idleSound = Sounds.drill; idleSoundVolume = 0.003f; @@ -300,11 +301,6 @@ public class Drill extends Block{ } } - @Override - public TileEntity newEntity(){ - return new DrillEntity(); - } - public int tier(){ return tier; } 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 3e77f8f666..deb606eedd 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Fracker.java @@ -2,7 +2,6 @@ package io.anuke.mindustry.world.blocks.production; import io.anuke.arc.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.meta.*; @@ -16,6 +15,7 @@ public class Fracker extends SolidPump{ public Fracker(String name){ super(name); hasItems = true; + entityType = FrackerEntity::new; } @Override @@ -85,11 +85,6 @@ public class Fracker extends SolidPump{ } } - @Override - public TileEntity newEntity(){ - return new FrackerEntity(); - } - @Override public float typeLiquid(Tile tile){ return tile.entity.liquids.get(result); 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 5ee91e3f01..1878ada116 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/GenericCrafter.java @@ -36,6 +36,7 @@ public class GenericCrafter extends Block{ health = 60; idleSound = Sounds.machine; idleSoundVolume = 0.03f; + entityType = GenericCrafterEntity::new; } @Override @@ -142,11 +143,6 @@ public class GenericCrafter extends Block{ return outputLiquid == null || !(tile.entity.liquids.get(outputLiquid.liquid) >= liquidCapacity); } - @Override - public TileEntity newEntity(){ - return new GenericCrafterEntity(); - } - @Override public int getMaximumAccepted(Tile tile, Item item){ return itemCapacity; 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 7e28b8bc67..fce368f246 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Incinerator.java @@ -24,6 +24,7 @@ public class Incinerator extends Block{ hasLiquids = true; update = true; solid = true; + entityType = IncineratorEntity::new; } @Override @@ -84,11 +85,6 @@ public class Incinerator extends Block{ return entity.heat > 0.5f; } - @Override - public TileEntity newEntity(){ - return new IncineratorEntity(); - } - public static class IncineratorEntity extends TileEntity{ public float heat; } diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Separator.java b/core/src/io/anuke/mindustry/world/blocks/production/Separator.java index b7813c5b4f..bd3f98966b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Separator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Separator.java @@ -1,21 +1,15 @@ package io.anuke.mindustry.world.blocks.production; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.Lines; -import io.anuke.arc.math.Mathf; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; import io.anuke.arc.util.ArcAnnotate.*; -import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.production.GenericCrafter.GenericCrafterEntity; -import io.anuke.mindustry.world.consumers.ConsumeLiquidBase; -import io.anuke.mindustry.world.consumers.ConsumeType; -import io.anuke.mindustry.world.meta.BlockStat; -import io.anuke.mindustry.world.meta.StatUnit; -import io.anuke.mindustry.world.meta.values.ItemFilterValue; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.production.GenericCrafter.*; +import io.anuke.mindustry.world.consumers.*; +import io.anuke.mindustry.world.meta.*; +import io.anuke.mindustry.world.meta.values.*; /** * Extracts a random list of items from an input item and an input liquid. @@ -39,6 +33,7 @@ public class Separator extends Block{ hasLiquids = true; liquidRegion = reg("-liquid"); + entityType = GenericCrafterEntity::new; } @Override @@ -123,9 +118,4 @@ public class Separator extends Block{ tryDump(tile); } } - - @Override - public TileEntity newEntity(){ - return new GenericCrafterEntity(); - } } diff --git a/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java index 15a0e4f88d..bb6cb397cf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/SolidPump.java @@ -30,6 +30,7 @@ public class SolidPump extends Pump{ public SolidPump(String name){ super(name); hasPower = true; + entityType = SolidPumpEntity::new; } @Override @@ -134,11 +135,6 @@ public class SolidPump extends Pump{ return tile != null && !tile.floor().isLiquid; } - @Override - public TileEntity newEntity(){ - return new SolidPumpEntity(); - } - @Override public void onProximityAdded(Tile tile){ super.onProximityAdded(tile); diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java index 332c8c6d67..d38c9dc432 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/ItemSource.java @@ -25,6 +25,7 @@ public class ItemSource extends Block{ solid = true; group = BlockGroup.transportation; configurable = true; + entityType = ItemSourceEntity::new; } @Override @@ -91,11 +92,6 @@ public class ItemSource extends Block{ return false; } - @Override - public TileEntity newEntity(){ - return new ItemSourceEntity(); - } - public class ItemSourceEntity extends TileEntity{ Item outputItem; diff --git a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java index df34b54342..5513f462ec 100644 --- a/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java +++ b/core/src/io/anuke/mindustry/world/blocks/sandbox/LiquidSource.java @@ -31,6 +31,7 @@ public class LiquidSource extends Block{ liquidCapacity = 100f; configurable = true; outputsLiquid = true; + entityType = LiquidSourceEntity::new; } @Override @@ -106,11 +107,6 @@ public class LiquidSource extends Block{ table.add(cont); } - @Override - public TileEntity newEntity(){ - return new LiquidSourceEntity(); - } - @Override public void configured(Tile tile, Player player, int value){ tile.entity().source = value == -1 ? null : content.liquid(value); diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java index 6e709b62f6..c164e7011e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -36,6 +36,7 @@ public class CoreBlock extends StorageBlock{ activeSound = Sounds.respawning; activeSoundVolume = 1f; layer = Layer.overlay; + entityType = CoreEntity::new; } @Remote(called = Loc.server) @@ -229,11 +230,6 @@ public class CoreBlock extends StorageBlock{ return entity.spawnPlayer != null; } - @Override - public TileEntity newEntity(){ - return new CoreEntity(); - } - public class CoreEntity extends TileEntity implements SpawnerTrait{ protected Player spawnPlayer; protected float progress; 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 aa177b1caf..7746932916 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java @@ -11,6 +11,7 @@ public abstract class StorageBlock extends Block{ public StorageBlock(String name){ super(name); hasItems = true; + entityType = StorageBlockEntity::new; } @Override @@ -69,11 +70,6 @@ public abstract class StorageBlock extends Block{ } } - @Override - public TileEntity newEntity(){ - return new StorageBlockEntity(); - } - public class StorageBlockEntity extends TileEntity{ protected @Nullable Tile linkedCore; 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 5c7ce01bf6..f67701d4d5 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -27,6 +27,7 @@ public class Unloader extends Block{ health = 70; hasItems = true; configurable = true; + entityType = UnloaderEntity::new; } @Override @@ -128,11 +129,6 @@ public class Unloader extends Block{ }); } - @Override - public TileEntity newEntity(){ - return new UnloaderEntity(); - } - public static class UnloaderEntity extends TileEntity{ public Item sortItem = null; diff --git a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java index 01487f6b44..d44b966493 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java @@ -36,6 +36,7 @@ public class CommandCenter extends Block{ destructible = true; solid = true; configurable = true; + entityType = CommandCenterEntity::new; } @Override @@ -122,11 +123,6 @@ public class CommandCenter extends Block{ Events.fire(new CommandIssueEvent(tile, command)); } - @Override - public TileEntity newEntity(){ - return new CommandCenterEntity(); - } - public class CommandCenterEntity extends TileEntity{ public UnitCommand command = UnitCommand.attack; diff --git a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java index 1c82bed65c..ef7314e00b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/MechPad.java @@ -35,6 +35,7 @@ public class MechPad extends Block{ hasPower = true; layer = Layer.overlay; flags = EnumSet.of(BlockFlag.mechPad); + entityType = MechFactoryEntity::new; } @Override @@ -134,11 +135,6 @@ public class MechPad extends Block{ } } - @Override - public TileEntity newEntity(){ - return new MechFactoryEntity(); - } - public class MechFactoryEntity extends TileEntity implements SpawnerTrait{ Player player; boolean sameMech; 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 917f2748d6..6c5e8698b2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/RepairPoint.java @@ -36,6 +36,7 @@ public class RepairPoint extends Block{ layer2 = Layer.power; hasPower = true; outlineIcon = true; + entityType = RepairPointEntity::new; } @Override @@ -126,11 +127,6 @@ public class RepairPoint extends Block{ return entity.target != null; } - @Override - public TileEntity newEntity(){ - return new RepairPointEntity(); - } - public class RepairPointEntity extends TileEntity{ public Unit target; public float strength, rotation = 90; 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 2747093746..678d43c10f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitFactory.java @@ -41,6 +41,7 @@ public class UnitFactory extends Block{ hasItems = true; solid = false; flags = EnumSet.of(BlockFlag.producer); + entityType = UnitFactoryEntity::new; } @Remote(called = Loc.server) @@ -175,16 +176,12 @@ public class UnitFactory extends Block{ entity.cons.trigger(); } } + @Override public int getMaximumAccepted(Tile tile, Item item){ return capacities[item.id]; } - @Override - public TileEntity newEntity(){ - return new UnitFactoryEntity(); - } - @Override public boolean shouldConsume(Tile tile){ UnitFactoryEntity entity = tile.entity();