Work on dynamic rendering based on both buffer amount and average transfer

This commit is contained in:
Aidan C. Brady 2013-12-14 15:30:41 -05:00
parent 1e1eabfd5e
commit bb8b89b7e7
4 changed files with 58 additions and 10 deletions

View file

@ -27,6 +27,11 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public boolean prevTransfer; public boolean prevTransfer;
public float gasScale; public float gasScale;
public float prevScale;
/** Sent from server to client, actual stored buffer scale */
public float definedScale;
public Gas refGas = null; public Gas refGas = null;
public GasStack gasStored; public GasStack gasStored;
@ -156,9 +161,16 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
transferDelay--; transferDelay--;
} }
if(Math.abs(getScale()-prevScale) > 0.01 || (getScale() != prevScale && (getScale() == 0 || getScale() == 1)))
{
needsUpdate = true;
}
prevScale = getScale();
if(didTransfer != prevTransfer || needsUpdate) if(didTransfer != prevTransfer || needsUpdate)
{ {
MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, refGas != null ? refGas.getID() : -1, didTransfer)); MinecraftForge.EVENT_BUS.post(new GasTransferEvent(this, refGas != null ? refGas.getID() : -1, didTransfer, getScale()));
needsUpdate = false; needsUpdate = false;
} }
@ -183,11 +195,11 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
if(didTransfer && gasScale < 1) if(didTransfer && gasScale < 1)
{ {
gasScale = Math.min(1, gasScale+0.02F); gasScale = Math.max(definedScale, Math.min(1, gasScale+0.02F));
} }
else if(!didTransfer && gasScale > 0) else if(!didTransfer && gasScale > 0)
{ {
gasScale = Math.max(0, gasScale-0.02F); gasScale = Math.max(definedScale, Math.max(0, gasScale-0.02F));
if(gasScale == 0) if(gasScale == 0)
{ {
@ -275,15 +287,22 @@ public class GasNetwork extends DynamicNetwork<IGasHandler, GasNetwork>
public final int transferType; public final int transferType;
public final boolean didTransfer; public final boolean didTransfer;
public final float gasScale;
public GasTransferEvent(GasNetwork network, int type, boolean did) public GasTransferEvent(GasNetwork network, int type, boolean did, float scale)
{ {
gasNetwork = network; gasNetwork = network;
transferType = type; transferType = type;
didTransfer = did; didTransfer = did;
gasScale = scale;
} }
} }
public float getScale()
{
return (gasStored != null ? gasStored.amount : 0)/getCapacity();
}
@Override @Override
public String toString() public String toString()
{ {

View file

@ -33,6 +33,11 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public boolean prevTransfer; public boolean prevTransfer;
public float fluidScale; public float fluidScale;
public float prevScale;
/** Sent from server to client, actual stored buffer scale */
public float definedScale;
public Fluid refFluid = null; public Fluid refFluid = null;
public FluidStack fluidStored; public FluidStack fluidStored;
@ -161,9 +166,16 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
transferDelay--; transferDelay--;
} }
if(Math.abs(getScale()-prevScale) > 0.01 || (getScale() != prevScale && (getScale() == 0 || getScale() == 1)))
{
needsUpdate = true;
}
prevScale = getScale();
if(didTransfer != prevTransfer || needsUpdate) if(didTransfer != prevTransfer || needsUpdate)
{ {
MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, refFluid != null ? refFluid.getID() : -1, didTransfer)); MinecraftForge.EVENT_BUS.post(new FluidTransferEvent(this, refFluid != null ? refFluid.getID() : -1, didTransfer, getScale()));
needsUpdate = false; needsUpdate = false;
} }
@ -188,11 +200,11 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
if(didTransfer && fluidScale < 1) if(didTransfer && fluidScale < 1)
{ {
fluidScale = Math.min(1, fluidScale+0.02F); fluidScale = Math.max(definedScale, Math.min(1, fluidScale+0.02F));
} }
else if(!didTransfer && fluidScale > 0) else if(!didTransfer && fluidScale > 0)
{ {
fluidScale = Math.max(0, fluidScale-0.02F); fluidScale = Math.max(definedScale, Math.max(0, fluidScale-0.02F));
if(fluidScale == 0) if(fluidScale == 0)
{ {
@ -282,15 +294,22 @@ public class FluidNetwork extends DynamicNetwork<IFluidHandler, FluidNetwork>
public final int fluidType; public final int fluidType;
public final boolean didTransfer; public final boolean didTransfer;
public final float fluidScale;
public FluidTransferEvent(FluidNetwork network, int type, boolean did) public FluidTransferEvent(FluidNetwork network, int type, boolean did, float scale)
{ {
fluidNetwork = network; fluidNetwork = network;
fluidType = type; fluidType = type;
didTransfer = did; didTransfer = did;
fluidScale = scale;
} }
} }
public float getScale()
{
return (fluidStored != null ? fluidStored.amount : 0)/getCapacity();
}
@Override @Override
public String toString() public String toString()
{ {

View file

@ -1340,7 +1340,7 @@ public class Mekanism
public void onGasTransferred(GasTransferEvent event) public void onGasTransferred(GasTransferEvent event)
{ {
try { try {
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType, event.didTransfer)); PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.GAS, event.gasNetwork.transmitters.iterator().next(), event.transferType, event.didTransfer, event.gasScale));
} catch(Exception e) {} } catch(Exception e) {}
} }
@ -1348,7 +1348,7 @@ public class Mekanism
public void onLiquidTransferred(FluidTransferEvent event) public void onLiquidTransferred(FluidTransferEvent event)
{ {
try { try {
PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next(), event.fluidType, event.didTransfer)); PacketHandler.sendPacket(Transmission.ALL_CLIENTS, new PacketTransmitterUpdate().setParams(PacketType.FLUID, event.fluidNetwork.transmitters.iterator().next(), event.fluidType, event.didTransfer, event.fluidScale));
} catch(Exception e) {} } catch(Exception e) {}
} }

View file

@ -31,6 +31,8 @@ public class PacketTransmitterUpdate implements IMekanismPacket
public int fluidType; public int fluidType;
public boolean didFluidTransfer; public boolean didFluidTransfer;
public float scale;
@Override @Override
public String getName() public String getName()
{ {
@ -51,10 +53,12 @@ public class PacketTransmitterUpdate implements IMekanismPacket
case GAS: case GAS:
gasType = (Integer)data[2]; gasType = (Integer)data[2];
didGasTransfer = (Boolean)data[3]; didGasTransfer = (Boolean)data[3];
scale = (Float)data[4];
break; break;
case FLUID: case FLUID:
fluidType = (Integer)data[2]; fluidType = (Integer)data[2];
didFluidTransfer = (Boolean)data[3]; didFluidTransfer = (Boolean)data[3];
scale = (Float)data[4];
break; break;
} }
@ -96,11 +100,13 @@ public class PacketTransmitterUpdate implements IMekanismPacket
Gas gasType = GasRegistry.getGas(dataStream.readInt()); Gas gasType = GasRegistry.getGas(dataStream.readInt());
didGasTransfer = dataStream.readBoolean(); didGasTransfer = dataStream.readBoolean();
scale = dataStream.readFloat();
if(tileEntity != null) if(tileEntity != null)
{ {
((ITransmitter<GasNetwork>)tileEntity).getTransmitterNetwork().refGas = gasType; ((ITransmitter<GasNetwork>)tileEntity).getTransmitterNetwork().refGas = gasType;
((ITransmitter<GasNetwork>)tileEntity).getTransmitterNetwork().didTransfer = didGasTransfer; ((ITransmitter<GasNetwork>)tileEntity).getTransmitterNetwork().didTransfer = didGasTransfer;
((ITransmitter<GasNetwork>)tileEntity).getTransmitterNetwork().definedScale = scale;
} }
} }
else if(transmitterType == 3) else if(transmitterType == 3)
@ -110,11 +116,13 @@ public class PacketTransmitterUpdate implements IMekanismPacket
int type = dataStream.readInt(); int type = dataStream.readInt();
Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null; Fluid fluidType = type != -1 ? FluidRegistry.getFluid(type) : null;
didFluidTransfer = dataStream.readBoolean(); didFluidTransfer = dataStream.readBoolean();
scale = dataStream.readFloat();
if(tileEntity != null) if(tileEntity != null)
{ {
((ITransmitter<FluidNetwork>)tileEntity).getTransmitterNetwork().refFluid = fluidType; ((ITransmitter<FluidNetwork>)tileEntity).getTransmitterNetwork().refFluid = fluidType;
((ITransmitter<FluidNetwork>)tileEntity).getTransmitterNetwork().didTransfer = didFluidTransfer; ((ITransmitter<FluidNetwork>)tileEntity).getTransmitterNetwork().didTransfer = didFluidTransfer;
((ITransmitter<FluidNetwork>)tileEntity).getTransmitterNetwork().definedScale = scale;
} }
} }
} }
@ -136,10 +144,12 @@ public class PacketTransmitterUpdate implements IMekanismPacket
case GAS: case GAS:
dataStream.writeInt(gasType); dataStream.writeInt(gasType);
dataStream.writeBoolean(didGasTransfer); dataStream.writeBoolean(didGasTransfer);
dataStream.writeFloat(scale);
break; break;
case FLUID: case FLUID:
dataStream.writeInt(fluidType); dataStream.writeInt(fluidType);
dataStream.writeBoolean(didFluidTransfer); dataStream.writeBoolean(didFluidTransfer);
dataStream.writeFloat(scale);
break; break;
} }
} }