using Microsoft.Xna.Framework; using Terraria; using Terraria.ID; using Terraria.ModLoader; namespace SoulHarvest.Projectiles; public class BoneWispProjectile : ModProjectile { public override void SetStaticDefaults() { ProjectileID.Sets.TrailCacheLength[Type] = 10; ProjectileID.Sets.TrailingMode[Type] = 2; } public override void SetDefaults() { Projectile.width = 30; Projectile.height = 30; Projectile.friendly = true; Projectile.tileCollide = false; Projectile.ignoreWater = true; Projectile.penetrate = 3; Projectile.timeLeft = 220; Projectile.light = 0.35f; Projectile.DamageType = DamageClass.Melee; Projectile.extraUpdates = 1; Projectile.netImportant = true; } public override void AI() { Projectile.localAI[0]++; if (Projectile.localAI[0] == 1f && Projectile.ai[0] > 0f) Projectile.penetrate = 5; float wave = (float)System.Math.Sin(Projectile.localAI[0] * 0.13f + Projectile.ai[2]) * 0.013f; Projectile.velocity = Projectile.velocity.RotatedBy(wave); NPC? target = ReaperProjectileHelper.FindTarget(Projectile, Projectile.ai[0] > 0f ? 620f : 430f); if (target is not null && Projectile.localAI[0] > 12f) { float speed = System.Math.Max(8f, Projectile.velocity.Length()); Vector2 desired = (target.Center - Projectile.Center).SafeNormalize(Vector2.UnitX) * speed; Projectile.velocity = Vector2.Lerp(Projectile.velocity, desired, Projectile.ai[0] > 0f ? 0.07f : 0.038f); } Projectile.rotation = Projectile.velocity.ToRotation(); if (!Main.dedServ && Main.rand.NextBool(3)) { Dust dust = Dust.NewDustPerfect(Projectile.Center, DustID.DungeonSpirit, -Projectile.velocity * 0.08f, 80, new Color(90, 235, 255), 0.85f); dust.noGravity = true; } if (!Main.dedServ) Lighting.AddLight(Projectile.Center, new Vector3(0.08f, 0.58f, 0.72f)); } public override bool PreDraw(ref Color lightColor) => ReaperProjectileHelper.DrawTrail(Projectile, new Color(65, 225, 255)); }