From 3246c0c39bd71bdd2ccf84afdbf11607ccf42953 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 9 Feb 2025 11:24:34 -0500 Subject: [PATCH] Configurable block build time --- core/src/mindustry/ai/BaseRegistry.java | 2 +- core/src/mindustry/content/Blocks.java | 2 +- .../maps/generators/BaseGenerator.java | 2 +- core/src/mindustry/world/Block.java | 18 +++++++++++------- .../mindustry/world/blocks/ConstructBlock.java | 6 +++--- .../world/blocks/payloads/BlockProducer.java | 8 ++++---- .../world/blocks/payloads/BuildPayload.java | 2 +- .../world/blocks/units/UnitCargoLoader.java | 4 ++-- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/core/src/mindustry/ai/BaseRegistry.java b/core/src/mindustry/ai/BaseRegistry.java index d37f7b8826..32a81d04b4 100644 --- a/core/src/mindustry/ai/BaseRegistry.java +++ b/core/src/mindustry/ai/BaseRegistry.java @@ -82,7 +82,7 @@ public class BaseRegistry{ } schem.tiles.removeAll(s -> s.block.buildVisibility == BuildVisibility.sandboxOnly); - part.tier = schem.tiles.sumf(s -> Mathf.pow(s.block.buildCost / s.block.buildCostMultiplier, 1.4f)); + part.tier = schem.tiles.sumf(s -> Mathf.pow(s.block.buildTime / s.block.buildCostMultiplier, 1.4f)); if(part.core != null){ cores.add(part); diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 5da15a6761..9919875489 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2094,7 +2094,7 @@ public class Blocks{ requirements(Category.distribution, with(Items.silicon, 80, Items.surgeAlloy, 50, Items.oxide, 20)); size = 3; - buildTime = 60f * 8f; + unitBuildTime = 60f * 8f; consumePower(8f / 60f); diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index ff3645bb7c..22538dce7c 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -35,7 +35,7 @@ public class BaseGenerator{ && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door) && b.isOnPlanet(state.getPlanet())); - wallsSmall.sort(b -> b.buildCost); + wallsSmall.sort(b -> b.buildTime); return wallsSmall.getFrac(difficulty * 0.91f); } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 45b45f707d..47afa2a88a 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -318,8 +318,8 @@ public class Block extends UnlockableContent implements Senseable{ public ItemStack[] requirements = {}; /** Category in place menu. */ public Category category = Category.distribution; - /** Time to build this block in ticks; do not modify directly! */ - public float buildCost = 20f; + /** Time to build this block in ticks. If this value is <0, it is calculated dynamically. */ + public float buildTime = -1f; /** Whether this block is visible and can currently be built. */ public BuildVisibility buildVisibility = BuildVisibility.hidden; /** Multiplier for speed of building this block. */ @@ -557,7 +557,7 @@ public class Block extends UnlockableContent implements Senseable{ } if(canBeBuilt() && requirements.length > 0){ - stats.add(Stat.buildTime, buildCost / 60, StatUnit.seconds); + stats.add(Stat.buildTime, buildTime / 60, StatUnit.seconds); stats.add(Stat.buildCost, StatValues.items(false, requirements)); } @@ -1237,14 +1237,18 @@ public class Block extends UnlockableContent implements Senseable{ offset = ((size + 1) % 2) * tilesize / 2f; sizeOffset = -((size - 1) / 2); - if(requirements.length > 0){ - buildCost = 0f; + if(requirements.length > 0 && buildTime < 0){ + buildTime = 0f; for(ItemStack stack : requirements){ - buildCost += stack.amount * stack.item.cost; + buildTime += stack.amount * stack.item.cost; } } - buildCost *= buildCostMultiplier; + if(buildTime < 0){ + buildTime = 20f; + } + + buildTime *= buildCostMultiplier; consumers = consumeBuilder.toArray(Consume.class); optionalConsumers = consumeBuilder.select(consume -> consume.optional && !consume.ignore()).toArray(Consume.class); diff --git a/core/src/mindustry/world/blocks/ConstructBlock.java b/core/src/mindustry/world/blocks/ConstructBlock.java index 0a49f8212f..9d0cd7a47e 100644 --- a/core/src/mindustry/world/blocks/ConstructBlock.java +++ b/core/src/mindustry/world/blocks/ConstructBlock.java @@ -422,7 +422,7 @@ public class ConstructBlock extends Block{ this.wasConstructing = true; this.current = block; this.previous = previous; - this.buildCost = block.buildCost * state.rules.buildCostMultiplier; + this.buildCost = block.buildTime * state.rules.buildCostMultiplier; this.itemsLeft = new int[block.requirements.length]; this.accumulator = new float[block.requirements.length]; this.totalAccumulator = new float[block.requirements.length]; @@ -442,7 +442,7 @@ public class ConstructBlock extends Block{ this.previous = previous; this.progress = 1f; this.current = previous; - this.buildCost = previous.buildCost * state.rules.buildCostMultiplier; + this.buildCost = previous.buildTime * state.rules.buildCostMultiplier; this.itemsLeft = new int[previous.requirements.length]; this.accumulator = new float[previous.requirements.length]; this.totalAccumulator = new float[previous.requirements.length]; @@ -500,7 +500,7 @@ public class ConstructBlock extends Block{ if(previous == null) previous = Blocks.air; if(current == null) current = Blocks.air; - buildCost = current.buildCost * state.rules.buildCostMultiplier; + buildCost = current.buildTime * state.rules.buildCostMultiplier; } } } diff --git a/core/src/mindustry/world/blocks/payloads/BlockProducer.java b/core/src/mindustry/world/blocks/payloads/BlockProducer.java index 2bc66e0e1f..c0c3a7b154 100644 --- a/core/src/mindustry/world/blocks/payloads/BlockProducer.java +++ b/core/src/mindustry/world/blocks/payloads/BlockProducer.java @@ -67,7 +67,7 @@ public abstract class BlockProducer extends PayloadBlock{ public void setBars(){ super.setBars(); - addBar("progress", (BlockProducerBuild entity) -> new Bar("bar.progress", Pal.ammo, () -> entity.recipe() == null ? 0f : (entity.progress / entity.recipe().buildCost))); + addBar("progress", (BlockProducerBuild entity) -> new Bar("bar.progress", Pal.ammo, () -> entity.recipe() == null ? 0f : (entity.progress / entity.recipe().buildTime))); } public abstract class BlockProducerBuild extends PayloadBlockBuild{ @@ -108,7 +108,7 @@ public abstract class BlockProducer extends PayloadBlock{ if(produce){ progress += buildSpeed * edelta(); - if(progress >= recipe.buildCost){ + if(progress >= recipe.buildTime){ consume(); payload = new BuildPayload(recipe, team); payload.block().placeEffect.at(x, y, payload.size() / tilesize); @@ -130,14 +130,14 @@ public abstract class BlockProducer extends PayloadBlock{ var recipe = recipe(); if(recipe != null){ - Drawf.shadow(x, y, recipe.size * tilesize * 2f, progress / recipe.buildCost); + Drawf.shadow(x, y, recipe.size * tilesize * 2f, progress / recipe.buildTime); Draw.draw(Layer.blockBuilding, () -> { Draw.color(Pal.accent); for(TextureRegion region : recipe.getGeneratedIcons()){ Shaders.blockbuild.region = region; Shaders.blockbuild.time = time; - Shaders.blockbuild.progress = progress / recipe.buildCost; + Shaders.blockbuild.progress = progress / recipe.buildTime; Draw.rect(region, x, y, recipe.rotate ? rotdeg() : 0); Draw.flush(); diff --git a/core/src/mindustry/world/blocks/payloads/BuildPayload.java b/core/src/mindustry/world/blocks/payloads/BuildPayload.java index 524cdf75aa..f192625818 100644 --- a/core/src/mindustry/world/blocks/payloads/BuildPayload.java +++ b/core/src/mindustry/world/blocks/payloads/BuildPayload.java @@ -64,7 +64,7 @@ public class BuildPayload implements Payload{ @Override public float buildTime(){ - return build.block.buildCost; + return build.block.buildTime; } @Override diff --git a/core/src/mindustry/world/blocks/units/UnitCargoLoader.java b/core/src/mindustry/world/blocks/units/UnitCargoLoader.java index ee42fc828e..5a7b1223d1 100644 --- a/core/src/mindustry/world/blocks/units/UnitCargoLoader.java +++ b/core/src/mindustry/world/blocks/units/UnitCargoLoader.java @@ -22,7 +22,7 @@ import static mindustry.Vars.*; public class UnitCargoLoader extends Block{ public UnitType unitType = UnitTypes.manifold; - public float buildTime = 60f * 8f; + public float unitBuildTime = 60f * 8f; public float polyStroke = 1.8f, polyRadius = 8f; public int polySides = 6; @@ -106,7 +106,7 @@ public class UnitCargoLoader extends Block{ readyness = Mathf.approachDelta(readyness, unit != null ? 1f : 0f, 1f / 60f); if(unit == null && Units.canCreate(team, unitType)){ - buildProgress += edelta() / buildTime; + buildProgress += edelta() / unitBuildTime; totalProgress += edelta(); if(buildProgress >= 1f){