From a97df4247bb21e01e3e5837a9367897fbb2254d6 Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Fri, 21 Aug 2020 10:11:48 -0700 Subject: [PATCH 1/7] F O R C E P R O J E C T O R S --- core/assets/bundles/bundle.properties | 3 +++ core/src/mindustry/content/Blocks.java | 2 +- .../world/blocks/defense/ForceProjector.java | 25 ++++++++++++++++--- core/src/mindustry/world/meta/BlockStat.java | 2 ++ core/src/mindustry/world/meta/StatUnit.java | 1 + 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b945616494..99f4f52d0f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -596,6 +596,8 @@ blocks.inaccuracy = Inaccuracy blocks.shots = Shots blocks.reload = Shots/Second blocks.ammo = Ammo +blocks.shieldhealth = Shield Health +blocks.cooldowntime = Cooldown Time bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -641,6 +643,7 @@ unit.seconds = seconds unit.persecond = /sec unit.timesspeed = x speed unit.percent = % +unit.shieldhealth = shield health unit.items = items unit.thousands = k unit.millions = mil diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 65d45aa256..c6d236d3b3 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -879,7 +879,7 @@ public class Blocks implements ContentList{ forceProjector = new ForceProjector("force-projector"){{ requirements(Category.effect, with(Items.lead, 100, Items.titanium, 75, Items.silicon, 125)); size = 3; - phaseRadiusBoost = 80f; + phaseBoost = 80f; radius = 101.7f; breakage = 750f; cooldownNormal = 1.5f; diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 6f90531d86..1b98b17728 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -22,7 +22,7 @@ public class ForceProjector extends Block{ public final int timerUse = timers++; public float phaseUseTime = 350f; - public float phaseRadiusBoost = 80f; + public float phaseBoost = 80f; public float radius = 101.7f; public float breakage = 550f; public float cooldownNormal = 1.75f; @@ -41,6 +41,12 @@ public class ForceProjector extends Block{ } }; + static final Cons unitPusher = unit -> { + if(unit.team() != paramEntity.team && Intersector.isInsideHexagon(paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, unit.x(), unit.y())){ + unit.impulse(Tmp.v3.set(unit).sub(paramEntity.x, paramEntity.y).nor().scl(100f)); + } + }; + public ForceProjector(String name){ super(name); update = true; @@ -60,7 +66,8 @@ public class ForceProjector extends Block{ @Override public void setStats(){ super.setStats(); - + stats.add(BlockStat.shieldHealth, breakage, StatUnit.none); + stats.add(BlockStat.cooldownTime, (int) (breakage / cooldownBrokenBase / 60f), StatUnit.seconds); stats.add(BlockStat.powerUse, basePowerDraw * 60f, StatUnit.powerSecond); stats.add(BlockStat.boostEffect, phaseRadiusBoost / tilesize, StatUnit.blocks); } @@ -76,6 +83,15 @@ public class ForceProjector extends Block{ Lines.stroke(1f); Lines.poly(x * tilesize, y * tilesize, 6, radius); Draw.color(); + + float phaseBoostedRadius = radius + phaseBoost; + Draw.color(Pal.gray); + Lines.stroke(3f); + Lines.poly(x * tilesize, y * tilesize, 6, phaseBoostedRadius); + Draw.color(player.team().color); + Lines.stroke(1f); + Lines.poly(x * tilesize, y * tilesize, 6, phaseBoostedRadius); + Draw.color(); } public class ForceProjectorEntity extends Building{ @@ -119,7 +135,7 @@ public class ForceProjector extends Block{ broken = false; } - if(buildup >= breakage && !broken){ + if(buildup >= breakage + (phaseBoost * 5f) && !broken){ broken = true; buildup = breakage; Fx.shieldBreak.at(x, y, radius, team.color); @@ -134,11 +150,12 @@ public class ForceProjector extends Block{ if(realRadius > 0 && !broken){ paramEntity = this; Groups.bullet.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, shieldConsumer); + Groups.unit.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, unitPusher); } } float realRadius(){ - return (radius + phaseHeat * phaseRadiusBoost) * radscl; + return (radius + phaseHeat * phaseBoost) * radscl; } @Override diff --git a/core/src/mindustry/world/meta/BlockStat.java b/core/src/mindustry/world/meta/BlockStat.java index 2a432208a8..eac0b6997d 100644 --- a/core/src/mindustry/world/meta/BlockStat.java +++ b/core/src/mindustry/world/meta/BlockStat.java @@ -45,6 +45,8 @@ public enum BlockStat{ targetsGround(StatCategory.shooting), damage(StatCategory.shooting), ammo(StatCategory.shooting), + shieldHealth(StatCategory.shooting), + cooldownTime(StatCategory.shooting), booster(StatCategory.optional), boostEffect(StatCategory.optional), diff --git a/core/src/mindustry/world/meta/StatUnit.java b/core/src/mindustry/world/meta/StatUnit.java index 5136280e8a..cff8eee6a8 100644 --- a/core/src/mindustry/world/meta/StatUnit.java +++ b/core/src/mindustry/world/meta/StatUnit.java @@ -19,6 +19,7 @@ public enum StatUnit{ perSecond, timesSpeed(false), percent(false), + shieldHealth, none, items; From 5f3b2047089c908132b094d0c6ae110b7a00a4ba Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Fri, 21 Aug 2020 10:12:04 -0700 Subject: [PATCH 2/7] Update ForceProjector.java --- core/src/mindustry/world/blocks/defense/ForceProjector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 1b98b17728..9f0c541dfe 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -69,7 +69,8 @@ public class ForceProjector extends Block{ stats.add(BlockStat.shieldHealth, breakage, StatUnit.none); stats.add(BlockStat.cooldownTime, (int) (breakage / cooldownBrokenBase / 60f), StatUnit.seconds); stats.add(BlockStat.powerUse, basePowerDraw * 60f, StatUnit.powerSecond); - stats.add(BlockStat.boostEffect, phaseRadiusBoost / tilesize, StatUnit.blocks); + stats.add(BlockStat.boostEffect, phaseBoost / tilesize, StatUnit.blocks); + stats.add(BlockStat.boostEffect, phaseBoost * 5f, StatUnit.shieldHealth); } @Override From 0c4e58ee2ba815d3408d6f7a9bf886a9a53827d8 Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Fri, 21 Aug 2020 21:43:09 -0700 Subject: [PATCH 3/7] remove push mechanic --- .../src/mindustry/world/blocks/defense/ForceProjector.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 9f0c541dfe..7f16a0d078 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -41,12 +41,6 @@ public class ForceProjector extends Block{ } }; - static final Cons unitPusher = unit -> { - if(unit.team() != paramEntity.team && Intersector.isInsideHexagon(paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, unit.x(), unit.y())){ - unit.impulse(Tmp.v3.set(unit).sub(paramEntity.x, paramEntity.y).nor().scl(100f)); - } - }; - public ForceProjector(String name){ super(name); update = true; @@ -151,7 +145,6 @@ public class ForceProjector extends Block{ if(realRadius > 0 && !broken){ paramEntity = this; Groups.bullet.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, shieldConsumer); - Groups.unit.intersect(x - realRadius, y - realRadius, realRadius * 2f, realRadius * 2f, unitPusher); } } From 7954788da31ebbdcda0fa9630ac0f6022a87340a Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Sat, 22 Aug 2020 09:00:50 -0700 Subject: [PATCH 4/7] changed phase radius boost Split into phase radius boost and phase shield boost. --- .../world/blocks/defense/ForceProjector.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 7f16a0d078..6497f448d5 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -22,7 +22,8 @@ public class ForceProjector extends Block{ public final int timerUse = timers++; public float phaseUseTime = 350f; - public float phaseBoost = 80f; + public float phaseRadiusBoost = 80f; + public float phaseShieldBoost = 400f; public float radius = 101.7f; public float breakage = 550f; public float cooldownNormal = 1.75f; @@ -63,8 +64,8 @@ public class ForceProjector extends Block{ stats.add(BlockStat.shieldHealth, breakage, StatUnit.none); stats.add(BlockStat.cooldownTime, (int) (breakage / cooldownBrokenBase / 60f), StatUnit.seconds); stats.add(BlockStat.powerUse, basePowerDraw * 60f, StatUnit.powerSecond); - stats.add(BlockStat.boostEffect, phaseBoost / tilesize, StatUnit.blocks); - stats.add(BlockStat.boostEffect, phaseBoost * 5f, StatUnit.shieldHealth); + stats.add(BlockStat.boostEffect, phaseRadiusBoost / tilesize, StatUnit.blocks); + stats.add(BlockStat.boostEffect, phaseShieldBoost * 5f, StatUnit.shieldHealth); } @Override @@ -79,7 +80,7 @@ public class ForceProjector extends Block{ Lines.poly(x * tilesize, y * tilesize, 6, radius); Draw.color(); - float phaseBoostedRadius = radius + phaseBoost; + float phaseBoostedRadius = radius + phaseRadiusBoost; Draw.color(Pal.gray); Lines.stroke(3f); Lines.poly(x * tilesize, y * tilesize, 6, phaseBoostedRadius); @@ -130,7 +131,7 @@ public class ForceProjector extends Block{ broken = false; } - if(buildup >= breakage + (phaseBoost * 5f) && !broken){ + if(buildup >= breakage + phaseShieldBoost && !broken){ broken = true; buildup = breakage; Fx.shieldBreak.at(x, y, radius, team.color); @@ -149,7 +150,7 @@ public class ForceProjector extends Block{ } float realRadius(){ - return (radius + phaseHeat * phaseBoost) * radscl; + return (radius + phaseHeat * phaseRadiusBoost) * radscl; } @Override From 94fe7bb456c451628da05a2c226addc7025e2f37 Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Sat, 22 Aug 2020 09:03:09 -0700 Subject: [PATCH 5/7] Forgot to remove this * 5f for some reason --- core/src/mindustry/world/blocks/defense/ForceProjector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 6497f448d5..2791acfce2 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -65,7 +65,7 @@ public class ForceProjector extends Block{ stats.add(BlockStat.cooldownTime, (int) (breakage / cooldownBrokenBase / 60f), StatUnit.seconds); stats.add(BlockStat.powerUse, basePowerDraw * 60f, StatUnit.powerSecond); stats.add(BlockStat.boostEffect, phaseRadiusBoost / tilesize, StatUnit.blocks); - stats.add(BlockStat.boostEffect, phaseShieldBoost * 5f, StatUnit.shieldHealth); + stats.add(BlockStat.boostEffect, phaseShieldBoost, StatUnit.shieldHealth); } @Override From 939fbab4c43d9eede878f8ac5720f9387e3884aa Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Sat, 22 Aug 2020 10:05:16 -0700 Subject: [PATCH 6/7] why did I forget to change this --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index c6d236d3b3..65d45aa256 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -879,7 +879,7 @@ public class Blocks implements ContentList{ forceProjector = new ForceProjector("force-projector"){{ requirements(Category.effect, with(Items.lead, 100, Items.titanium, 75, Items.silicon, 125)); size = 3; - phaseBoost = 80f; + phaseRadiusBoost = 80f; radius = 101.7f; breakage = 750f; cooldownNormal = 1.5f; From 3b8b762a1c4e7583589dcad12db6f8ea810f2140 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 19 Sep 2020 21:15:18 -0400 Subject: [PATCH 7/7] Removed phase radius display *(see description)* Phased radius has been proposed in numerous PRs, but I don't know how to handle it properly yet. New players may be confused about the extra circle/hexagon indicator around blocks - it's not clear what it means. An extra radius easy to implement, so I'll leave it out of this PR and handle it later. --- .../mindustry/world/blocks/defense/ForceProjector.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index 2791acfce2..36a7b80127 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -79,15 +79,6 @@ public class ForceProjector extends Block{ Lines.stroke(1f); Lines.poly(x * tilesize, y * tilesize, 6, radius); Draw.color(); - - float phaseBoostedRadius = radius + phaseRadiusBoost; - Draw.color(Pal.gray); - Lines.stroke(3f); - Lines.poly(x * tilesize, y * tilesize, 6, phaseBoostedRadius); - Draw.color(player.team().color); - Lines.stroke(1f); - Lines.poly(x * tilesize, y * tilesize, 6, phaseBoostedRadius); - Draw.color(); } public class ForceProjectorEntity extends Building{