diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 2c5f25b200..1de652091f 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2812,7 +2812,7 @@ public class Blocks{ output = Items.sand; fogRadius = 3; ambientSound = Sounds.drill; - ambientSoundVolume = 0.05f; + ambientSoundVolume = 0.08f; consumeLiquid(Liquids.ozone, 1f / 60f); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java index 0d80699d8b..b785e3ec4f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java @@ -50,13 +50,6 @@ public class ContinuousLiquidTurret extends ContinuousTurret{ public void display(Stats stats){ } - - //TODO - //@Override - //protected float use(Building entity){ - // BulletType type = ammoTypes.get(entity.liquids.current()); - // return Math.min(amount * entity.edelta(), entity.block.liquidCapacity) / (type == null ? 1f : type.ammoMultiplier); - //} }); ammoTypes.each((item, type) -> placeOverlapRange = Math.max(placeOverlapRange, range + type.rangeChange + placeOverlapMargin)); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java index 9203869459..8748b91ed8 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java @@ -1,9 +1,6 @@ package mindustry.world.blocks.defense.turrets; import arc.math.*; -import arc.struct.*; -import arc.util.*; -import mindustry.type.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -21,23 +18,7 @@ public class ReloadTurret extends BaseTurret{ super.setStats(); if(coolant != null){ - stats.remove(Stat.booster); - - //TODO this is very hacky, there is no current way to check if a ConsumeLiquidBase accepts something individually. fix later - ObjectSet notBooster = content.liquids().select(l -> { - for(Consume c : consumers){ - if(!c.booster && c != coolant && - ((c instanceof ConsumeLiquid cl && cl.liquid == l) || - (c instanceof ConsumeLiquids cl2 && Structs.contains(cl2.liquids, s -> s.liquid == l)) || - (c instanceof ConsumeLiquidFilter clf && clf.filter.get(l)))){ - - return true; - } - } - return false; - }).asSet(); - - stats.add(Stat.booster, StatValues.boosters(reload, coolant.amount, coolantMultiplier, true, l -> l.coolant && consumesLiquid(l) && !notBooster.contains(l))); + stats.replace(Stat.booster, StatValues.boosters(reload, coolant.amount, coolantMultiplier, true, coolant::consumes)); } } @@ -46,10 +27,10 @@ public class ReloadTurret extends BaseTurret{ protected void updateCooling(){ if(reloadCounter < reload && coolant != null && coolant.efficiency(this) > 0 && efficiency > 0){ - float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f; + float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : (coolant.consumes(liquids.current()) ? liquids.current().heatCapacity : 0.4f); float amount = coolant.amount * coolant.efficiency(this); coolant.update(this); - reloadCounter += amount * edelta() * capacity * coolantMultiplier; + reloadCounter += amount * edelta() * capacity * coolantMultiplier * ammoReloadMultiplier(); if(Mathf.chance(0.06 * amount)){ coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f)); @@ -57,6 +38,10 @@ public class ReloadTurret extends BaseTurret{ } } + protected float ammoReloadMultiplier(){ + return 1f; + } + protected float baseReloadSpeed(){ return efficiency; } diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 426d038912..806cbd151a 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -575,13 +575,17 @@ public class Turret extends ReloadTurret{ } protected void updateReload(){ - float multiplier = hasAmmo() ? peekAmmo().reloadMultiplier : 1f; - reloadCounter += delta() * multiplier * baseReloadSpeed(); + reloadCounter += delta() * ammoReloadMultiplier() * baseReloadSpeed(); //cap reload for visual reasons reloadCounter = Math.min(reloadCounter, reload); } + @Override + protected float ammoReloadMultiplier(){ + return hasAmmo() ? peekAmmo().reloadMultiplier : 1f; + } + protected void updateShooting(){ if(reloadCounter >= reload && !charging() && shootWarmup >= minWarmup){ diff --git a/core/src/mindustry/world/meta/Stats.java b/core/src/mindustry/world/meta/Stats.java index 7056c6fa2c..b776994228 100644 --- a/core/src/mindustry/world/meta/Stats.java +++ b/core/src/mindustry/world/meta/Stats.java @@ -73,6 +73,12 @@ public class Stats{ add(stat, StatValues.string(format, args)); } + /** Replaces a stat, removing the old value if it exists. */ + public void replace(Stat stat, StatValue value){ + remove(stat); + add(stat, value); + } + /** Adds a stat value. */ public void add(Stat stat, StatValue value){ if(map == null) map = new OrderedMap<>();