Update/draw payload buildings (broken)
This commit is contained in:
@@ -26,6 +26,7 @@ import mindustry.maps.*;
|
||||
import mindustry.mod.*;
|
||||
import mindustry.net.*;
|
||||
import mindustry.service.*;
|
||||
import mindustry.world.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.*;
|
||||
@@ -195,6 +196,8 @@ public class Vars implements Loadable{
|
||||
public static Fi launchIDFile;
|
||||
/** empty map, indicates no current map */
|
||||
public static Map emptyMap;
|
||||
/** empty tile for payloads */
|
||||
public static Tile emptyTile;
|
||||
/** map file extension */
|
||||
public static final String mapExtension = "msav";
|
||||
/** save file extension */
|
||||
@@ -310,6 +313,10 @@ public class Vars implements Loadable{
|
||||
|
||||
modDirectory.mkdirs();
|
||||
|
||||
Events.on(ContentInitEvent.class, e -> {
|
||||
emptyTile = new Tile(Short.MAX_VALUE - 20, Short.MAX_VALUE - 20);
|
||||
});
|
||||
|
||||
mods.load();
|
||||
maps.load();
|
||||
}
|
||||
|
||||
@@ -291,7 +291,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
||||
}
|
||||
|
||||
public byte relativeTo(Building tile){
|
||||
return relativeTo(tile.tile());
|
||||
return relativeTo(tile.tile);
|
||||
}
|
||||
|
||||
public byte relativeToEdge(Tile other){
|
||||
@@ -923,6 +923,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
||||
drawTeamTop();
|
||||
}
|
||||
|
||||
public void payloadDraw(){
|
||||
draw();
|
||||
}
|
||||
|
||||
public void drawTeamTop(){
|
||||
if(block.teamRegion.found()){
|
||||
if(block.teamRegions[team.id] == block.teamRegion) Draw.color(team.color);
|
||||
|
||||
@@ -61,6 +61,7 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
|
||||
void pickup(Building tile){
|
||||
tile.pickedUp();
|
||||
tile.tile.remove();
|
||||
tile.tile = Vars.emptyTile;
|
||||
payloads.add(new BuildPayload(tile));
|
||||
Fx.unitPickup.at(tile);
|
||||
Events.fire(new PickupEvent(self(), tile));
|
||||
|
||||
@@ -155,6 +155,7 @@ public class Saves{
|
||||
SaveSlot slot = new SaveSlot(getNextSlotFile());
|
||||
slot.importFile(file);
|
||||
slot.setName(file.nameWithoutExtension());
|
||||
|
||||
saves.add(slot);
|
||||
slot.meta = SaveIO.getMeta(slot.file);
|
||||
current = slot;
|
||||
@@ -330,6 +331,10 @@ public class Saves{
|
||||
public void importFile(Fi from) throws IOException{
|
||||
try{
|
||||
from.copyTo(file);
|
||||
if(previewFile().exists()){
|
||||
requestedPreview = false;
|
||||
previewFile().delete();
|
||||
}
|
||||
}catch(Exception e){
|
||||
throw new IOException(e);
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ public class Conveyor extends Block implements Autotiler{
|
||||
public float minitem = 1;
|
||||
|
||||
public int blendbits, blending;
|
||||
public int blendsclx, blendscly;
|
||||
public int blendsclx = 1, blendscly = 1;
|
||||
|
||||
public float clogHeat = 0f;
|
||||
|
||||
@@ -169,6 +169,11 @@ public class Conveyor extends Block implements Autotiler{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void payloadDraw(){
|
||||
Draw.rect(block.fullIcon,x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawCracks(){
|
||||
Draw.z(Layer.block - 0.15f);
|
||||
|
||||
@@ -184,6 +184,11 @@ public class ItemBridge extends Block{
|
||||
public boolean wasMoved, moved;
|
||||
public float transportCounter;
|
||||
|
||||
@Override
|
||||
public void pickedUp(){
|
||||
link = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playerPlaced(Object config){
|
||||
super.playerPlaced(config);
|
||||
|
||||
@@ -126,6 +126,10 @@ public class PayloadConveyor extends Block{
|
||||
public void updateTile(){
|
||||
if(!enabled) return;
|
||||
|
||||
if(item != null){
|
||||
item.update();
|
||||
}
|
||||
|
||||
lastInterp = curInterp;
|
||||
curInterp = fract();
|
||||
//rollover skip
|
||||
@@ -231,6 +235,11 @@ public class PayloadConveyor extends Block{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void payloadDraw(){
|
||||
Draw.rect(block.fullIcon,x, y);
|
||||
}
|
||||
|
||||
public float time(){
|
||||
return Time.time;
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ public class Conduit extends LiquidBlock implements Autotiler{
|
||||
|
||||
public class ConduitBuild extends LiquidBuild implements ChainedBuilding{
|
||||
public float smoothLiquid;
|
||||
public int blendbits, xscl, yscl, blending;
|
||||
public int blendbits, xscl = 1, yscl = 1, blending;
|
||||
public boolean capped;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -78,6 +78,7 @@ public abstract class BlockProducer extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
var recipe = recipe();
|
||||
boolean produce = recipe != null && consValid() && payload == null;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mindustry.world.blocks.payloads;
|
||||
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -15,6 +16,7 @@ public class BuildPayload implements Payload{
|
||||
|
||||
public BuildPayload(Block block, Team team){
|
||||
this.build = block.newBuilding().create(block, team);
|
||||
this.build.tile = emptyTile;
|
||||
}
|
||||
|
||||
public BuildPayload(Building build){
|
||||
@@ -34,6 +36,12 @@ public class BuildPayload implements Payload{
|
||||
build.dropped();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
if(build.tile == null) build.tile = emptyTile;
|
||||
build.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] requirements(){
|
||||
return build.block.requirements;
|
||||
@@ -80,8 +88,10 @@ public class BuildPayload implements Payload{
|
||||
@Override
|
||||
public void draw(){
|
||||
drawShadow(1f);
|
||||
//build.draw(); //TODO broken for blocks that change layers, such as conveyors, but would be nice...
|
||||
Draw.rect(build.block.fullIcon, build.x, build.y);
|
||||
float prevZ = Draw.z();
|
||||
Draw.zTransform(z -> 0.0011f + Mathf.clamp(z, prevZ - 0.001f, prevZ + 0.9f));
|
||||
build.payloadDraw();
|
||||
Draw.zTransform();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,6 +36,9 @@ public interface Payload extends Position{
|
||||
/** @return the time taken to build this payload. */
|
||||
float buildTime();
|
||||
|
||||
/** update this payload if it is a block */
|
||||
default void update(){}
|
||||
|
||||
/** @return whether this payload was dumped. */
|
||||
default boolean dump(){
|
||||
return false;
|
||||
@@ -94,6 +97,7 @@ public interface Payload extends Position{
|
||||
BuildPayload payload = new BuildPayload(block, Team.derelict);
|
||||
byte version = read.b();
|
||||
payload.build.readAll(read, version);
|
||||
payload.build.tile = emptyTile;
|
||||
return (T)payload;
|
||||
}else if(type == payloadUnit){
|
||||
byte id = read.b();
|
||||
|
||||
@@ -135,6 +135,13 @@ public class PayloadBlock extends Block{
|
||||
if(payload != null && !carried) payload.dump();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
if(payload != null){
|
||||
payload.update();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean blends(int direction){
|
||||
return PayloadBlock.blends(this, direction);
|
||||
}
|
||||
|
||||
@@ -103,6 +103,7 @@ public class PayloadDeconstructor extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
if(items.total() > 0){
|
||||
for(int i = 0; i < dumpRate; i++){
|
||||
dumpAccumulate();
|
||||
|
||||
@@ -3,6 +3,7 @@ package mindustry.world.blocks.payloads;
|
||||
import arc.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
@@ -58,6 +59,7 @@ public class PayloadLoader extends PayloadBlock{
|
||||
}
|
||||
|
||||
public class PayloadLoaderBuild extends PayloadBlockBuild<BuildPayload>{
|
||||
public boolean exporting = false;
|
||||
|
||||
@Override
|
||||
public boolean acceptPayload(Building source, Payload payload){
|
||||
@@ -68,6 +70,12 @@ public class PayloadLoader extends PayloadBlock{
|
||||
build.build.block().hasLiquids && build.block().liquidCapacity >= 10f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePayload(Building source, Payload payload){
|
||||
super.handlePayload(source, payload);
|
||||
exporting = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Building source, Item item){
|
||||
return items.total() < itemCapacity;
|
||||
@@ -103,6 +111,7 @@ public class PayloadLoader extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
if(shouldExport()){
|
||||
moveOutPayload();
|
||||
}else if(moveInPayload()){
|
||||
@@ -120,6 +129,9 @@ public class PayloadLoader extends PayloadBlock{
|
||||
payload.build.handleItem(payload.build, item);
|
||||
items.remove(item, 1);
|
||||
break;
|
||||
}else if(payload.block().separateItemCapacity || payload.block().consumes.consumesItem(item)){
|
||||
exporting = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,11 +159,28 @@ public class PayloadLoader extends PayloadBlock{
|
||||
|
||||
public boolean shouldExport(){
|
||||
return payload != null && (
|
||||
exporting ||
|
||||
(payload.block().hasLiquids && payload.build.liquids.total() >= payload.block().liquidCapacity - 0.001f) ||
|
||||
(payload.block().hasItems &&
|
||||
(payload.block().separateItemCapacity ?
|
||||
content.items().contains(i -> payload.build.items.get(i) >= payload.block().itemCapacity) :
|
||||
payload.build.items.total() >= payload.block().itemCapacity)));
|
||||
(payload.block().hasItems && payload.block().separateItemCapacity && content.items().contains(i -> payload.build.items.get(i) >= payload.block().itemCapacity)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte version(){
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(Writes write){
|
||||
super.write(write);
|
||||
write.bool(exporting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(Reads read, byte revision){
|
||||
super.read(read, revision);
|
||||
if(revision >= 1){
|
||||
exporting = read.bool();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,6 +143,7 @@ public class PayloadMassDriver extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
Building link = world.build(this.link);
|
||||
boolean hasLink = linkValid();
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ public class PayloadSource extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
if(payload == null){
|
||||
scl = 0f;
|
||||
if(unit != null){
|
||||
|
||||
@@ -36,6 +36,7 @@ public class PayloadUnloader extends PayloadLoader{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
if(shouldExport()){
|
||||
//one-use, disposable block
|
||||
if(payload.block().instantDeconstruct){
|
||||
|
||||
@@ -55,6 +55,7 @@ public class PayloadVoid extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
if(moveInPayload(false) && cons.valid()){
|
||||
payload = null;
|
||||
incinerateEffect.at(this);
|
||||
|
||||
@@ -56,7 +56,7 @@ public class PowerDiode extends Block{
|
||||
public void updateTile(){
|
||||
super.updateTile();
|
||||
|
||||
if(front() == null || back() == null || !back().block.hasPower || !front().block.hasPower || back().team != front().team) return;
|
||||
if(tile == null || front() == null || back() == null || !back().block.hasPower || !front().block.hasPower || back().team != front().team) return;
|
||||
|
||||
PowerGraph backGraph = back().power.graph;
|
||||
PowerGraph frontGraph = front().power.graph;
|
||||
|
||||
@@ -444,7 +444,7 @@ public class PowerNode extends PowerBlock{
|
||||
public void draw(){
|
||||
super.draw();
|
||||
|
||||
if(Mathf.zero(Renderer.laserOpacity)) return;
|
||||
if(Mathf.zero(Renderer.laserOpacity) || tile == emptyTile) return;
|
||||
|
||||
Draw.z(Layer.power);
|
||||
setupColor(power.graph.getSatisfaction());
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ConsumePower extends Consume{
|
||||
* @return The amount of power which is requested per tick.
|
||||
*/
|
||||
public float requestedPower(Building entity){
|
||||
if(entity.tile().build == null) return 0f;
|
||||
if(entity.tile == null || entity.tile.build == null) return 0f;
|
||||
if(buffered){
|
||||
return (1f-entity.power.status)*capacity;
|
||||
}else{
|
||||
|
||||
@@ -16,6 +16,14 @@ public class Consumers{
|
||||
public final Bits itemFilters = new Bits(Vars.content.items().size);
|
||||
public final Bits liquidfilters = new Bits(Vars.content.liquids().size);
|
||||
|
||||
public boolean consumesItem(Item item){
|
||||
return itemFilters.get(item.id);
|
||||
}
|
||||
|
||||
public boolean consumesLiquid(Liquid liq){
|
||||
return liquidfilters.get(liq.id);
|
||||
}
|
||||
|
||||
public boolean any(){
|
||||
return results != null && results.length > 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user