Payload loader/unloader progress

This commit is contained in:
Anuken
2021-07-22 21:07:36 -04:00
parent bda461e480
commit ed1d02d2c2
21 changed files with 63 additions and 29 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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);
}
}

View File

@ -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

View File

@ -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));
}
}

View File

@ -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)
);
}
}
}

View File

@ -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

View File

@ -35,7 +35,7 @@ def transformColors = { List<List<String>> 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"]])