using System.Collections; using System.Collections.Generic; using UnityEngine; public enum AblityClass { MelleeAttack, YuanChenAttack } public abstract class CombatAblilityBase : ScriptableObject { [SerializeField, Header("技能名称")] protected string abilityName; [SerializeField, Header("技能ID")] protected int abilityID; [SerializeField, Header("技能CD")] protected float abilityCDTime; [SerializeField, Header("技能类型")] protected AblityClass abilityClass; [SerializeField, Header("技能音效")] protected AudioClip abilityVFX; [SerializeField, Header("技能可用")] protected bool abilityIsDone; [SerializeField, Header("技能释放距离")] protected float abilityDistance; [SerializeField, Header("技能个数")] protected int maxAbilityCount=0; protected int currentAbilityCount = 0; [SerializeField, Header("技能释放偏移")] protected List abilityOffest; private Transform pollName; protected BossAI ai; protected Animator _animator; public abstract void UpdateAblity(Transform target=null); public void UseAblity(CombatAblilityBase ablility) { pollName = GameObject.Find("TimerRoot").transform; abilityIsDone = false; //开始计时 string timerPath = "Perfab/Timer"; GameObject timer = Resloader.Load(timerPath);//寻找预制体 GameObject go = Instantiate(timer, pollName); if(ablility.abilityClass==AblityClass.MelleeAttack) { go.GetComponent().CreateTime(ablility.GetAbliltyCD(), () => ablility.abilityIsDone = true, false); } else if (ablility.abilityClass == AblityClass.YuanChenAttack) { go.GetComponent().CreateTime(ablility.GetAbliltyCD(), () => { ablility.abilityIsDone = true; ablility.currentAbilityCount = maxAbilityCount; }, false); } } public void Init(BossAI boss,Animator ani) { ai = boss; _animator = ani; abilityIsDone = true; currentAbilityCount = maxAbilityCount; } public bool GetAbliltyIsDone() { return abilityIsDone; } public void SetAbliltyIsDone(bool isDone) { abilityIsDone = isDone; } public AblityClass GetAbliltyClass() { return abilityClass; } public string GetAbliltyName() { return abilityName; } public float GetAbliltyCD() { return abilityCDTime; } public float GetAbliltyDis() { return abilityDistance; } public List GetAbliltyOffest() { return abilityOffest; } public AudioClip GetAbliltyVFX() { return abilityVFX; } }