diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index d61e8cf29f..be1b56d7c5 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -331,6 +331,17 @@ public class UnitTypes implements ContentList{ lightningLength = 7; lightningLengthRand = 7; shootEffect = Fx.shootHeal; + + lightningHitter = new BulletType(0.0001f, 0f){{ + lifetime = Fx.lightning.lifetime; + hitEffect = Fx.hitLancer; + despawnEffect = Fx.none; + status = StatusEffects.shocked; + statusDuration = 10f; + hittable = false; + healPercent = 5f; + collidesTeam = true; + }}; }}; }}); }}; @@ -372,6 +383,8 @@ public class UnitTypes implements ContentList{ sideAngle = 45f; sideWidth = 1f; sideLength = 70f; + healPercent = 10f; + collidesTeam = true; colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; }}; }}); @@ -431,6 +444,10 @@ public class UnitTypes implements ContentList{ incendSpread = 5f; incendAmount = 1; + //constant healing + healPercent = 0.5f; + collidesTeam = true; + colors = new Color[]{Pal.heal.cpy().a(.2f), Pal.heal.cpy().a(.5f), Pal.heal.cpy().mul(1.2f), Color.white}; }}; @@ -501,6 +518,9 @@ public class UnitTypes implements ContentList{ shootEffect = Fx.greenLaserCharge; + healPercent = 20f; + collidesTeam = true; + sideAngle = 15f; sideWidth = 0f; sideLength = 0f; diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index b6c9abe807..129eea7b31 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -120,6 +120,10 @@ public class Damage{ collidedBlocks.add(tile.pos()); hitter.type.hit(hitter, tile.x, tile.y); } + //can heal? + if(tile != null && !collidedBlocks.contains(tile.pos()) && hitter.type.collides(hitter, tile)){ + hitter.type.hitTile(hitter, tile, 0f); + } }; if(hitter.type.collidesGround){ diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 2d647bfb1e..d54400f224 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -37,7 +37,13 @@ public class Lightning{ random.setSeed(seed); hit.clear(); - BulletType bulletType = hitter != null && !hitter.type.collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + BulletType bulletType; + if(hitter != null && hitter.type.lightningHitter != null){ + bulletType = hitter.type.lightningHitter; + }else{ + bulletType = hitter != null && !hitter.type.collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + } + Seq lines = new Seq<>(); bhit = false; diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 0611b28f9a..2c12cee5fe 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -116,6 +116,8 @@ public abstract class BulletType extends Content{ public float lightningDamage = -1; public float lightningCone = 360f; public float lightningAngle = 0f; + /** The lighting "hitter"; Use when trying to implement special lightning. */ + public BulletType lightningHitter; public float weaveScale = 1f; public float weaveMag = -1f; @@ -163,11 +165,12 @@ public abstract class BulletType extends Content{ if(makeFire){ Fires.create(tile.tile); } - hit(b); - + if(healPercent > 0f && tile.team == b.team && !(tile.block instanceof ConstructBlock)){ Fx.healBlockFull.at(tile.x, tile.y, tile.block.size, Pal.heal); tile.heal(healPercent / 100f * tile.maxHealth()); + }else{ + hit(b); } }