using Godot;
using SupaLidlGame.BoundingBoxes;
using SupaLidlGame.Characters;
namespace SupaLidlGame.Items.Weapons
{
public partial class Sword : Weapon
{
public double RemainingAttackTime { get; protected set; } = 0;
public bool IsAttacking => RemainingAttackTime > 0;
[Export]
public Hitbox Hitbox { get; set; }
[Export]
public AnimationPlayer AnimationPlayer { get; set; }
///
/// The time frame in seconds for which the weapon will deal damage.
///
///
/// The value of AttackTime should be less than the
/// value of UseTime
///
[Export]
public double AttackTime { get; set; } = 0;
public override void Equip(Character character)
{
Visible = true;
base.Equip(character);
Hitbox.Faction = character.Faction; // character is null before base
}
public override void Unequip(Character character)
{
Visible = false;
base.Unequip(character);
}
public override void Use()
{
if (RemainingUseTime > 0)
{
return;
}
RemainingAttackTime = AttackTime;
AnimationPlayer.Play("use");
Hitbox.IsDisabled = false;
base.Use();
}
public override void Deuse()
{
AnimationPlayer.Stop();
Deattack();
base.Deuse();
}
protected void Deattack()
{
Hitbox.IsDisabled = true;
Hitbox.ResetIgnoreList();
}
public override void _Ready()
{
Hitbox.Damage = Damage;
}
public override void _Process(double delta)
{
if (RemainingAttackTime > 0)
{
if ((RemainingAttackTime -= delta) <= 0)
{
Deattack();
}
}
base._Process(delta);
}
}
}