48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
using UnityEngine;
|
|
|
|
namespace OctoberStudio.Abilities
|
|
{
|
|
public abstract class AbilityBehavior<T, K> : MonoBehaviour, IAbilityBehavior where T: GenericAbilityData<K> where K : AbilityLevel
|
|
{
|
|
public T Data { get; private set; }
|
|
public AbilityData AbilityData => Data;
|
|
public AbilityType AbilityType => Data.AbilityType;
|
|
|
|
public K AbilityLevel { get; private set; }
|
|
public int LevelId { get; private set; }
|
|
|
|
public virtual void Init(AbilityData data, int levelId)
|
|
{
|
|
SetData(data as T);
|
|
SetAbilityLevel(levelId);
|
|
|
|
Data.onAbilityUpgraded += OnAbilityUpgraded;
|
|
}
|
|
|
|
protected virtual void SetData(T data)
|
|
{
|
|
Data = data;
|
|
}
|
|
|
|
protected virtual void SetAbilityLevel(int levelId)
|
|
{
|
|
LevelId = levelId;
|
|
AbilityLevel = Data.GetLevel(levelId);
|
|
}
|
|
|
|
protected virtual void OnAbilityUpgraded(int levelId)
|
|
{
|
|
SetAbilityLevel(levelId);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
Data.onAbilityUpgraded -= OnAbilityUpgraded;
|
|
}
|
|
|
|
public virtual void Clear()
|
|
{
|
|
Destroy(gameObject);
|
|
}
|
|
}
|
|
} |