From 411b6d74601d75b5da528cda7336fc062625118b Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 11 Jul 2022 14:37:57 -0400 Subject: [PATCH] Shockwave tower block --- .../blocks/defense/shockwave-tower-heat.png | Bin 0 -> 5535 bytes .../blocks/defense/shockwave-tower.png | Bin 0 -> 3124 bytes core/assets/bundles/bundle.properties | 1 + core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4580 -> 4597 bytes core/src/mindustry/content/Blocks.java | 9 +- .../src/mindustry/content/ErekirTechTree.java | 2 + core/src/mindustry/content/Fx.java | 8 ++ core/src/mindustry/logic/LStatements.java | 3 +- .../world/blocks/defense/ShockwaveTower.java | 118 ++++++++++++++++++ gradle.properties | 2 +- tools/src/mindustry/tools/Generators.java | 2 +- 12 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/defense/shockwave-tower-heat.png create mode 100644 core/assets-raw/sprites/blocks/defense/shockwave-tower.png create mode 100644 core/src/mindustry/world/blocks/defense/ShockwaveTower.java diff --git a/core/assets-raw/sprites/blocks/defense/shockwave-tower-heat.png b/core/assets-raw/sprites/blocks/defense/shockwave-tower-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..f949af1f2d3045ccbaea1f444bfd90348781af45 GIT binary patch literal 5535 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/defense/shockwave-tower.png b/core/assets-raw/sprites/blocks/defense/shockwave-tower.png new file mode 100644 index 0000000000000000000000000000000000000000..dff1d431182881a8dcfdea53ec296dba12be38cb GIT binary patch literal 3124 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 W>}Bd_;}{qi7(8A5T-G@yGywp=6o!@n literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index c4f0726835..83a22a0561 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1563,6 +1563,7 @@ block.shielded-wall.name = Shielded Wall block.radar.name = Radar block.build-tower.name = Build Tower block.regen-projector.name = Regen Projector +block.shockwave-tower.name = Shockwave Tower block.shield-projector.name = Shield Projector block.large-shield-projector.name = Large Shield Projector block.armored-duct.name = Armored Duct diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index baa9a70758..b4df3089f8 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -575,3 +575,4 @@ 63109=underflow-duct|block-underflow-duct-ui 63108=malign|block-malign-ui 63107=smite|block-smite-ui +63106=shockwave-tower|block-shockwave-tower-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index a3f5da8dc84490eca6b0021ecb095e32a5d094a9..d568dc39476ec8de3c465e48d75f4e4b4c961a82 100644 GIT binary patch delta 32 ocmaE&{8gEW;paxC$9w|(#Tog@+2x64sk$Zk<*7xBpYSmQ0Mru { //TODO more tiers of build tower or "support" structures like overdrive projectors node(buildTower, Seq.with(new OnSector(four)), () -> { + node(shockwaveTower, () -> { + }); }); }); }); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index c1b50d78af..3a5ee1ed08 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -198,6 +198,14 @@ public class Fx{ rect(block.fullIcon, e.x, e.y); }).layer(Layer.turret - 5f), + pointShockwave = new Effect(20, e -> { + color(e.color); + stroke(e.fout() * 2f); + Lines.circle(e.x, e.y, e.finpow() * e.rotation); + randLenVectors(e.id + 1, 8, 1f + 23f * e.finpow(), (x, y) -> + lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f)); + }), + moveCommand = new Effect(20, e -> { color(Pal.command); stroke(e.fout() * 5f); diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index a6df7dcac6..cb10027821 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -11,7 +11,6 @@ import mindustry.*; import mindustry.annotations.Annotations.*; import mindustry.ctype.*; import mindustry.gen.*; -import mindustry.graphics.*; import mindustry.logic.LCanvas.*; import mindustry.logic.LExecutor.*; import mindustry.type.*; @@ -1264,7 +1263,7 @@ public class LStatements{ fields(table, unit, str -> unit = str); - if(!clear){ + if(!clear && !(content.statusEffect(effect) != null && content.statusEffect(effect).permanent)){ table.add(" for "); diff --git a/core/src/mindustry/world/blocks/defense/ShockwaveTower.java b/core/src/mindustry/world/blocks/defense/ShockwaveTower.java new file mode 100644 index 0000000000..ec93ed7de6 --- /dev/null +++ b/core/src/mindustry/world/blocks/defense/ShockwaveTower.java @@ -0,0 +1,118 @@ +package mindustry.world.blocks.defense; + +import arc.math.*; +import arc.util.*; +import arc.struct.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.audio.*; +import mindustry.content.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.world.meta.*; +import mindustry.world.*; +import mindustry.entities.*; +import mindustry.annotations.Annotations.Load; + +import static mindustry.Vars.*; + +public class ShockwaveTower extends Block{ + public int timerCheck = timers ++; + + public float range = 90f; + public float reload = 60f * 2f; + public float bulletDamage = 150; + public float falloffCount = 20f; + public float shake = 2f; + //checking for bullets every frame is costly, so only do it at intervals even when ready. + public float checkInterval = 8f; + public Sound shootSound = Sounds.bang; + public Color waveColor = Pal.accent, heatColor = Pal.turretHeat, shapeColor = Color.valueOf("f29c83"); + public float cooldownMultiplier = 1f; + public Effect waveEffect = Fx.pointShockwave; + + public float shapeRotateSpeed = 1f, shapeRadius = 6f; + public int shapeSides = 4; + + public @Load("@-heat") TextureRegion heatRegion; + + public ShockwaveTower(String name){ + super(name); + update = true; + solid = true; + } + + @Override + public void setStats(){ + super.setStats(); + + stats.add(Stat.damage, bulletDamage, StatUnit.none); + stats.add(Stat.range, range / tilesize, StatUnit.blocks); + stats.add(Stat.reload, 60f / reload, StatUnit.perSecond); + } + + @Override + public void drawPlace(int x, int y, int rotation, boolean valid){ + super.drawPlace(x, y, rotation, valid); + + Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, waveColor); + } + + public class ShockwaveTowerBuild extends Building{ + public float reloadCounter = Mathf.random(reload); + public float heat = 0f; + public Seq targets = new Seq<>(); + + @Override + public void updateTile(){ + if(potentialEfficiency > 0 && (reloadCounter += Time.delta) >= reload && timer(timerCheck, checkInterval)){ + targets.clear(); + Groups.bullet.intersect(x - range, y - range, range * 2, range * 2, b -> { + if(b.team != team && b.type.hittable){ + targets.add(b); + } + }); + + if(targets.size > 0){ + heat = 1f; + reloadCounter = 0f; + waveEffect.at(x, y, range, waveColor); + shootSound.at(this); + Effect.shake(shake, shake, this); + float waveDamage = Math.min(bulletDamage, bulletDamage * falloffCount / targets.size); + + for(var target : targets){ + if(target.damage > waveDamage){ + target.damage -= waveDamage; + }else{ + target.remove(); + } + } + } + } + + heat = Mathf.clamp(heat - Time.delta / reload * cooldownMultiplier); + } + + @Override + public float warmup(){ + return heat; + } + + @Override + public boolean shouldConsume(){ + return targets.size != 0; + } + + @Override + public void draw(){ + super.draw(); + Drawf.additive(heatRegion, heatColor, heat, x, y, 0f, Layer.blockAdditive); + + Draw.z(Layer.effect); + Draw.color(shapeColor, waveColor, Mathf.pow(heat, 2f)); + Fill.poly(x, y, shapeSides, shapeRadius * potentialEfficiency, Time.time * shapeRotateSpeed); + Draw.color(); + } + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1ecdb11d3e..77ed3793fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ org.gradle.caching=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=29a4391826 +archash=b1b88883e2 diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index b5702a9945..c15bf06a22 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -382,7 +382,7 @@ public class Generators{ save(image, "../editor/" + block.name + "-icon-editor"); if(block.buildVisibility != BuildVisibility.hidden){ - saveScaled(image, block.name + "-icon-logic", logicIconSize); + saveScaled(image, block.name + "-icon-logic", Math.min(32 * 3, image.width)); } saveScaled(image, "../ui/block-" + block.name + "-ui", Math.min(image.width, maxUiIcon));