Most direct consumers now operate slower when not supplied with full power

This commit is contained in:
Timmeey86
2018-12-01 18:32:17 +01:00
parent 62c6d8e42d
commit 034fab480d
15 changed files with 33 additions and 11 deletions

View File

@@ -186,6 +186,14 @@ public class Block extends BaseBlock {
return out;
}
protected float getProgressIncrease(TileEntity entity, float baseTime){
float progressIncrease = 1f / baseTime * entity.delta();
if(hasPower){
progressIncrease *= entity.power.satisfaction; // Reduced increase in case of low power
}
return progressIncrease;
}
public boolean isLayer(Tile tile){
return true;
}

View File

@@ -84,7 +84,7 @@ public class MendProjector extends Block{
other = other.target();
if(other.getTeamID() == tile.getTeamID() && !healed.contains(other.packedPosition()) && other.entity != null && other.entity.health < other.entity.maxHealth()){
other.entity.healBy(other.entity.maxHealth() * (healPercent + entity.phaseHeat*phaseBoost)/100f);
other.entity.healBy(other.entity.maxHealth() * (healPercent + entity.phaseHeat*phaseBoost)/100f * entity.power.satisfaction);
Effects.effect(BlockFx.healBlockFull, Hue.mix(color, phase, entity.phaseHeat), other.drawx(), other.drawy(), other.block().size);
healed.add(other.packedPosition());
}

View File

@@ -68,7 +68,7 @@ public class OverdriveProjector extends Block{
if(entity.charge >= reload){
float realRange = range + entity.phaseHeat * phaseRangeBoost;
float realBoost = speedBoost + entity.phaseHeat*speedBoostPhase;
float realBoost = (speedBoost + entity.phaseHeat*speedBoostPhase) * entity.power.satisfaction;
Effects.effect(BlockFx.overdriveWave, Hue.mix(color, phase, entity.phaseHeat), tile.drawx(), tile.drawy(), realRange);
entity.charge = 0f;

View File

@@ -31,7 +31,11 @@ public class LiquidBridge extends ItemBridge{
tryDumpLiquid(tile, entity.liquids.current());
}else{
if(entity.cons.valid()){
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, 0.04f);
float alpha = 0.04f;
if(hasPower){
alpha *= entity.power.satisfaction; // Exceed boot time unless power is at max.
}
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, alpha);
}else{
entity.uptime = Mathf.lerpDelta(entity.uptime, 0f, 0.02f);
}

View File

@@ -188,6 +188,9 @@ public class Drill extends Block{
if(entity.consumed(ConsumeLiquid.class) && !liquidRequired){
speed = liquidBoostIntensity;
}
if(hasPower){
speed *= entity.power.satisfaction; // Drill slower when not at full power
}
entity.warmup = Mathf.lerpDelta(entity.warmup, speed, warmupSpeed);
entity.progress += entity.delta()

View File

@@ -64,7 +64,7 @@ public class Fracker extends SolidPump{
if(entity.cons.valid() && entity.accumulator < itemUseTime){
super.update(tile);
entity.accumulator += entity.delta();
entity.accumulator += entity.delta() * entity.power.satisfaction;
}else{
tryDumpLiquid(tile, result);
}

View File

@@ -83,7 +83,7 @@ public class GenericCrafter extends Block{
if(entity.cons.valid() && tile.entity.items.get(output) < itemCapacity){
entity.progress += 1f / craftTime * entity.delta();
entity.progress += getProgressIncrease(entity, craftTime);
entity.totalProgress += entity.delta();
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);

View File

@@ -26,7 +26,8 @@ public class Incinerator extends Block{
update = true;
solid = true;
consumes.powerDirect(0.05f);
// Incinerator has no speed which could be adjusted, so it will only operate fully powered for now
consumes.powerDirect(0.05f, 1.0f);
}
@Override

View File

@@ -60,6 +60,9 @@ public class LiquidMixer extends LiquidBlock{
if(tile.entity.cons.valid()){
float use = Math.min(consumes.get(ConsumeLiquid.class).used() * entity.delta(), liquidCapacity - entity.liquids.get(outputLiquid));
if(hasPower){
use *= entity.power.satisfaction; // Produce less liquid if power is not maxed
}
entity.accumulator += use;
entity.liquids.add(outputLiquid, use);
for(int i = 0; i < (int) (entity.accumulator / liquidPerItem); i++){

View File

@@ -65,7 +65,7 @@ public class PowerCrafter extends Block{
GenericCrafterEntity entity = tile.entity();
if(entity.cons.valid()){
entity.progress += 1f / craftTime * entity.delta();
entity.progress += getProgressIncrease(entity, craftTime);
entity.totalProgress += entity.delta();
}

View File

@@ -122,7 +122,7 @@ public class PowerSmelter extends PowerBlock{
}
}
entity.craftTime += entity.delta();
entity.craftTime += entity.delta() * entity.power.satisfaction;
if(entity.items.get(result) >= itemCapacity //output full
|| entity.heat <= minHeat //not burning

View File

@@ -95,6 +95,9 @@ public class Pump extends LiquidBlock{
if(tile.entity.cons.valid() && liquidDrop != null){
float maxPump = Math.min(liquidCapacity - tile.entity.liquids.total(), tiles * pumpAmount * tile.entity.delta());
if(hasPower){
maxPump *= tile.entity.power.satisfaction; // Produce slower if not at full power
}
tile.entity.liquids.add(liquidDrop, maxPump);
}

View File

@@ -87,7 +87,7 @@ public class Separator extends Block{
entity.totalProgress += entity.warmup * entity.delta();
if(entity.cons.valid()){
entity.progress += 1f / filterTime*entity.delta();
entity.progress += getProgressIncrease(entity, filterTime);
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);
}else{
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.02f);

View File

@@ -76,7 +76,7 @@ public class SolidPump extends Pump{
}
if(tile.entity.cons.valid() && typeLiquid(tile) < liquidCapacity - 0.001f){
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction);
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction * entity.power.satisfaction);
tile.entity.liquids.add(result, maxPump);
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);
if(Mathf.chance(entity.delta() * updateEffectChance))

View File

@@ -159,7 +159,7 @@ public class UnitFactory extends Block{
if(hasRequirements(entity.items, entity.buildTime / produceTime) && entity.cons.valid()){
entity.buildTime += entity.delta();
entity.buildTime += entity.delta() * entity.power.satisfaction;
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.05f);
}else{
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 0f, 0.05f);