Limit build progress per frame gamerule

This commit is contained in:
EggleEgg 2025-11-16 21:13:39 +01:00
parent 5397d8426c
commit b312fe8b20
4 changed files with 10 additions and 2 deletions

View file

@ -1495,6 +1495,7 @@ rules.initialwavespacing = Initial Wave Spacing:[lightgray] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier
rules.limitbuildprogress = Limit Build Progress
rules.waitForWaveToEnd = Waves Wait for Enemies
rules.wavelimit = Map Ends After Wave
rules.dropzoneradius = Drop Zone Radius:[lightgray] (tiles)

View file

@ -104,6 +104,8 @@ public class Rules{
public float buildCostMultiplier = 1f;
/** Multiplier for building speed. */
public float buildSpeedMultiplier = 1f;
/** Maximum block build progress that can be built per frame */
public float limitBuildProgress = Float.MAX_VALUE;
/** Multiplier for percentage of materials refunded when deconstructing. */
public float deconstructRefundMultiplier = 0.5f;
/** Multiplier for time in timer objectives. */
@ -285,6 +287,10 @@ public class Rules{
return buildSpeedMultiplier * teams.get(team).buildSpeedMultiplier;
}
public float limitBuildProgress(Team team){
return instantBuild ? Float.MAX_VALUE : limitBuildProgress / 60f;
}
public boolean isBanned(Block block){
return blockWhitelist != bannedBlocks.contains(block);
}

View file

@ -170,6 +170,7 @@ public class CustomRulesDialog extends BaseDialog{
check("@rules.disableworldprocessors", b -> rules.disableWorldProcessors = b, () -> rules.disableWorldProcessors);
number("@rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources);
number("@rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier, 0.001f, 50f);
number("@rules.limitbuildprogress", f -> rules.limitBuildProgress = f, () -> rules.limitBuildProgress, 0f, Float.MAX_VALUE);
number("@rules.deconstructrefundmultiplier", false, f -> rules.deconstructRefundMultiplier = f, () -> rules.deconstructRefundMultiplier, () -> !rules.infiniteResources, 0f, 1f);
number("@rules.blockhealthmultiplier", f -> rules.blockHealthMultiplier = f, () -> rules.blockHealthMultiplier);
number("@rules.blockdamagemultiplier", f -> rules.blockDamageMultiplier = f, () -> rules.blockDamageMultiplier);

View file

@ -288,7 +288,7 @@ public class ConstructBlock extends Block{
maxProgress = core == null || team.rules().infiniteResources ? maxProgress : checkRequired(core.items, maxProgress, true);
progress = Mathf.clamp(progress + maxProgress);
progress = Mathf.clamp(progress + Math.min(maxProgress, state.rules.limitBuildProgress * amount));
if(progress >= 1f || state.rules.infiniteResources){
boolean canFinish = true;
@ -362,7 +362,7 @@ public class ConstructBlock extends Block{
}
}
progress = Mathf.clamp(progress - amount);
progress = Mathf.clamp(progress - Math.min(amount, state.rules.limitBuildProgress * amount));
if(progress <= current.deconstructThreshold || state.rules.infiniteResources){
//add any leftover items that weren't obtained due to rounding errors