Skip to content

Commit

Permalink
Configurable block build time
Browse files Browse the repository at this point in the history
  • Loading branch information
Anuken committed Feb 9, 2025
1 parent e77708b commit 3246c0c
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 20 deletions.
2 changes: 1 addition & 1 deletion core/src/mindustry/ai/BaseRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public void load(){
}
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);
Expand Down
2 changes: 1 addition & 1 deletion core/src/mindustry/content/Blocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -2094,7 +2094,7 @@ public static void load(){
requirements(Category.distribution, with(Items.silicon, 80, Items.surgeAlloy, 50, Items.oxide, 20));

size = 3;
buildTime = 60f * 8f;
unitBuildTime = 60f * 8f;

consumePower(8f / 60f);

Expand Down
2 changes: 1 addition & 1 deletion core/src/mindustry/maps/generators/BaseGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static Block getDifficultyWall(int size, float difficulty){
&& !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);
}

Expand Down
18 changes: 11 additions & 7 deletions core/src/mindustry/world/Block.java
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down Expand Up @@ -557,7 +557,7 @@ public void setStats(){
}

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));
}

Expand Down Expand Up @@ -1237,14 +1237,18 @@ public void init(){
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);
Expand Down
6 changes: 3 additions & 3 deletions core/src/mindustry/world/blocks/ConstructBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ public void setConstruct(Block previous, Block 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];
Expand All @@ -442,7 +442,7 @@ public void setDeconstruct(Block previous){
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];
Expand Down Expand Up @@ -500,7 +500,7 @@ public void read(Reads read, byte revision){
if(previous == null) previous = Blocks.air;
if(current == null) current = Blocks.air;

buildCost = current.buildCost * state.rules.buildCostMultiplier;
buildCost = current.buildTime * state.rules.buildCostMultiplier;
}
}
}
8 changes: 4 additions & 4 deletions core/src/mindustry/world/blocks/payloads/BlockProducer.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void drawPlanRegion(BuildPlan plan, Eachable<BuildPlan> list){
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<BuildPayload>{
Expand Down Expand Up @@ -108,7 +108,7 @@ public void updateTile(){
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);
Expand All @@ -130,14 +130,14 @@ public void draw(){

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();
Expand Down
2 changes: 1 addition & 1 deletion core/src/mindustry/world/blocks/payloads/BuildPayload.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public ItemStack[] requirements(){

@Override
public float buildTime(){
return build.block.buildCost;
return build.block.buildTime;
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions core/src/mindustry/world/blocks/units/UnitCargoLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

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;
Expand Down Expand Up @@ -106,7 +106,7 @@ public void updateTile(){
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){
Expand Down

0 comments on commit 3246c0c

Please sign in to comment.