Better payload framework

This commit is contained in:
Anuken
2020-04-16 09:44:31 -04:00
parent 8a01b87c99
commit 42f227195c
5 changed files with 98 additions and 48 deletions

View File

@@ -26,6 +26,7 @@ import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.payloads.*;
import mindustry.world.blocks.power.*;
import mindustry.world.consumers.*;
import mindustry.world.meta.*;
@@ -315,6 +316,40 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree
noSleep();
}
public boolean acceptPayload(Tilec source, Payload payload){
return false;
}
public void handlePayload(Tilec source, Payload payload){
}
/**
* Tries dumping a payload.
* @param todump payload to dump.
* @return whether the payload was moved successfully
*/
public boolean dumpPayload(@NonNull Payload todump){
Array<Tilec> proximity = proximity();
int dump = rotation();
if(proximity.size == 0) return false;
for(int i = 0; i < proximity.size; i++){
Tilec other = proximity.get((i + dump) % proximity.size);
if(other.team() == team() && other.acceptPayload(this, todump)){
other.handlePayload(this, todump);
incrementDump(proximity.size);
return true;
}
incrementDump(proximity.size);
}
return false;
}
public void handleItem(Tilec source, Item item){
items.add(item, 1);
}