using System; using System.Collections; using System.Collections.Generic; using Common.Utility.CombatEvent; using Core.State; using Fort23.Core; using GameLogic.Combat.CombatTool; using GameLogic.Combat.Hero; using GameLogic.Combat.Hero.State; using GameLogic.Combat.Hero.SubStatus; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using UnityEngine; using UnityEngine.AI; public class CombatAIBasic : IDisposable { public StateControl stateControl; protected BetterList _subStatusList = new BetterList(); // public NavMeshObstacle NavMeshObstacle; protected CombatHeroEntity _showBaiscEntity; public CombatHeroStateBasic CurrState { get { return stateControl.CurrIState as CombatHeroStateBasic; } } /// /// 当前聚焦的目标 /// public virtual IHero currFocusTarget { get { return _currFocusTarget; } set { _currFocusTarget = value; } } protected IHero _currFocusTarget; private float _t; public virtual void Init(CombatHeroEntity combatHeroEntity) { _showBaiscEntity = combatHeroEntity; stateControl = new StateControl(); ProInitState(); ProInit(); } protected virtual void ProInit() { } public virtual void AddSubStatus(SubStatusBasic subStatusBasic) { if (!_subStatusList.Contains(subStatusBasic)) { subStatusBasic.Init(_showBaiscEntity); _subStatusList.Add(subStatusBasic); } } public virtual T GetSubStatus() where T : SubStatusBasic { for (int i = 0; i < _subStatusList.Count; i++) { if (_subStatusList[i] is (T)) { return _subStatusList[i] as T; } } return null; } public virtual void RemoveSubStatus(SubStatusBasic subStatusBasic) { if (_subStatusList.Contains(subStatusBasic)) { _subStatusList.Remove(subStatusBasic); } } public virtual void RemoveSubStatus() { for (int i = 0; i < _subStatusList.Count; i++) { if (_subStatusList[i] is T) { _subStatusList.RemoveAt(i); i--; } } } protected virtual void ProInitState() { } public virtual void ChangeState(string name, IStateEnterData iStateEnterData = null, bool isQiangZhi = false) { stateControl.ChangeState(name, iStateEnterData, isQiangZhi); } public virtual void Update(float t) { if (CombatController.currActiveCombat.isStopAi) { if (stateControl.CurrStateName.Equals(CombatHeroStateType.move)) { stateControl.ChangeState(CombatHeroStateType.idle); } return; } for (int i = 0; i < _subStatusList.Count; i++) { SubStatusBasic subStatusBasic = _subStatusList[i]; string s = subStatusBasic.IsGetStateName(); if (!string.IsNullOrEmpty(s)) { stateControl.ChangeState(s); } _subStatusList[i].Update(t); } stateControl.Update(t); ProUpdate(); } protected virtual void ProUpdate() { } public void Dispose() { ProDispose(); _showBaiscEntity = null; stateControl.Dispose(); stateControl = null; } protected virtual void ProDispose() { } }