using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Ability : ScriptableObject
{
    public new string name;
    public string description;

    public virtual void OnSpawn(Unit unit) { }
    public virtual void OnBeginRound(Unit unit) { }
    public virtual void OnEndRound(Unit unit) { }
    
    public virtual void OnBeginMove(Unit unit) { }
    public virtual void OnMove(Unit unit, int travelDistance) { }
    public virtual void OnEndMove(Unit unit) { }
    
    public virtual void OnBeginAttackPhrase(Unit unit) { }
    public virtual void OnBeginAttack(Unit unit, List<Unit> targets) { }
    public virtual void OnAttack(Unit unit, List<Unit> targets) { }
    public virtual void OnEndAttack(Unit unit, List<Unit> targets) { }
    public virtual void OnEndAttackPhrase(Unit unit) { }
    public virtual void OnExecute(Unit unit, Unit target) { }
    public virtual void OnAllyDeath(Unit unit) { }
    public virtual void OnEnemyDeath(Unit unit) { }
    public virtual void OnAnyDeath(Unit unit) { }

    public virtual void OnCounterAttack(Unit unit, Unit attacker) { }
    public virtual void OnDamaged(Unit unit, Unit attacker) { }
    public virtual void OnArmorBreak(Unit unit, Unit attacker) { }
    public virtual void OnDefeat(Unit unit, Unit attacker) { }

    public virtual void OnEnterBattleGround(Unit unit) { }
    public virtual void OnExitBattleGround(Unit unit) { }
    public virtual void OnDraw(Unit unit) { }
    public virtual void OnRecovered(Unit unit, Unit helper) { }
    public virtual void OnEquippingArmor(Unit unit, int armorAmount) { }
    public virtual void OnDiscard(Unit unit) { }

    public virtual void OnCasting(Unit unit) { }
}
