Build cost/speed rules

This commit is contained in:
Anuken
2019-03-24 18:33:07 -04:00
parent e1f53dfc67
commit bb9573b85a
25 changed files with 67 additions and 12 deletions

View File

@@ -515,6 +515,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Předměty content.item.name = Předměty
content.liquid.name = Tekutiny content.liquid.name = Tekutiny
content.unit.name = jednotky content.unit.name = jednotky

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Materialien content.item.name = Materialien
content.liquid.name = Flüssigkeiten content.liquid.name = Flüssigkeiten
content.unit.name = Einheiten content.unit.name = Einheiten

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objetos content.item.name = Objetos
content.liquid.name = Líquidos content.liquid.name = Líquidos
content.unit.name = Unidades content.unit.name = Unidades

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objets content.item.name = Objets
content.liquid.name = Liquides content.liquid.name = Liquides
content.unit.name = Unités content.unit.name = Unités

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objets content.item.name = Objets
content.liquid.name = Liquides content.liquid.name = Liquides
content.unit.name = Unités content.unit.name = Unités

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Oggetti content.item.name = Oggetti
content.liquid.name = Liquidi content.liquid.name = Liquidi
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = アイテム content.item.name = アイテム
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = ユニット content.unit.name = ユニット

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = 아이템 content.item.name = 아이템
content.liquid.name = 액체 content.liquid.name = 액체
content.unit.name = 유닛 content.unit.name = 유닛

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Przedmioty content.item.name = Przedmioty
content.liquid.name = Płyny content.liquid.name = Płyny
content.unit.name = Jednostki content.unit.name = Jednostki

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Itens content.item.name = Itens
content.liquid.name = Liquidos content.liquid.name = Liquidos
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Предметы content.item.name = Предметы
content.liquid.name = Жидкости content.liquid.name = Жидкости
content.unit.name = Боевые единицы content.unit.name = Боевые единицы

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Esyalar content.item.name = Esyalar
content.liquid.name = Sivilar content.liquid.name = Sivilar
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Предмети content.item.name = Предмети
content.liquid.name = Рідини content.liquid.name = Рідини
content.unit.name = Бойові одиниці content.unit.name = Бойові одиниці

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = 部队 content.unit.name = 部队

View File

@@ -505,6 +505,8 @@ rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液體 content.liquid.name = 液體
content.unit.name = 機組 content.unit.name = 機組

View File

@@ -234,9 +234,9 @@ public interface BuilderTrait extends Entity, TeamTrait{
if(!Net.client()){ if(!Net.client()){
//deconstructing is 2x as fast //deconstructing is 2x as fast
if(current.breaking){ if(current.breaking){
entity.deconstruct(unit, core, 2f / entity.buildCost * Time.delta() * getBuildPower(tile)); entity.deconstruct(unit, core, 2f / entity.buildCost * Time.delta() * getBuildPower(tile) * state.rules.buildSpeedMultiplier);
}else{ }else{
entity.construct(unit, core, 1f / entity.buildCost * Time.delta() * getBuildPower(tile)); entity.construct(unit, core, 1f / entity.buildCost * Time.delta() * getBuildPower(tile) * state.rules.buildSpeedMultiplier);
} }
current.progress = entity.progress(); current.progress = entity.progress();

View File

@@ -25,6 +25,8 @@ public enum RulePreset{
pvp = true; pvp = true;
enemyCoreBuildRadius = 600f; enemyCoreBuildRadius = 600f;
respawnTime = 60 * 10; respawnTime = 60 * 10;
buildCostMultiplier = 0.5f;
buildSpeedMultiplier = 2f;
}}); }});
private final Supplier<Rules> rules; private final Supplier<Rules> rules;

View File

@@ -19,6 +19,10 @@ public class Rules{
public boolean pvp; public boolean pvp;
/**Whether enemy units drop random items on death.*/ /**Whether enemy units drop random items on death.*/
public boolean unitDrops; public boolean unitDrops;
/**Multiplier for buildings for the player.*/
public float buildCostMultiplier = 1f;
/**Multiplier for building speed.*/
public float buildSpeedMultiplier = 1f;
/**No-build zone around enemy core radius.*/ /**No-build zone around enemy core radius.*/
public float enemyCoreBuildRadius = 400f; public float enemyCoreBuildRadius = 400f;
/**Player respawn time in ticks.*/ /**Player respawn time in ticks.*/

View File

@@ -15,6 +15,10 @@ public class CustomRulesDialog extends FloatingDialog{
public CustomRulesDialog(){ public CustomRulesDialog(){
super("$mode.custom"); super("$mode.custom");
rules.waves = true;
rules.waveTimer = true;
setFillParent(true); setFillParent(true);
shown(this::setup); shown(this::setup);
addCloseButton(); addCloseButton();
@@ -31,12 +35,14 @@ public class CustomRulesDialog extends FloatingDialog{
main.row(); main.row();
main.addCheck("$rules.wavetimer", b -> rules.waveTimer = b).checked(b -> rules.waveTimer); main.addCheck("$rules.wavetimer", b -> rules.waveTimer = b).checked(b -> rules.waveTimer);
main.row(); main.row();
main.addCheck("$rules.waves", b -> rules.waves = b).checked(b -> rules.waves); main.addCheck("$rules.waves", b -> rules.waves = b).checked(b -> rules.waves).disabled(b -> rules.pvp);
main.row(); main.row();
main.addCheck("$rules.pvp", b -> rules.pvp = b).checked(b -> rules.pvp); main.addCheck("$rules.pvp", b -> rules.pvp = b).checked(b -> rules.pvp).disabled(b -> rules.waves);
main.row(); main.row();
main.addCheck("$rules.unitdrops", b -> rules.unitDrops = b).checked(b -> rules.unitDrops); main.addCheck("$rules.unitdrops", b -> rules.unitDrops = b).checked(b -> rules.unitDrops);
main.row(); main.row();
number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier);
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200)); number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200));
number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f); number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f);
number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f); number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f);
@@ -46,7 +52,7 @@ public class CustomRulesDialog extends FloatingDialog{
main.table(t -> { main.table(t -> {
t.left(); t.left();
t.add(text).left().padRight(5); t.add(text).left().padRight(5);
Platform.instance.addDialog(t.addField((int)prov.get() + "", s -> cons.accept(Strings.parseFloat(s))) Platform.instance.addDialog(t.addField(prov.get() + "", s -> cons.accept(Strings.parseFloat(s)))
.valid(Strings::canParsePositiveFloat).width(120f).left().get()); .valid(Strings::canParsePositiveFloat).width(120f).left().get());
}); });

View File

@@ -215,9 +215,10 @@ public class PlacementFragment extends Fragment{
if(core == null || state.rules.infiniteResources) return "*/*"; if(core == null || state.rules.infiniteResources) return "*/*";
int amount = core.items.get(stack.item); int amount = core.items.get(stack.item);
String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); int stackamount = Math.round(stack.amount * state.rules.buildCostMultiplier);
String color = (amount < stackamount / 2f ? "[red]" : amount < stackamount ? "[accent]" : "[white]");
return color + ui.formatAmount(amount) + "[white]/" + stack.amount; return color + ui.formatAmount(amount) + "[white]/" + stackamount;
}).padLeft(5); }).padLeft(5);
}).left(); }).left();
req.row(); req.row();

View File

@@ -197,8 +197,9 @@ public class BuildBlock extends Block{
float maxProgress = checkRequired(core.items, amount, false); float maxProgress = checkRequired(core.items, amount, false);
for(int i = 0; i < block.buildRequirements.length; i++){ for(int i = 0; i < block.buildRequirements.length; i++){
accumulator[i] += Math.min(block.buildRequirements[i].amount * maxProgress, block.buildRequirements[i].amount - totalAccumulator[i] + 0.00001f); //add min amount progressed to the accumulator int reqamount = Math.round(state.rules.buildCostMultiplier * block.buildRequirements[i].amount);
totalAccumulator[i] = Math.min(totalAccumulator[i] + block.buildRequirements[i].amount * maxProgress, block.buildRequirements[i].amount); accumulator[i] += Math.min(reqamount * maxProgress, reqamount - totalAccumulator[i] + 0.00001f); //add min amount progressed to the accumulator
totalAccumulator[i] = Math.min(totalAccumulator[i] + reqamount * maxProgress, reqamount);
} }
maxProgress = checkRequired(core.items, maxProgress, true); maxProgress = checkRequired(core.items, maxProgress, true);
@@ -215,6 +216,7 @@ public class BuildBlock extends Block{
} }
public void deconstruct(Unit builder, TileEntity core, float amount){ public void deconstruct(Unit builder, TileEntity core, float amount){
float deconstructMultiplier = 0.5f;
if(block != null){ if(block != null){
ItemStack[] requirements = block.buildRequirements; ItemStack[] requirements = block.buildRequirements;
@@ -223,8 +225,9 @@ public class BuildBlock extends Block{
} }
for(int i = 0; i < requirements.length; i++){ for(int i = 0; i < requirements.length; i++){
accumulator[i] += Math.min(requirements[i].amount * amount / 2f, requirements[i].amount / 2f - totalAccumulator[i]); //add scaled amount progressed to the accumulator int reqamount = Math.round(state.rules.buildCostMultiplier * requirements[i].amount);
totalAccumulator[i] = Math.min(totalAccumulator[i] + requirements[i].amount * amount / 2f, requirements[i].amount); accumulator[i] += Math.min(amount * deconstructMultiplier * reqamount, deconstructMultiplier * reqamount - totalAccumulator[i]); //add scaled amount progressed to the accumulator
totalAccumulator[i] = Math.min(totalAccumulator[i] + reqamount * amount * deconstructMultiplier, reqamount);
int accumulated = (int)(accumulator[i]); //get amount int accumulated = (int)(accumulator[i]); //get amount
@@ -248,9 +251,10 @@ public class BuildBlock extends Block{
float maxProgress = amount; float maxProgress = amount;
for(int i = 0; i < block.buildRequirements.length; i++){ for(int i = 0; i < block.buildRequirements.length; i++){
int sclamount = Math.round(state.rules.buildCostMultiplier * block.buildRequirements[i].amount);
int required = (int) (accumulator[i]); //calculate items that are required now int required = (int) (accumulator[i]); //calculate items that are required now
if(inventory.get(block.buildRequirements[i].item) == 0){ if(inventory.get(block.buildRequirements[i].item) == 0 && sclamount != 0){
maxProgress = 0f; maxProgress = 0f;
}else if(required > 0){ //if this amount is positive... }else if(required > 0){ //if this amount is positive...
//calculate how many items it can actually use //calculate how many items it can actually use