diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 53e6adf705..cf3c7391d9 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1679,7 +1679,7 @@ public class Blocks{ requirements(Category.effect, with(Items.silicon, 80, Items.carbide, 30, Items.oxide, 40, Items.thorium, 30)); outlineColor = Pal.darkOutline; consumes.power(3f); - range = 150f; + range = 160f; size = 3; buildSpeed = 1.5f; }}; diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index d105279395..c137a5ff5f 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -14,8 +14,6 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; import mindustry.world.*; -import mindustry.world.blocks.defense.MendProjector.*; -import mindustry.world.blocks.defense.RegenProjector.*; import static mindustry.Vars.*; @@ -40,7 +38,7 @@ public class Damage{ build.applyHealSuppression(reload + 1f); //TODO maybe should be block field instead of instanceof check - if(build.wasRecentlyHealed(60f * 12f) || (build instanceof MendBuild || build instanceof RegenProjectorBuild)){ + if(build.wasRecentlyHealed(60f * 12f) || build.block.suppressable){ //add prev check so ability spam doesn't lead to particle spam (essentially, recently suppressed blocks don't get new particles) if(!headless && prev - Time.time <= reload/2f){ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 6253750460..f41330321c 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1100,6 +1100,19 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, Draw.color(); } + /** @return whether a building has regen/healing suppressed; if so, spawns particles on it. */ + public boolean checkSuppression(){ + if(isHealSuppressed()){ + if(Mathf.chanceDelta(0.03)){ + Fx.regenSuppressParticle.at(x + Mathf.range(block.size * tilesize/2f - 1f), y + Mathf.range(block.size * tilesize/2f - 1f)); + } + + return true; + } + + return false; + } + /** Called after the block is placed by this client. */ @CallSuper public void playerPlaced(Object config){ diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 6ea8158170..083db0814b 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -208,6 +208,8 @@ public class Block extends UnlockableContent{ public boolean hasColor = false; /** Whether units target this block. */ public boolean targetable = true; + /** If true, this block is mending-related and can be suppressed with special units/missiles. */ + public boolean suppressable = false; /** Whether the overdrive core has any effect on this block. */ public boolean canOverdrive = true; /** Outlined icon color.*/ diff --git a/core/src/mindustry/world/blocks/defense/BuildTurret.java b/core/src/mindustry/world/blocks/defense/BuildTurret.java index 92282d16df..6c8b74e476 100644 --- a/core/src/mindustry/world/blocks/defense/BuildTurret.java +++ b/core/src/mindustry/world/blocks/defense/BuildTurret.java @@ -40,6 +40,7 @@ public class BuildTurret extends BaseTurret{ group = BlockGroup.turrets; sync = false; rotateSpeed = 10f; + suppressable = true; } @Override @@ -105,6 +106,8 @@ public class BuildTurret extends BaseTurret{ unit.lookAt(angleTo(unit.buildPlan())); } + checkSuppression(); + unit.buildSpeedMultiplier(efficiency() * timeScale); unit.speedMultiplier(efficiency() * timeScale); @@ -200,6 +203,11 @@ public class BuildTurret extends BaseTurret{ unit.buildSpeedMultiplier(Math.max(unit.buildSpeedMultiplier(), 0.00001f)); } + @Override + public float efficiency(){ + return super.efficiency() * (isHealSuppressed() ? 0f : 1f); + } + @Override public boolean shouldConsume(){ return super.shouldConsume() && unit.activelyBuilding(); diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index 4a59734b38..e58dae9ae9 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -36,6 +36,7 @@ public class MendProjector extends Block{ hasItems = true; emitLight = true; lightRadius = 50f; + suppressable = true; envEnabled |= Env.space; } @@ -65,19 +66,6 @@ public class MendProjector extends Block{ indexer.eachBlock(player.team(), x * tilesize + offset, y * tilesize + offset, range, other -> true, other -> Drawf.selected(other, Tmp.c1.set(baseColor).a(Mathf.absin(4f, 1f)))); } - /** @return whether a building has regen/healing suppressed; if so, spawns particles on it. */ - public static boolean checkSuppression(Building build){ - if(build.isHealSuppressed()){ - if(Mathf.chanceDelta(0.03)){ - Fx.regenSuppressParticle.at(build.x + Mathf.range(build.block.size * tilesize/2f - 1f), build.y + Mathf.range(build.block.size * tilesize/2f - 1f)); - } - - return true; - } - - return false; - } - public class MendBuild extends Building implements Ranged{ public float heat, charge = Mathf.random(reload), phaseHeat, smoothEfficiency; @@ -88,7 +76,7 @@ public class MendProjector extends Block{ @Override public void updateTile(){ - boolean canHeal = !checkSuppression(this); + boolean canHeal = !checkSuppression(); smoothEfficiency = Mathf.lerpDelta(smoothEfficiency, efficiency(), 0.08f); heat = Mathf.lerpDelta(heat, consValid() && canHeal ? 1f : 0f, 0.08f); diff --git a/core/src/mindustry/world/blocks/defense/RegenProjector.java b/core/src/mindustry/world/blocks/defense/RegenProjector.java index 65b9f4d66b..ae4deb195a 100644 --- a/core/src/mindustry/world/blocks/defense/RegenProjector.java +++ b/core/src/mindustry/world/blocks/defense/RegenProjector.java @@ -44,6 +44,7 @@ public class RegenProjector extends Block{ hasPower = true; hasItems = true; emitLight = true; + suppressable = true; envEnabled |= Env.space; rotateDraw = false; } @@ -117,7 +118,7 @@ public class RegenProjector extends Block{ didRegen = false; //no healing when suppressed - if(MendProjector.checkSuppression(this)){ + if(checkSuppression()){ return; }