using System.Collections; using System.Collections.Generic; using UnityEngine; using Sirenix.OdinInspector; /// /// 地藏Boss类,继承于Enemy /// public class DiZang : Enemy { // _____ _ _ _ // | __ \ | | | (_) // | |__) | _| |__ | |_ ___ // | ___/ | | | '_ \| | |/ __| // | | | |_| | |_) | | | (__ // |_| \__,_|_.__/|_|_|\___| /// /// 攻击之间的间隔时间 /// [Header("攻击之间的间隔时间")][FoldoutGroup("地藏")] public float timeBetweenAttacks; /// /// 塞钱箱 /// private MoneyBox moneyBox; private delegate IEnumerator Action(); private enum PlayerState{上半,下半}; private MyPlayer player; /// /// 到底在上面还是下面生成爱欲品的玩家位置Y轴的界限 /// [Header("到底在上面还是下面生成爱欲品的玩家位置Y轴的界限")] public float aiYuPinBuildLimit; private void Init(){ moneyBox = FindObjectOfType(); player = FindObjectOfType(); } protected override void OnFindThePlayer(Transform target){ if(state == State.wander){ state = State.atk; StartCoroutine("ATK"); } } void Start(){ Init(); } private new IEnumerator ATK(){ //等待攻击间隔 yield return new WaitForSeconds(timeBetweenAttacks); //决定行动 //如果有钱,则执行拿钱 if(moneyBox.hasMoney)StartCoroutine(TakeTheMoney()); else{ //否则,随机执行召唤或者敲钟 Action action = ((Random.Range(-1f,1f) > 0) ? (Action)RingTheBell : (Action)CallAiYuPin); StartCoroutine(action()); } } /// /// 召唤爱欲品的时候Call这个 /// private IEnumerator CallAiYuPin(){ yield return new WaitForEndOfFrame(); //确定玩家在上半边还是下半边 PlayerState playerState = ((player.transform.position.y > aiYuPinBuildLimit) ? PlayerState.上半: PlayerState.下半); } /// /// 敲钟的时候Call这个 /// private IEnumerator RingTheBell(){ yield return new WaitForEndOfFrame(); Debug.Log("地藏正在敲钟"); } /// /// 拿钱的时候Call这个 /// private IEnumerator TakeTheMoney(){ yield return new WaitForEndOfFrame(); Debug.Log("地藏正在拿钱"); } }