Readded buffered and direct consumers as three classes

This commit is contained in:
Timmeey86
2018-11-21 20:07:05 +01:00
parent 558c89cc30
commit f789a35901
3 changed files with 134 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
package io.anuke.mindustry.world.consumers;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.BlockStats;
import io.anuke.mindustry.world.meta.StatUnit;
/** Consumer class for blocks which consume power while being connected to a power graph. */
public abstract class ConsumePower extends Consume{
/** The maximum amount of power which can be processed per tick. This might influence efficiency or load a buffer. */
protected final float powerPerTick;
public ConsumePower(float powerPerTick){
this.powerPerTick = powerPerTick;
}
@Override
public void buildTooltip(Table table){
// No tooltip for power
}
@Override
public String getIcon(){
return "icon-power";
}
@Override
public void update(Block block, TileEntity entity){
// Nothing to do since PowerGraph directly updates entity.power.satisfaction
}
// valid(...) is implemented in subclass
// display(...) is implemented in subclass
/**
* Retrieves the amount of power which is requested for the given block and entity.
* @param block The block which needs power.
* @param entity The entity which contains the power module.
* @return The amount of power which is requested per tick.
*/
public float requestedPower(Block block, TileEntity entity){
// TODO Is it possible to make the block not consume power while items/liquids are missing?
return powerPerTick;
}
}

View File

@@ -0,0 +1,43 @@
package io.anuke.mindustry.world.consumers;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.BlockStats;
import io.anuke.mindustry.world.meta.StatUnit;
/** Consumer class for blocks which directly consume power without buffering it. */
public class ConsumePowerBuffered extends ConsumePower{
/** The maximum power capacity in power units. */
protected final float powerCapacity;
/**
* Adds a power buffer to the owner which takes ticksToFill number of ticks to be filled.
* Note that this object does not remove power from the buffer.
* @param powerCapacity The maximum capacity in power units.
* @param ticksToFill The number of ticks it shall take to fill the buffer.
*/
public ConsumePowerBuffered(float powerCapacity, float ticksToFill){
super(powerCapacity / ticksToFill);
this.powerCapacity = powerCapacity;
}
@Override
public boolean valid(Block block, TileEntity entity){
// TODO - Verify: It might be necessary to know about the power required per shot/event here.
return true;
}
@Override
public void display(BlockStats stats){
stats.add(BlockStat.powerCapacity, powerCapacity, StatUnit.powerSecond);
}
@Override
public float requestedPower(Block block, TileEntity entity){
// Only request power until the capacity is full
return Math.max(powerPerTick, powerCapacity * (1 - entity.power.satisfaction));
}
}

View File

@@ -0,0 +1,43 @@
package io.anuke.mindustry.world.consumers;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.BlockStats;
import io.anuke.mindustry.world.meta.StatUnit;
/** Consumer class for blocks which directly consume power without buffering it. */
public class ConsumePowerDirect extends ConsumePower{
/** The minimum power satisfaction (fraction of powerPerTick) which must be achieved before the module may work. */
protected final float minimumSatisfaction;
/**
* Makes the owner consume powerPerTick each tick and disables it unless 60% of that power is being supplied.
* @param powerPerTick The maximum amount of power which is required per tick for 100% efficiency.
*/
public ConsumePowerDirect(float powerPerTick){
this(powerPerTick, 0.75f);
}
/**
* Makes the owner consume powerPerTick each tick and disables it unless minimumSatisfaction (1.0 = 100%) of that power is being supplied.
* @param powerPerTick The maximum amount of power which is required per tick for 100% efficiency.
* @param minimumSatisfaction The percentage of powerPerTick which must be available for the module to work.
*/
public ConsumePowerDirect(float powerPerTick, float minimumSatisfaction){
super(powerPerTick);
this.minimumSatisfaction = minimumSatisfaction;
}
@Override
public boolean valid(Block block, TileEntity entity){
return entity.power.satisfaction >= minimumSatisfaction;
}
@Override
public void display(BlockStats stats){
stats.add(BlockStat.powerUse, powerPerTick * 60f, StatUnit.powerSecond);
}
}