This commit is contained in:
Anuken
2021-12-09 17:41:55 -05:00
parent 57e5acdbd7
commit f582462177
5 changed files with 65 additions and 13 deletions

View File

@@ -2185,23 +2185,22 @@ public class Blocks{
ventCondenser = new AttributeCrafter("vent-condenser"){{
requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 60));
attribute = Attribute.vent;
displayEfficiencyScale = 1f / 9f;
minEfficiency = 9f - 0.0001f;
baseEfficiency = 0f;
displayEfficiency = false;
craftEffect = Fx.turbinegenerate;
drawer = new DrawMulti(new DrawBlock(), new DrawRegion("-rotator-blur"){{
spinSprite = true;
drawPlan = false;
drawer = new DrawMulti(new DrawBlock(), new DrawBlurSpin("-rotator"){{
rotateSpeed = 6f;
}});
drawer.iconOverride = new String[]{"", "-rotator"};
ignoreLiquidFullness = true;
craftTime = 30f;
craftTime = 50f;
size = 3;
ambientSound = Sounds.hum;
ambientSoundVolume = 0.06f;
hasLiquids = true;
outputLiquid = new LiquidStack(Liquids.water, 30f / 60f / 9f);
continuousLiquidOutput = true;
boostScale = 1f / 9f;
outputLiquid = new LiquidStack(Liquids.water, 30f / 60f);
consumes.power(0.5f);
liquidCapacity = 20f;
}};

View File

@@ -35,6 +35,8 @@ public class AttributeCrafter extends GenericCrafter{
public void setBars(){
super.setBars();
if(!displayEfficiency) return;
bars.add("efficiency", (AttributeCrafterBuild entity) ->
new Bar(() ->
Core.bundle.format("bar.efficiency", (int)(entity.efficiencyScale() * 100 * displayEfficiencyScale)),
@@ -45,14 +47,14 @@ public class AttributeCrafter extends GenericCrafter{
@Override
public boolean canPlaceOn(Tile tile, Team team, int rotation){
//make sure there's enough efficiency at this location
return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(attribute)) > minEfficiency;
return baseEfficiency + tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(attribute)) >= minEfficiency;
}
@Override
public void setStats(){
super.setStats();
stats.add(Stat.affinities, attribute, boostScale * size * size);
stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : Stat.affinities, attribute, floating, boostScale * size * size, !displayEfficiency);
}
public class AttributeCrafterBuild extends GenericCrafterBuild{

View File

@@ -31,6 +31,8 @@ public class GenericCrafter extends Block{
/** if true, crafters with multiple liquid outputs will dump excess when there's still space for at least one liquid type */
public boolean dumpExtraLiquid = true;
public boolean ignoreLiquidFullness = false;
/** if true, liquid will be outputted continuously regardless of craft time */
public boolean continuousLiquidOutput = false;
public float craftTime = 80;
public Effect craftEffect = Fx.none;
public Effect updateEffect = Fx.none;
@@ -64,7 +66,7 @@ public class GenericCrafter extends Block{
}
if(outputLiquids != null){
stats.add(Stat.output, StatValues.liquids(craftTime, outputLiquids));
stats.add(Stat.output, StatValues.liquids(continuousLiquidOutput ? 1f : craftTime, outputLiquids));
}
}
@@ -188,9 +190,16 @@ public class GenericCrafter extends Block{
if(consValid()){
progress += getProgressIncrease(craftTime);
totalProgress += delta() * efficiency();
warmup = Mathf.approachDelta(warmup, warmupTarget(), warmupSpeed);
//continuously output based on efficiency
if(outputLiquids != null && continuousLiquidOutput){
float inc = getProgressIncrease(1f);
for(var output : outputLiquids){
handleLiquid(this, output.liquid, Math.min(output.amount * inc, liquidCapacity - liquids.get(output.liquid)));
}
}
if(Mathf.chanceDelta(updateEffectChance)){
updateEffect.at(x + Mathf.range(size * 4f), y + Mathf.range(size * 4));
}
@@ -198,6 +207,9 @@ public class GenericCrafter extends Block{
warmup = Mathf.approachDelta(warmup, 0f, warmupSpeed);
}
//TODO may look bad, revert to edelta() if so
totalProgress += warmup * Time.delta;
if(progress >= 1f){
craft();
}
@@ -230,7 +242,7 @@ public class GenericCrafter extends Block{
}
}
if(outputLiquids != null){
if(outputLiquids != null && !continuousLiquidOutput){
for(var output : outputLiquids){
handleLiquid(this, output.liquid, output.amount);
}

View File

@@ -0,0 +1,39 @@
package mindustry.world.draw;
import arc.*;
import arc.graphics.g2d.*;
import arc.util.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.*;
/** Not standalone. */
public class DrawBlurSpin extends DrawBlock{
public TextureRegion region, blurRegion;
public String suffix = "";
public float rotateSpeed = 1f, x, y, blurThresh = 0.7f;
public DrawBlurSpin(String suffix){
this.suffix = suffix;
}
public DrawBlurSpin(){
}
@Override
public void drawBase(Building build){
Drawf.spinSprite(build.warmup() > blurThresh ? blurRegion : region, build.x + x, build.y + y, build.totalProgress() * rotateSpeed);
}
@Override
public void drawPlan(Block block, BuildPlan plan, Eachable<BuildPlan> list){
Draw.rect(region, plan.drawx(), plan.drawy());
}
@Override
public void load(Block block){
region = Core.atlas.find(block.name + suffix);
blurRegion = Core.atlas.find(block.name + suffix + "-blur");
}
}