using Microsoft.Xna.Framework;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace SoulHarvest.Projectiles;
public class FrostShardProjectile : ModProjectile
{
public override void SetStaticDefaults()
{
ProjectileID.Sets.TrailCacheLength[Type] = 14;
ProjectileID.Sets.TrailingMode[Type] = 2;
}
public override void SetDefaults()
{
Projectile.width = 32;
Projectile.height = 32;
Projectile.friendly = true;
Projectile.tileCollide = true;
Projectile.ignoreWater = true;
Projectile.penetrate = 4;
Projectile.timeLeft = 240;
Projectile.DamageType = DamageClass.Melee;
Projectile.netImportant = true;
}
public override void AI()
{
Projectile.localAI[0]++;
if (Projectile.localAI[0] == 1f && Projectile.ai[0] > 0f)
Projectile.penetrate = 7;
Projectile.rotation += 0.24f * System.Math.Sign(Projectile.velocity.X);
if (Projectile.localAI[0] > 28f)
{
NPC? target = ReaperProjectileHelper.FindTarget(Projectile, Projectile.ai[0] > 0f ? 700f : 480f);
if (target is not null)
{
float speed = System.Math.Max(9f, Projectile.velocity.Length());
Vector2 desired = (target.Center - Projectile.Center).SafeNormalize(Vector2.UnitX) * speed;
Projectile.velocity = Vector2.Lerp(Projectile.velocity, desired, 0.035f + Projectile.ai[1] * 0.045f);
}
}
if (!Main.dedServ)
{
Lighting.AddLight(Projectile.Center, new Vector3(0.12f, 0.45f, 0.72f));
if (Main.rand.NextBool(2))
{
Dust dust = Dust.NewDustPerfect(Projectile.Center, DustID.IceTorch, -Projectile.velocity * 0.09f, 60, new Color(125, 210, 255), 0.95f + Projectile.ai[1] * 0.2f);
dust.noGravity = true;
}
}
}
public override bool OnTileCollide(Vector2 oldVelocity)
{
Projectile.localAI[1]++;
if (Projectile.localAI[1] > (Projectile.ai[0] > 0f ? 4f : 2f))
return true;
if (Projectile.velocity.X != oldVelocity.X)
Projectile.velocity.X = -oldVelocity.X;
if (Projectile.velocity.Y != oldVelocity.Y)
Projectile.velocity.Y = -oldVelocity.Y;
Projectile.velocity *= 0.92f;
return false;
}
public override bool PreDraw(ref Color lightColor) => ReaperProjectileHelper.DrawTrail(Projectile, new Color(105, 205, 255), scaleMultiplier: 1f + Projectile.ai[1] * 0.2f, copies: 12);
}
using Microsoft.Xna.Framework;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace SoulHarvest.Projectiles;
public class FrostShardProjectile : ModProjectile
{
public override void SetStaticDefaults()
{
ProjectileID.Sets.TrailCacheLength[Type] = 14;
ProjectileID.Sets.TrailingMode[Type] = 2;
}
public override void SetDefaults()
{
Projectile.width = 32;
Projectile.height = 32;
Projectile.friendly = true;
Projectile.tileCollide = true;
Projectile.ignoreWater = true;
Projectile.penetrate = 4;
Projectile.timeLeft = 240;
Projectile.DamageType = DamageClass.Melee;
Projectile.netImportant = true;
}
public override void AI()
{
Projectile.localAI[0]++;
if (Projectile.localAI[0] == 1f && Projectile.ai[0] > 0f)
Projectile.penetrate = 7;
Projectile.rotation += 0.24f * System.Math.Sign(Projectile.velocity.X);
if (Projectile.localAI[0] > 28f)
{
NPC? target = ReaperProjectileHelper.FindTarget(Projectile, Projectile.ai[0] > 0f ? 700f : 480f);
if (target is not null)
{
float speed = System.Math.Max(9f, Projectile.velocity.Length());
Vector2 desired = (target.Center - Projectile.Center).SafeNormalize(Vector2.UnitX) * speed;
Projectile.velocity = Vector2.Lerp(Projectile.velocity, desired, 0.035f + Projectile.ai[1] * 0.045f);
}
}
if (!Main.dedServ)
{
Lighting.AddLight(Projectile.Center, new Vector3(0.12f, 0.45f, 0.72f));
if (Main.rand.NextBool(2))
{
Dust dust = Dust.NewDustPerfect(Projectile.Center, DustID.IceTorch, -Projectile.velocity * 0.09f, 60, new Color(125, 210, 255), 0.95f + Projectile.ai[1] * 0.2f);
dust.noGravity = true;
}
}
}
public override bool OnTileCollide(Vector2 oldVelocity)
{
Projectile.localAI[1]++;
if (Projectile.localAI[1] > (Projectile.ai[0] > 0f ? 4f : 2f))
return true;
if (Projectile.velocity.X != oldVelocity.X)
Projectile.velocity.X = -oldVelocity.X;
if (Projectile.velocity.Y != oldVelocity.Y)
Projectile.velocity.Y = -oldVelocity.Y;
Projectile.velocity *= 0.92f;
return false;
}
public override bool PreDraw(ref Color lightColor) => ReaperProjectileHelper.DrawTrail(Projectile, new Color(105, 205, 255), scaleMultiplier: 1f + Projectile.ai[1] * 0.2f, copies: 12);
}