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));
}
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));
}