mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-03-09 20:29:06 +07:00
Configurable block build time
This commit is contained in:
parent
e77708b55b
commit
3246c0c39b
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<BuildPayload>{
|
||||
@ -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();
|
||||
|
@ -64,7 +64,7 @@ public class BuildPayload implements Payload{
|
||||
|
||||
@Override
|
||||
public float buildTime(){
|
||||
return build.block.buildCost;
|
||||
return build.block.buildTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -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){
|
||||
|
Loading…
Reference in New Issue
Block a user