| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | 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<SubStatusBasic> _subStatusList = new BetterList<SubStatusBasic>();    // public NavMeshObstacle NavMeshObstacle;    protected CombatHeroEntity _showBaiscEntity;    public CombatHeroStateBasic CurrState    {        get { return stateControl.CurrIState as CombatHeroStateBasic; }    }    /// <summary>    /// 当前聚焦的目标    /// </summary>    public virtual CombatHeroEntity currFocusTarget    {        get { return _currFocusTarget; }        set { _currFocusTarget = value; }    }    protected CombatHeroEntity _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<T>() 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<T>()    {        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()    {    }}
 |