From bc65e636543aa8e5515d6084b20e11226454f258 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 14 May 2022 17:20:49 -0400 Subject: [PATCH] Beter payload updating system --- core/src/mindustry/entities/comp/BuildingComp.java | 4 ++++ core/src/mindustry/entities/comp/PayloadComp.java | 2 +- core/src/mindustry/type/UnitType.java | 4 ++++ core/src/mindustry/world/blocks/payloads/BuildPayload.java | 7 ++++--- core/src/mindustry/world/blocks/payloads/Payload.java | 5 ++--- core/src/mindustry/world/blocks/payloads/PayloadBlock.java | 2 +- .../mindustry/world/blocks/payloads/PayloadConveyor.java | 2 +- .../mindustry/world/blocks/payloads/PayloadUnloader.java | 2 +- core/src/mindustry/world/blocks/payloads/UnitPayload.java | 5 +++++ 9 files changed, 23 insertions(+), 10 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index e0948e5503..67bb98165b 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1732,6 +1732,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } } + public void updatePayload(@Nullable Unit unitHolder, @Nullable Building buildingHolder){ + update(); + } + public void updateTile(){ } diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 36b2e14bc2..dd414befa3 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -56,7 +56,7 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ // build.build.team = team; //} pay.set(x, y, rotation); - pay.update(true); + pay.update(self(), null); } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 76fac1a871..cd198b30ee 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -466,6 +466,10 @@ public class UnitType extends UnlockableContent{ } + public void updatePayload(Unit unit, @Nullable Unit unitHolder, @Nullable Building buildingHolder){ + + } + public void landed(Unit unit){} public void display(Unit unit, Table table){ diff --git a/core/src/mindustry/world/blocks/payloads/BuildPayload.java b/core/src/mindustry/world/blocks/payloads/BuildPayload.java index 13c53953e3..24420ac6c6 100644 --- a/core/src/mindustry/world/blocks/payloads/BuildPayload.java +++ b/core/src/mindustry/world/blocks/payloads/BuildPayload.java @@ -2,6 +2,7 @@ package mindustry.world.blocks.payloads; import arc.graphics.g2d.*; import arc.math.*; +import arc.util.*; import arc.util.io.*; import mindustry.ctype.*; import mindustry.game.*; @@ -43,11 +44,11 @@ public class BuildPayload implements Payload{ } @Override - public void update(boolean inUnit){ - if(inUnit && (!build.block.updateInUnits || (!state.rules.unitPayloadUpdate && !build.block.alwaysUpdateInUnits))) return; + public void update(@Nullable Unit unitHolder, @Nullable Building buildingHolder){ + if(unitHolder != null && (!build.block.updateInUnits || (!state.rules.unitPayloadUpdate && !build.block.alwaysUpdateInUnits))) return; build.tile = emptyTile; - build.update(); + build.updatePayload(unitHolder, buildingHolder); } @Override diff --git a/core/src/mindustry/world/blocks/payloads/Payload.java b/core/src/mindustry/world/blocks/payloads/Payload.java index 172aa7c3d5..218fab7192 100644 --- a/core/src/mindustry/world/blocks/payloads/Payload.java +++ b/core/src/mindustry/world/blocks/payloads/Payload.java @@ -36,9 +36,8 @@ public interface Payload extends Position{ /** @return the time taken to build this payload. */ float buildTime(); - /** update this payload if it is a block - * @param inUnit whether this payload is in a unit */ - default void update(boolean inUnit){} + /** update this payload inside a container unit or building. either can be null. */ + default void update(@Nullable Unit unitHolder, @Nullable Building buildingHolder){} /** @return whether this payload was dumped. */ default boolean dump(){ diff --git a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java index 337355f051..3edb189a0f 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java @@ -146,7 +146,7 @@ public class PayloadBlock extends Block{ @Override public void updateTile(){ if(payload != null){ - payload.update(false); + payload.update(null, this); } } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java index 9fc669d59d..04a7fbf19f 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java @@ -128,7 +128,7 @@ public class PayloadConveyor extends Block{ if(!enabled) return; if(item != null){ - item.update(false); + item.update(null, this); } lastInterp = curInterp; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java index 89c2ad1a06..e6e338b587 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java @@ -48,7 +48,7 @@ public class PayloadUnloader extends PayloadLoader{ @Override public void updateTile(){ if(payload != null){ - payload.update(false); + payload.update(null, this); } lastOutputPower = 0f; diff --git a/core/src/mindustry/world/blocks/payloads/UnitPayload.java b/core/src/mindustry/world/blocks/payloads/UnitPayload.java index 855ceedb29..48fd9cac8c 100644 --- a/core/src/mindustry/world/blocks/payloads/UnitPayload.java +++ b/core/src/mindustry/world/blocks/payloads/UnitPayload.java @@ -41,6 +41,11 @@ public class UnitPayload implements Payload{ showOverlay(icon.getRegion()); } + @Override + public void update(@Nullable Unit unitHolder, @Nullable Building buildingHolder){ + unit.type.updatePayload(unit, unitHolder, buildingHolder); + } + @Override public UnlockableContent content(){ return unit.type;