diff --git a/core/assets-raw/sprites/blocks/liquid/rotary-pump.png b/core/assets-raw/sprites/blocks/liquid/rotary-pump.png index 29a234b331..ad88b06753 100644 Binary files a/core/assets-raw/sprites/blocks/liquid/rotary-pump.png and b/core/assets-raw/sprites/blocks/liquid/rotary-pump.png differ diff --git a/core/assets-raw/sprites/blocks/payload/block-loader.png b/core/assets-raw/sprites/blocks/payload/block-loader.png deleted file mode 100644 index 08c851a0cd..0000000000 Binary files a/core/assets-raw/sprites/blocks/payload/block-loader.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/payload/block-unloader.png b/core/assets-raw/sprites/blocks/payload/block-unloader.png deleted file mode 100644 index 2ee0b89d9b..0000000000 Binary files a/core/assets-raw/sprites/blocks/payload/block-unloader.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/payload/factory-in-3.png b/core/assets-raw/sprites/blocks/payload/factory-in-3.png index 7944814739..9ea0ed0f19 100644 Binary files a/core/assets-raw/sprites/blocks/payload/factory-in-3.png and b/core/assets-raw/sprites/blocks/payload/factory-in-3.png differ diff --git a/core/assets-raw/sprites/blocks/payload/factory-out-3.png b/core/assets-raw/sprites/blocks/payload/factory-out-3.png index 4553a690dd..84caaa1c31 100644 Binary files a/core/assets-raw/sprites/blocks/payload/factory-out-3.png and b/core/assets-raw/sprites/blocks/payload/factory-out-3.png differ diff --git a/core/assets-raw/sprites/blocks/payload/large-constructor-top.png b/core/assets-raw/sprites/blocks/payload/large-constructor-top.png new file mode 100644 index 0000000000..eabff724be Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/large-constructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/large-constructor.png b/core/assets-raw/sprites/blocks/payload/large-constructor.png index a69f4cf290..f82c56b17d 100644 Binary files a/core/assets-raw/sprites/blocks/payload/large-constructor.png and b/core/assets-raw/sprites/blocks/payload/large-constructor.png differ diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader-top.png b/core/assets-raw/sprites/blocks/payload/payload-loader-top.png new file mode 100644 index 0000000000..2207273e02 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/payload-loader-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader.png b/core/assets-raw/sprites/blocks/payload/payload-loader.png new file mode 100644 index 0000000000..19762a9ef4 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/payload-loader.png differ diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader-top.png b/core/assets-raw/sprites/blocks/payload/payload-unloader-top.png new file mode 100644 index 0000000000..34ec963e54 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/payload-unloader-top.png differ diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader.png b/core/assets-raw/sprites/blocks/payload/payload-unloader.png new file mode 100644 index 0000000000..2511a0db65 Binary files /dev/null and b/core/assets-raw/sprites/blocks/payload/payload-unloader.png differ diff --git a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png index b9bc65af45..8b07e080d3 100644 Binary files a/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png and b/core/assets-raw/sprites/blocks/production/cryofluid-mixer-bottom.png differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index e3cb7ef5fe..42b5d4a1df 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -397,3 +397,5 @@ 63336=deconstructor|block-deconstructor-ui 63335=constructor|block-constructor-ui 63334=large-constructor|block-large-constructor-ui +63333=payload-loader|block-payload-loader-ui +63332=payload-unloader|block-payload-unloader-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 315a73a95e..291a134435 100644 Binary files a/core/assets/logicids.dat and b/core/assets/logicids.dat differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 72a4e1c30c..3da7f3d41c 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -96,7 +96,7 @@ public class Blocks implements ContentList{ repairPoint, repairTurret, resupplyPoint, //payloads - payloadConveyor, payloadRouter, payloadPropulsionTower, deconstructor, constructor, largeConstructor, blockLoader, blockUnloader, + payloadConveyor, payloadRouter, payloadPropulsionTower, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, //logic message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank, @@ -110,7 +110,7 @@ public class Blocks implements ContentList{ /** @deprecated use the blocks with proper names, */ @Deprecated - public static Block blockForge; + public static Block blockForge, blockLoader, blockUnloader; @Override public void load(){ @@ -2255,22 +2255,24 @@ public class Blocks implements ContentList{ size = 5; }}; - blockLoader = new BlockLoader("block-loader"){{ - requirements(Category.units, BuildVisibility.debugOnly, with(Items.thorium, 100)); + payloadLoader = new BlockLoader("payload-loader"){{ + requirements(Category.units, with(Items.thorium, 100)); hasPower = true; consumes.power(2f); size = 3; }}; - blockUnloader = new BlockUnloader("block-unloader"){{ - requirements(Category.units, BuildVisibility.debugOnly, with(Items.thorium, 100)); + payloadUnloader = new BlockUnloader("payload-unloader"){{ + requirements(Category.units, with(Items.thorium, 100)); hasPower = true; consumes.power(2f); size = 3; }}; //TODO deprecated - blockForge = deconstructor; + blockForge = constructor; + blockLoader = payloadLoader; + blockUnloader = payloadUnloader; //endregion //region sandbox diff --git a/core/src/mindustry/world/blocks/liquid/ArmoredConduit.java b/core/src/mindustry/world/blocks/liquid/ArmoredConduit.java index e404b36b44..fc2b329ce1 100644 --- a/core/src/mindustry/world/blocks/liquid/ArmoredConduit.java +++ b/core/src/mindustry/world/blocks/liquid/ArmoredConduit.java @@ -34,7 +34,7 @@ public class ArmoredConduit extends Conduit{ @Override public boolean acceptLiquid(Building source, Liquid liquid){ - return super.acceptLiquid(source, liquid) && (source.block instanceof Conduit || + return super.acceptLiquid(source, liquid) && (tile == null || source.block instanceof Conduit || source.tile.absoluteRelativeTo(tile.x, tile.y) == rotation); } } diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index 393af2e8e5..c632680714 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -130,7 +130,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ public boolean acceptLiquid(Building source, Liquid liquid){ noSleep(); return (liquids.current() == liquid || liquids.currentAmount() < 0.2f) - && ((source.relativeTo(tile.x, tile.y) + 2) % 4 != rotation); + && (tile == null || (source.relativeTo(tile.x, tile.y) + 2) % 4 != rotation); } @Override diff --git a/core/src/mindustry/world/blocks/payloads/BlockLoader.java b/core/src/mindustry/world/blocks/payloads/BlockLoader.java index 001f93712a..96b192a2fe 100644 --- a/core/src/mindustry/world/blocks/payloads/BlockLoader.java +++ b/core/src/mindustry/world/blocks/payloads/BlockLoader.java @@ -15,16 +15,17 @@ public class BlockLoader extends PayloadBlock{ public final int timerLoad = timers++; public float loadTime = 2f; - public int itemsLoaded = 5; - public float liquidsLoaded = 5f; + public int itemsLoaded = 8; + public float liquidsLoaded = 40f; public int maxBlockSize = 2; public BlockLoader(String name){ super(name); hasItems = true; - itemCapacity = 25; - //liquidCapacity = 25; + hasLiquids = true; + itemCapacity = 100; + liquidCapacity = 100f; update = true; outputsPayload = true; size = 3; @@ -61,9 +62,9 @@ public class BlockLoader extends PayloadBlock{ @Override public boolean acceptPayload(Building source, Payload payload){ return super.acceptPayload(source, payload) && - (payload instanceof BuildPayload build) && - ((build.build.block.hasItems && build.block().unloadable && build.block().itemCapacity >= 10 && build.block().size <= maxBlockSize)/* || - ((BlockPayload)payload).entity.block().hasLiquids && ((BlockPayload)payload).block().liquidCapacity >= 10f)*/); + payload instanceof BuildPayload build && + ((build.build.block.hasItems && build.block().unloadable && build.block().itemCapacity >= 10 && build.block().size <= maxBlockSize) || + build.build.block().hasLiquids && build.block().liquidCapacity >= 10f); } @Override @@ -71,6 +72,11 @@ public class BlockLoader extends PayloadBlock{ return items.total() < itemCapacity; } + @Override + public boolean acceptLiquid(Building source, Liquid liquid){ + return liquids.current() == liquid || liquids.currentAmount() < 0.2f; + } + @Override public void draw(){ Draw.rect(region, x, y); @@ -120,17 +126,17 @@ public class BlockLoader extends PayloadBlock{ } } - //load up liquids (disabled) - /* + //load up liquids if(payload.block().hasLiquids && liquids.total() >= 0.001f){ Liquid liq = liquids.current(); float total = liquids.currentAmount(); - float flow = Math.min(Math.min(liquidsLoaded * delta(), payload.block().liquidCapacity - payload.entity.liquids.get(liq) - 0.0001f), total); - if(payload.entity.acceptLiquid(payload.entity, liq, flow)){ - payload.entity.liquids.add(liq, flow); + float flow = Math.min(Math.min(liquidsLoaded * edelta(), payload.block().liquidCapacity - payload.build.liquids.get(liq)), total); + //TODO potential crash here + if(payload.build.acceptLiquid(payload.build, liq)){ + payload.build.liquids.add(liq, flow); liquids.remove(liq, flow); } - }*/ + } } } @@ -139,8 +145,8 @@ public class BlockLoader extends PayloadBlock{ } public boolean shouldExport(){ - return payload != null && - ((payload.block().hasLiquids && payload.build.liquids.total() >= payload.block().liquidCapacity - 0.001f) || + return payload != null && ( + (payload.block().hasLiquids && payload.build.liquids.total() >= payload.block().liquidCapacity - 0.001f) || (payload.block().hasItems && payload.build.items.total() >= payload.block().itemCapacity)); } } diff --git a/core/src/mindustry/world/blocks/payloads/BlockUnloader.java b/core/src/mindustry/world/blocks/payloads/BlockUnloader.java index 8f4a644fce..c86ce1e780 100644 --- a/core/src/mindustry/world/blocks/payloads/BlockUnloader.java +++ b/core/src/mindustry/world/blocks/payloads/BlockUnloader.java @@ -6,6 +6,7 @@ import mindustry.type.*; import static mindustry.Vars.*; public class BlockUnloader extends BlockLoader{ + public int offloadSpeed = 4; public BlockUnloader(String name){ super(name); @@ -28,13 +29,18 @@ public class BlockUnloader extends BlockLoader{ return false; } + @Override + public boolean acceptLiquid(Building source, Liquid liquid){ + return false; + } + @Override public void updateTile(){ if(shouldExport()){ moveOutPayload(); }else if(moveInPayload()){ - //load up items + //unload items if(payload.block().hasItems && !full()){ if(efficiency() > 0.01f && timer(timerLoad, loadTime / efficiency())){ //load up items a set amount of times @@ -50,9 +56,24 @@ public class BlockUnloader extends BlockLoader{ } } } + + //unload liquids + //TODO tile is null may crash + if(payload.block().hasLiquids && payload.build.liquids.currentAmount() >= 0.01f && + (liquids.current() == payload.build.liquids.current() || liquids.currentAmount() <= 0.2f)){ + var liq = payload.build.liquids.current(); + float remaining = liquidCapacity - liquids.currentAmount(); + float flow = Math.min(Math.min(liquidsLoaded * delta(), remaining), payload.build.liquids.currentAmount()); + + liquids.add(liq, flow); + payload.build.liquids.remove(liq, flow); + } } - dump(); + dumpLiquid(liquids.current()); + for(int i = 0; i < offloadSpeed; i++){ + dumpAccumulate(); + } } public boolean full(){ @@ -61,7 +82,10 @@ public class BlockUnloader extends BlockLoader{ @Override public boolean shouldExport(){ - return payload != null && (payload.block().hasItems && payload.build.items.empty()); + return payload != null && ( + (!payload.block().hasItems || payload.build.items.empty()) && + (!payload.block().hasLiquids || payload.build.liquids.currentAmount() <= 0.001f) + ); } } } diff --git a/gradle.properties b/gradle.properties index a5a0e68fcb..ba90b53b7a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,4 +10,4 @@ kapt.include.compile.classpath=false kotlin.stdlib.default.dependency=false #needed for android compilation android.useAndroidX=true -archash=a81197126a9190337ab9065734b5134d5f08ac05 +archash=47822d851954fd2707d51731042056450f07ca8c diff --git a/tools/build.gradle b/tools/build.gradle index d3307d5707..12f11c3126 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -35,7 +35,7 @@ def transformColors = { List> list -> //TODO implementing this in gradle is a bad idea //d4816b -transformColors([["a387ea", "8a73c6", "5c5e9f"], ["6e7080", "989aa4", "b0bac0"], ["bc5452", "ea8878", "feb380"], +transformColors([["bf92f9", "8a73c6", "665c9f"], ["6e7080", "989aa4", "b0bac0"], ["bc5452", "ea8878", "feb380"], ["de9458", "f8c266", "ffe18f"], ["feb380", "ea8878", "bc5452"], ["d4816b", "eab678", "ffd37f"], ["ffffff", "dcc6c6", "9d7f7f"], ["df7646", "b23a4d", "752249"], ["3c3837", "515151", "646567"], ["5757c1", "6f80e8", "88a4ff"], ["8f665b", "b28768", "c9a58f"]])