Decimation_Mod/Projectiles/Bone.cs
2020-03-03 21:17:42 -05:00

98 lines
2.6 KiB
C#

using Microsoft.Xna.Framework;
using System;
using System.IO;
using Decimation.Items.Weapons;
using Decimation.Core.Items;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace Decimation.Projectiles
{
internal class Bone : DecimationProjectile
{
private float maxSpeed = 5f;
protected override void Init()
{
width = 14;
height = 34;
aiStyle = -1;
ignoreWater = true;
tileCollide = false;
damageType = DecimationWeapon.DamageType.RANGED;
hostile = true;
penetrate = 2;
timeLeft = 60;
damages = Main.expertMode ? 57 : 20;
projectile.localAI[0] = 15;
}
// ai 0: target, ai 1: state, localAI 0: rotation
private int counter = 0;
public override void AI()
{
if (projectile.ai[1] == 0)
{
projectile.localAI[0] = 15;
if (timeLeft < 10)
{
projectile.ai[1]++;
timeLeft = 600;
projectile.velocity *= 0;
}
}
else if (projectile.ai[1] == 1)
{
if (Main.netMode != 1)
counter++;
projectile.localAI[0] += 4;
if (counter >= 60)
{
projectile.ai[1]++;
counter = 0;
}
}
else if (projectile.ai[1] == 2)
{
Player target = Main.player[(int)projectile.ai[0]];
Vector2 velocity = target.position - projectile.position;
float magnitude = (float)Math.Sqrt(velocity.X * velocity.X + velocity.Y * velocity.Y);
if (magnitude > maxSpeed)
{
float ratio = maxSpeed / magnitude;
velocity.X *= ratio;
velocity.Y *= ratio;
}
projectile.velocity = velocity;
projectile.ai[1]++;
}
projectile.rotation += (float)(Math.PI / projectile.localAI[0]);
}
public override void SendExtraAI(BinaryWriter writer)
{
writer.Write(counter);
}
public override void ReceiveExtraAI(BinaryReader reader)
{
counter = reader.ReadInt32();
}
public override void OnHitPlayer(Player target, int damage, bool crit)
{
if (Main.expertMode && Main.rand.Next(100) < 35) target.AddBuff(BuffID.Confused, 600);
}
}
}