From 0ede0dbf0c6aa36381b9ae2055a8d4f47d634148 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Dec 2021 19:18:16 -0500 Subject: [PATCH] 5x5 burst drill --- .../drills/eruption-drill-arrow-blur.png | Bin 0 -> 919 bytes .../blocks/drills/eruption-drill-arrow.png | Bin 0 -> 258 bytes .../blocks/drills/eruption-drill-glow.png | Bin 0 -> 2705 bytes .../blocks/drills/eruption-drill-item.png | Bin 0 -> 685 bytes .../blocks/drills/eruption-drill-top.png | Bin 0 -> 2670 bytes .../sprites/blocks/drills/eruption-drill.png | Bin 0 -> 3931 bytes .../blocks/drills/impact-drill-rotator.png | Bin 889 -> 0 bytes .../sprites/blocks/drills/surge-drill.png | Bin 3037 -> 0 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3893 -> 3909 bytes core/src/mindustry/content/Blocks.java | 61 ++++++++++++------ .../src/mindustry/content/ErekirTechTree.java | 2 + core/src/mindustry/content/Fx.java | 31 +++++++-- core/src/mindustry/content/TechTree.java | 4 -- core/src/mindustry/entities/Effect.java | 9 +++ .../mindustry/entities/effect/WrapEffect.java | 40 ++++++++++++ core/src/mindustry/graphics/Drawf.java | 4 ++ .../world/blocks/production/BurstDrill.java | 26 +++++--- 18 files changed, 139 insertions(+), 39 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill-arrow-blur.png create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill-arrow.png create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill-glow.png create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill-item.png create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill-top.png create mode 100644 core/assets-raw/sprites/blocks/drills/eruption-drill.png delete mode 100644 core/assets-raw/sprites/blocks/drills/impact-drill-rotator.png delete mode 100644 core/assets-raw/sprites/blocks/drills/surge-drill.png create mode 100644 core/src/mindustry/entities/effect/WrapEffect.java diff --git a/core/assets-raw/sprites/blocks/drills/eruption-drill-arrow-blur.png b/core/assets-raw/sprites/blocks/drills/eruption-drill-arrow-blur.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c6e0e2ebba4b66a8d89d67244371411d0f3dac GIT binary patch literal 919 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+7>k44ofy`glX=O&z#Qo5 z;uumf=k2ZR{L3B^Z4aw2P20jMCKkrjDDde2|8;joJDfGQEKxc8;o;na!O70t9XBr3 zdM>u=m35t$&NtK0W0Hy|Hk5hk(z^Wz<~*4rTzLLf?P&);&8K&3SH~watXmlJhv^3M zx6_6P#BMN5KTy`^Xux0}pjFSmgH@-|`N4ucd)dMcuzrx-F(;aX=Rmp1)cq{)80x1M zMfgQBE?+uF(DB9@O_txg|1k+~SBUy2`#|vn#}D=$(f9sy>|u+$$jkj?PP#A?vw_m{ zJqqv63l_*%@Yt}=n|7VEg8z?yOG@Cs@~Cz5T{(CT>~QJ%di((M1I`ak90!?qo!S?D zF52Y!IW-ox1P9~S>lt_Wm;Co{Om|`U)}i=dh0OQo!J9c686~E7{4Vy`@@ao(m6Hz~HQ#;=xNe`a zNzs7e@GZSs!+={;558Wv)W?X0?Lk`5=k3$1{3Rx__Z6S3G}3Nkdyw{P>bJ!LPlC4X zEpmJ#|7H%O#5BqEdvx!!Ej%auOYww@>-x^UO}o-JoV4^$`h0?+CtJJTIpoo-wD0|^ z?f+)^Z&0Z-%RBvZegprJRS&C^-ac4V)5kbtgH*$L7u9)FKXtA+Q1xDHZ}uyuONw{d zF6}LfDHnR}QuLhXzz&}+mqaf%-Dk}2WL=nQnSSzWJX7h7jOwmm`#p^qn1j45pU3R} zQ2cwqj>C(@S@f289&vJ1YBTSkj4C= z?}g<*?Rx*yU)M38ahc09Z|e2wF8v?cX1uJ==UB1%zwoZa2gyJ8yp{j)?z&Ou%okI> z&f~OEYHLbP(hHDhdC9(jE!~yn*&L1|Pv%LRFkHW2BY)w(NY;0@ee=%!_;pZ4tUikE z0o$qMBvYQwhtC;|?ypmMHsw;vuD{b5e{e2!&-luGVXxsvF@3Bl8?WG!`wzIcFPFO- UVNmJLz`(%Z>FVdQ&MBb@0E+3Png9R* literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/eruption-drill-arrow.png b/core/assets-raw/sprites/blocks/drills/eruption-drill-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..88b8b3e65ed03dab979319d6af7868d2f9982ff3 GIT binary patch literal 258 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 a|I$}Bq|RnI?aaWyz~JfX=d#Wzp$P!Mo+XR` literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/eruption-drill-item.png b/core/assets-raw/sprites/blocks/drills/eruption-drill-item.png new file mode 100644 index 0000000000000000000000000000000000000000..73a5e7624e3e362b06fe0bb00d622f2aa0bc69e4 GIT binary patch literal 685 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/drills/eruption-drill.png b/core/assets-raw/sprites/blocks/drills/eruption-drill.png new file mode 100644 index 0000000000000000000000000000000000000000..da7f0465767fb04aea8a3ba76c7e31938c3ee6ec GIT binary patch literal 3931 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 Xl9k44ofy`glX=O&z-;X4 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 My85}Sb4q9e0G_vglmGw# diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 919fee1809..c144be8365 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -491,3 +491,4 @@ 63213=beryllium-wall-large|block-beryllium-wall-large-ui 63212=quell|unit-quell-ui 63211=breach|block-breach-ui +63210=eruption-drill|block-eruption-drill-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 19cccf81734f7c869ae1dc19454d0ae2f04c355c..2f9b492308dea5f753bcdece97f225d1cb6d4020 100644 GIT binary patch delta 32 ocmdlgcT|pv;mSs)c|81lsYRs)C7Jnox+z7OIXRo>^Gss`0KF>qw^fdb;qpeNc|4mp@JwX_05nzw?*IS* diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6ca4bfceb4..2c514cc703 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -110,7 +110,7 @@ public class Blocks{ //production mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator, - cliffCrusher, plasmaBore, largePlasmaBore, impactDrill, + cliffCrusher, plasmaBore, largePlasmaBore, impactDrill, eruptionDrill, //storage coreShard, coreFoundation, /*TODO core foundation is a bad name, rename to fragment */ coreNucleus, vault, container, unloader, @@ -998,7 +998,7 @@ public class Blocks{ //TODO better name electrolyzer = new GenericCrafter("electrolyzer"){{ - requirements(Category.crafting, with(Items.silicon, 50, Items.graphite, 40, Items.beryllium, 40)); + requirements(Category.crafting, with(Items.silicon, 50, Items.graphite, 40, Items.beryllium, 50)); size = 3; craftTime = 10f; @@ -1007,7 +1007,7 @@ public class Blocks{ liquidCapacity = 50f; consumes.liquid(Liquids.water, 10f / 60f); - consumes.power(2f); + consumes.power(1f); drawer = new DrawMulti( new DrawRegion("-bottom"), @@ -1036,7 +1036,7 @@ public class Blocks{ }}; atmosphericConcentrator = new HeatCrafter("atmospheric-concentrator"){{ - requirements(Category.crafting, with(Items.oxide, 50, Items.beryllium, 30, Items.silicon, 40)); + requirements(Category.crafting, with(Items.oxide, 50, Items.beryllium, 60, Items.silicon, 40)); size = 3; craftTime = 10f; hasLiquids = true; @@ -1060,14 +1060,14 @@ public class Blocks{ }}; oxidationChamber = new HeatProducer("oxidation-chamber"){{ - requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 40, Items.silicon, 50)); + requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 40, Items.silicon, 50, Items.beryllium, 50)); size = 3; outputItem = new ItemStack(Items.oxide, 1); consumes.liquid(Liquids.ozone, 2f / 60f); consumes.item(Items.beryllium); - consumes.power(1f); + consumes.power(0.5f); rotateDraw = false; @@ -1091,7 +1091,7 @@ public class Blocks{ }}; phaseHeater = new HeatProducer("phase-heater"){{ - requirements(Category.crafting, with(Items.oxide, 30, Items.carbide, 30)); + requirements(Category.crafting, with(Items.oxide, 30, Items.carbide, 30, Items.beryllium, 30)); drawer = new DrawMulti(new DrawHeatOutput(true)); drawer.iconOverride = new String[]{""}; @@ -1207,7 +1207,7 @@ public class Blocks{ cyanogenSynthesizer = new HeatCrafter("cyanogen-synthesizer"){{ //TODO requirements - requirements(Category.crafting, with(Items.carbide, 50, Items.silicon, 80, Items.beryllium, 80)); + requirements(Category.crafting, with(Items.carbide, 50, Items.silicon, 80, Items.beryllium, 90)); heatRequirement = 5f; @@ -1238,7 +1238,7 @@ public class Blocks{ //TODO bad name, and there's no use for phase yet... phaseSynthesizer = new HeatCrafter("phase-synthesizer"){{ - requirements(Category.crafting, with(Items.surgeAlloy, 60, Items.carbide, 40, Items.silicon, 80, Items.thorium, 80)); + requirements(Category.crafting, with(Items.surgeAlloy, 70, Items.carbide, 90, Items.silicon, 100, Items.thorium, 100, Items.beryllium, 200)); size = 3; @@ -1272,7 +1272,6 @@ public class Blocks{ }}; heatReactor = new HeatProducer("heat-reactor"){{ - //TODO gas/liquid requirement? requirements(Category.crafting, with(Items.oxide, 70, Items.graphite, 20, Items.carbide, 10, Items.thorium, 80)); size = 3; craftTime = 60f * 10f; @@ -1549,7 +1548,7 @@ public class Blocks{ //TODO green looks bad switch to orange //TODO orange also looks bad hhhh regenProjector = new RegenProjector("regen-projector"){{ - requirements(Category.effect, with(Items.silicon, 60, Items.tungsten, 60, Items.oxide, 30)); + requirements(Category.effect, with(Items.silicon, 60, Items.tungsten, 60, Items.oxide, 30, Items.beryllium, 80)); size = 3; consumes.power(1f); range = 28; @@ -2303,12 +2302,12 @@ public class Blocks{ //TODO should be crusher or something impactDrill = new BurstDrill("impact-drill"){{ - requirements(Category.production, with(Items.silicon, 60, Items.beryllium, 90, Items.graphite, 50)); + requirements(Category.production, with(Items.silicon, 60, Items.beryllium, 90, Items.graphite, 60)); drillTime = 60f * 12f; size = 4; hasPower = true; tier = 6; - drillEffect = new MultiEffect(Fx.mineImpact, Fx.drillSteam); + drillEffect = new MultiEffect(Fx.mineImpact, Fx.drillSteam, Fx.mineImpactWave.wrap(Pal.redLight, 40f)); shake = 4f; itemCapacity = 40; @@ -2316,7 +2315,31 @@ public class Blocks{ consumes.liquid(Liquids.water, 0.2f); }}; - //TODO higher tier impact drill, 5x5 + //TODO bad name + eruptionDrill = new BurstDrill("eruption-drill"){{ + requirements(Category.production, with(Items.silicon, 200, Items.beryllium, 250, Items.oxide, 80, Items.carbide, 80)); + drillTime = 60f * 9f; + size = 5; + hasPower = true; + tier = 7; + //TODO better effect + drillEffect = new MultiEffect( + Fx.mineImpact, + Fx.drillSteam, + Fx.dynamicSpikes.wrap(Liquids.hydrogen.color, 30f), + Fx.mineImpactWave.wrap(Liquids.hydrogen.color, 45f) + ); + shake = 4f; + itemCapacity = 50; + arrowOffset = 2f; + arrowSpacing = 5f; + arrows = 2; + glowColor.a = 0.6f; + + //TODO different requirements + consumes.power(6f); + consumes.liquids(LiquidStack.with(Liquids.water, 0.5f, Liquids.hydrogen, 4f / 60f)); + }}; //endregion //region storage @@ -2375,7 +2398,7 @@ public class Blocks{ coreCitadel = new CoreBlock("core-citadel"){{ //TODO cost - requirements(Category.effect, with(Items.silicon, 5000, Items.beryllium, 7000, Items.tungsten, 5000, Items.carbide, 5000)); + requirements(Category.effect, with(Items.silicon, 5000, Items.beryllium, 8000, Items.tungsten, 5000, Items.carbide, 5000)); unitType = UnitTypes.incite; health = 18000; @@ -2389,7 +2412,7 @@ public class Blocks{ coreAcropolis = new CoreBlock("core-acropolis"){{ //TODO cost - requirements(Category.effect, with(Items.beryllium, 11000, Items.silicon, 11000, Items.tungsten, 9000, Items.carbide, 10000, Items.oxide, 8000)); + requirements(Category.effect, with(Items.beryllium, 12000, Items.silicon, 11000, Items.tungsten, 9000, Items.carbide, 10000, Items.oxide, 8000)); unitType = UnitTypes.emanate; health = 30000; @@ -2423,7 +2446,7 @@ public class Blocks{ }}; reinforcedContainer = new StorageBlock("reinforced-container"){{ - requirements(Category.effect, with(Items.tungsten, 100, Items.graphite, 50)); + requirements(Category.effect, with(Items.tungsten, 100, Items.graphite, 50, Items.beryllium, 50)); size = 3; //TODO should it really be kept the same, at 1000? itemCapacity = 1200; @@ -2431,7 +2454,7 @@ public class Blocks{ }}; reinforcedVault = new StorageBlock("reinforced-vault"){{ - requirements(Category.effect, with(Items.tungsten, 250, Items.carbide, 125)); + requirements(Category.effect, with(Items.tungsten, 250, Items.carbide, 125, Items.beryllium, 100)); size = 4; itemCapacity = 2500; scaledHealth = 120; @@ -2954,7 +2977,7 @@ public class Blocks{ //TODO bad name sublimate = new ContinuousTurret("sublimate"){{ //TODO requirements - requirements(Category.turret, with(Items.tungsten, 150, Items.silicon, 160, Items.oxide, 50)); + requirements(Category.turret, with(Items.tungsten, 150, Items.silicon, 160, Items.oxide, 50, Items.beryllium, 200)); draw = new DrawTurret("reinforced-"){{ liquidDraw = Liquids.ozone; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 089b4be942..0e1b739507 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -139,7 +139,9 @@ public class ErekirTechTree{ node(impactDrill, erekirSector, () -> { node(largePlasmaBore, () -> { + node(eruptionDrill, () -> { + }); }); }); }); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index febe24944e..15351573db 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -409,6 +409,24 @@ public class Fx{ } }).layer(Layer.bullet - 4f), + dynamicSpikes = new Effect(40f, 100f, e -> { + color(e.color); + stroke(e.fout() * 2f); + float circleRad = 4f + e.finpow() * e.rotation; + Lines.circle(e.x, e.y, circleRad); + + for(int i = 0; i < 4; i++){ + Drawf.tri(e.x, e.y, 6f, e.rotation * 1.5f * e.fout(), i*90); + } + + color(); + for(int i = 0; i < 4; i++){ + Drawf.tri(e.x, e.y, 3f, e.rotation * 1.45f / 3f * e.fout(), i*90); + } + + Drawf.light(e.x, e.y, circleRad * 1.6f, Pal.heal, e.fout()); + }), + greenBomb = new Effect(40f, 100f, e -> { color(Pal.heal); stroke(e.fout() * 2f); @@ -2073,22 +2091,21 @@ public class Fx{ randLenVectors(e.id, 12, 5f + e.finpow() * 22f, (x, y) -> { Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45); }); + }), - color(Pal.redLight); + mineImpactWave = new Effect(50f, e -> { + color(e.color); - e.scaled(50f, b -> { - stroke(b.fout() * 1.5f); + stroke(e.fout() * 1.5f); - randLenVectors(e.id, 12, 4f + b.finpow() * 40f, (x, y) -> { - lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), b.fout() * 5 + 1f); - }); + randLenVectors(e.id, 12, 4f + e.finpow() * e.rotation, (x, y) -> { + lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 5 + 1f); }); e.scaled(30f, b -> { Lines.stroke(5f * b.fout()); Lines.circle(e.x, e.y, b.finpow() * 28f); }); - }), payloadReceive = new Effect(30, e -> { diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 76005bd62c..ffac501ee3 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -9,8 +9,6 @@ import mindustry.game.Objectives.*; import mindustry.gen.*; import mindustry.type.*; -import java.util.*; - /** Class for storing a list of TechNodes with some utility tree builder methods; context dependent. See {@link SerpuloTechTree#load} source for example usage. */ public class TechTree{ private static TechNode context = null; @@ -126,8 +124,6 @@ public class TechTree{ for(ItemStack requirement : requirements){ requirement.amount = (int)(requirement.amount * researchCostMultipliers.get(requirement.item, 1)); } - - Log.info("@ = @", content, Arrays.toString(requirements)); } setupRequirements(requirements); diff --git a/core/src/mindustry/entities/Effect.java b/core/src/mindustry/entities/Effect.java index 6b164a3f98..5ff06d44e0 100644 --- a/core/src/mindustry/entities/Effect.java +++ b/core/src/mindustry/entities/Effect.java @@ -10,6 +10,7 @@ import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.content.*; +import mindustry.entities.effect.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.*; @@ -93,6 +94,14 @@ public class Effect{ return this; } + public WrapEffect wrap(Color color){ + return new WrapEffect(this, color); + } + + public WrapEffect wrap(Color color, float rotation){ + return new WrapEffect(this, color, rotation); + } + public void at(Position pos){ create(this, pos.getX(), pos.getY(), 0, Color.white, null); } diff --git a/core/src/mindustry/entities/effect/WrapEffect.java b/core/src/mindustry/entities/effect/WrapEffect.java new file mode 100644 index 0000000000..d5484b1b96 --- /dev/null +++ b/core/src/mindustry/entities/effect/WrapEffect.java @@ -0,0 +1,40 @@ +package mindustry.entities.effect; + +import arc.graphics.*; +import mindustry.entities.*; + +/** Wraps an effect with some parameters. */ +public class WrapEffect extends Effect{ + public Effect effect; + public Color color = Color.white.cpy(); + public float rotation = Float.NaN; + + public WrapEffect(){ + } + + public WrapEffect(Effect effect, Color color){ + this.effect = effect; + this.color = color; + } + + public WrapEffect(Effect effect, Color color, float rotation){ + this.effect = effect; + this.color = color; + this.rotation = rotation; + } + + @Override + public void init(){ + effect.init(); + clip = effect.clip; + lifetime = effect.lifetime; + } + + @Override + public void render(EffectContainer e){ + e.color = color; + if(!Float.isNaN(rotation)) e.rotation = rotation; + effect.render(e); + clip = Math.max(clip, effect.clip); + } +} diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index 6d0af50c69..babe4a0388 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -95,6 +95,10 @@ public class Drawf{ } } + public static void additive(TextureRegion region, Color color, float x, float y){ + additive(region, color, x, y, 0f, Layer.blockAdditive); + } + public static void additive(TextureRegion region, Color color, float x, float y, float rotation){ additive(region, color, x, y, rotation, Layer.blockAdditive); } diff --git a/core/src/mindustry/world/blocks/production/BurstDrill.java b/core/src/mindustry/world/blocks/production/BurstDrill.java index b430269501..c7398eae7c 100644 --- a/core/src/mindustry/world/blocks/production/BurstDrill.java +++ b/core/src/mindustry/world/blocks/production/BurstDrill.java @@ -14,12 +14,15 @@ public class BurstDrill extends Drill{ public Interp speedCurve = Interp.pow2In; public @Load("@-top-invert") TextureRegion topInvertRegion; + public @Load("@-glow") TextureRegion glowRegion; public @Load("@-arrow") TextureRegion arrowRegion; public @Load("@-arrow-blur") TextureRegion arrowBlurRegion; public float invertedTime = 200f; - public float arrowSpacing = 4f; + public float arrowSpacing = 4f, arrowOffset = 0f; + public int arrows = 3; public Color arrowColor = Color.valueOf("feb380"), baseArrowColor = Color.valueOf("6e7080"); + public Color glowColor = arrowColor.cpy(); public BurstDrill(String name){ super(name); @@ -93,7 +96,7 @@ public class BurstDrill extends Drill{ drawDefaultCracks(); Draw.rect(topRegion, x, y); - if(invertTime > 0){ + if(invertTime > 0 && topInvertRegion.found()){ Draw.alpha(Interp.pow3Out.apply(invertTime)); Draw.rect(topInvertRegion, x, y); Draw.color(); @@ -106,13 +109,12 @@ public class BurstDrill extends Drill{ } float fract = smoothProgress; - int arrows = 3; Draw.color(arrowColor); for(int i = 0; i < 4; i++){ for(int j = 0; j < arrows; j++){ float arrowFract = (arrows - 1 - j); float a = Mathf.clamp(fract * arrows - arrowFract); - Tmp.v1.trns(i * 90 + 45, j * arrowSpacing); + Tmp.v1.trns(i * 90 + 45, j * arrowSpacing + arrowOffset); //TODO maybe just use arrow alpha and draw gray on the base? Draw.z(Layer.block); @@ -121,14 +123,20 @@ public class BurstDrill extends Drill{ Draw.color(arrowColor); - Draw.z(Layer.blockAdditive); - Draw.blend(Blending.additive); - Draw.alpha(Mathf.pow(a, 10f)); - Draw.rect(arrowBlurRegion, x + Tmp.v1.x, y + Tmp.v1.y, i * 90); - Draw.blend(); + if(arrowBlurRegion.found()){ + Draw.z(Layer.blockAdditive); + Draw.blend(Blending.additive); + Draw.alpha(Mathf.pow(a, 10f)); + Draw.rect(arrowBlurRegion, x + Tmp.v1.x, y + Tmp.v1.y, i * 90); + Draw.blend(); + } } } Draw.color(); + + if(glowRegion.found()){ + Drawf.additive(glowRegion, Tmp.c2.set(glowColor).a(Mathf.pow(fract, 3f) * glowColor.a), x, y); + } } } }