From 3844121913c282d45922bf4c0e841c3470ff7c69 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 19 Dec 2021 12:38:52 -0500 Subject: [PATCH] drone construction time --- .../blocks/units/tank-assembler-top.png | Bin 0 -> 2564 bytes .../sprites/blocks/units/tank-assembler.png | Bin 3979 -> 1023 bytes core/src/mindustry/graphics/Drawf.java | 8 ++++-- .../world/blocks/units/UnitAssembler.java | 27 ++++++++++++++---- .../blocks/units/UnitAssemblerModule.java | 3 +- 5 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/units/tank-assembler-top.png diff --git a/core/assets-raw/sprites/blocks/units/tank-assembler-top.png b/core/assets-raw/sprites/blocks/units/tank-assembler-top.png new file mode 100644 index 0000000000000000000000000000000000000000..93baebe80ac29680e1effa0092f342adc77002d1 GIT binary patch literal 2564 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 plans = new Seq<>(4); @@ -137,6 +138,7 @@ public class UnitAssembler extends PayloadBlock{ AssemblerUnitPlan(){} } + /** hbgwerjhbagjegwg */ public static class YeetData{ public Vec2 target; public Block block; @@ -153,11 +155,13 @@ public class UnitAssembler extends PayloadBlock{ public Seq units = new Seq<>(); public Seq modules = new Seq<>(); public BlockSeq blocks = new BlockSeq(); - public float progress, warmup; + public float progress, warmup, droneWarmup; public float invalidWarmup = 0f; public int currentTier = 0; public boolean wasOccupied = false; + public float droneProgress, totalDroneProgress; + public Vec2 getUnitSpawn(){ float len = tilesize * (areaSize + size)/2f; float unitX = x + Geometry.d4x(rotation) * len, unitY = y + Geometry.d4y(rotation) * len; @@ -275,8 +279,10 @@ public class UnitAssembler extends PayloadBlock{ units.removeAll(u -> !u.isAdded() || u.dead || !(u.controller() instanceof AssemblerAI)); - //TODO build up units, don't spawn immediately in batches - if(efficiency() > 0 && units.size < dronesCreated){ + droneWarmup = Mathf.lerpDelta(droneWarmup, units.size < dronesCreated ? efficiency() : 0f, 0.1f); + totalDroneProgress += droneWarmup * Time.delta; + + if(units.size < dronesCreated && (droneProgress += edelta() / droneConstructTime) >= 1f){ var unit = droneType.create(team); if(unit instanceof BuildingTetherc bt){ bt.building(this); @@ -287,6 +293,7 @@ public class UnitAssembler extends PayloadBlock{ Fx.spawn.at(unit); units.add(unit); + droneProgress = 0f; } //TODO units should pick up and move payloads into position @@ -359,8 +366,15 @@ public class UnitAssembler extends PayloadBlock{ Draw.z(Layer.blockOver + 0.1f); - //TODO top? - //Draw.rect(topRegion, x, y); + Draw.rect(topRegion, x, y); + + //draw drone construction + if(droneWarmup > 0){ + //TODO draw it - better animations? + Draw.draw(Layer.blockOver + 0.2f, () -> { + Drawf.construct(this, droneType.fullIcon, Pal.accent, 0f, droneProgress, droneWarmup, totalDroneProgress, 14f); + }); + } Vec2 spawn = getUnitSpawn(); @@ -437,7 +451,8 @@ public class UnitAssembler extends PayloadBlock{ @Override public boolean acceptPayload(Building source, Payload payload){ var plan = plan(); - return this.payload == null && payload instanceof BuildPayload bp && plan.requirements.contains(b -> b.block == bp.block() && blocks.get(bp.block()) < b.amount); + return (this.payload == null || source instanceof UnitAssemblerModuleBuild) && + payload instanceof BuildPayload bp && plan.requirements.contains(b -> b.block == bp.block() && blocks.get(bp.block()) < b.amount); } @Override diff --git a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java index 201e4514a6..0ec38f6054 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java +++ b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java @@ -20,6 +20,7 @@ public class UnitAssemblerModule extends PayloadBlock{ super(name); rotate = true; rotateDraw = false; + acceptsPayload = true; } @Override @@ -81,7 +82,7 @@ public class UnitAssemblerModule extends PayloadBlock{ @Override public boolean acceptPayload(Building source, Payload payload){ - return link != null && this.payload == null && link.acceptPayload(source, payload); + return link != null && this.payload == null && link.acceptPayload(this, payload); } @Override