Decimation_Mod/Lib/Items/DecimationWeapon.cs
FyloZ e2e8537a01 Added the Timekeeper (WIP).
- The double helix pattern is broken at some rotation.
 - The bullet sometimes get killed for no reason.
2020-06-30 14:11:05 -04:00

71 lines
2.2 KiB
C#

using System;
using Decimation.Lib.Util;
using Terraria;
namespace Decimation.Lib.Items
{
public abstract class DecimationWeapon : DecimationItem
{
public enum DamageType
{
Melee,
Magic,
Throw,
Ranged,
Summon
}
protected virtual DamageType DamagesType { get; } = DamageType.Melee;
[Obsolete("Use ProjectileId instead")] protected virtual string ProjectileName { get; } = null;
protected virtual int ProjectileId { get; } = -1;
[Obsolete("Use AmmoId instead")] protected virtual string AmmoName { get; } = null;
protected virtual int AmmoId { get; } = -1;
[Obsolete] protected virtual bool VanillaProjectile { get; } = false;
[Obsolete] protected virtual bool VanillaAmmo { get; } = false;
protected abstract int Damages { get; }
protected abstract void InitWeapon();
protected override void Init()
{
item.useStyle = 1;
item.autoReuse = false;
item.useTurn = true;
item.maxStack = 1;
switch (DamagesType)
{
case DamageType.Magic:
item.magic = true;
break;
case DamageType.Ranged:
item.ranged = true;
break;
case DamageType.Throw:
item.thrown = true;
break;
case DamageType.Summon:
item.summon = true;
break;
default:
item.melee = true;
break;
}
InitWeapon();
item.damage = Damages;
if (ProjectileName != null)
item.shoot =
ItemUtils.GetIdFromName(ProjectileName, typeof(Terraria.Projectile), VanillaProjectile);
if (ProjectileId > -1) item.shoot = ProjectileId;
if (AmmoName != null)
item.useAmmo = ItemUtils.GetIdFromName(AmmoName, typeof(Item), VanillaAmmo);
if (AmmoId > -1) item.useAmmo = AmmoId;
if (item.melee) item.noMelee = false;
}
}
}