SupaLidlGame/Items/Weapon.cs

70 lines
1.7 KiB
C#
Raw Normal View History

2022-11-13 19:52:09 -08:00
using Godot;
2022-11-25 09:11:46 -08:00
using SupaLidlGame.BoundingBoxes;
2022-11-13 19:52:09 -08:00
using SupaLidlGame.Characters;
namespace SupaLidlGame.Items
{
public abstract partial class Weapon : Item
{
public double RemainingUseTime { get; protected set; } = 0;
2022-11-19 21:21:12 -08:00
public bool IsUsing => RemainingUseTime > 0;
2022-11-13 19:52:09 -08:00
2023-03-26 21:11:38 -07:00
public new WeaponInfo Info => base.Info as WeaponInfo;
2022-11-13 19:52:09 -08:00
2022-11-25 09:11:46 -08:00
/// <summary>
/// Whether or not the weapon can parry other weapons and is
/// parryable by other weapons.
/// </summary>
public virtual bool IsParryable { get; protected set; } = false;
public bool IsParried { get; set; }
public ulong ParryTimeOrigin { get; protected set; }
2022-11-13 19:52:09 -08:00
public Character Character { get; set; }
2023-03-19 13:54:48 -07:00
public override bool StacksWith(Item item) => false;
2022-11-13 19:52:09 -08:00
public override void Equip(Character character)
{
2023-03-26 21:11:38 -07:00
GD.Print("Equipped by " + character.Name);
2022-11-13 19:52:09 -08:00
Character = character;
}
public override void Unequip(Character character)
{
Character = null;
}
2022-11-19 21:21:12 -08:00
public override void Use()
{
2023-03-26 21:11:38 -07:00
RemainingUseTime = Info.UseTime;
2022-11-19 21:21:12 -08:00
}
2022-11-13 19:52:09 -08:00
public override void Deuse()
{
}
2022-11-19 21:21:12 -08:00
public override void _Process(double delta)
{
if (RemainingUseTime > 0)
{
if ((RemainingUseTime -= delta) <= 0)
{
Deuse();
}
}
}
2022-11-25 09:11:46 -08:00
public virtual void _on_hitbox_hit(BoundingBox box)
{
if (box is Hurtbox hurtbox)
{
2023-03-26 21:11:38 -07:00
hurtbox.InflictDamage(Info.Damage, Character, Info.Knockback);
2022-11-25 09:11:46 -08:00
}
}
2022-11-13 19:52:09 -08:00
}
}