From f582462177fe4e0109abf432fb30bee3d65c47a1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Dec 2021 17:41:55 -0500 Subject: [PATCH] wip --- core/src/mindustry/content/Blocks.java | 13 +++---- .../blocks/production/AttributeCrafter.java | 6 ++- .../blocks/production/GenericCrafter.java | 18 +++++++-- .../mindustry/world/draw/DrawBlurSpin.java | 39 +++++++++++++++++++ gradle.properties | 2 +- 5 files changed, 65 insertions(+), 13 deletions(-) create mode 100644 core/src/mindustry/world/draw/DrawBlurSpin.java diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 3657b1dd2f..61a8973f39 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -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; }}; diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 17a98870f6..0568404d90 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -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{ diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index f04bbf1314..dd241800aa 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -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); } diff --git a/core/src/mindustry/world/draw/DrawBlurSpin.java b/core/src/mindustry/world/draw/DrawBlurSpin.java new file mode 100644 index 0000000000..a02bc29d95 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawBlurSpin.java @@ -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 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"); + } +} diff --git a/gradle.properties b/gradle.properties index ad213e4ec8..074ee130ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=f65ae0d8f7 +archash=f8264ffafe