using System.Collections.Generic; using BehaviorDesigner.Runtime; using Cysharp.Threading.Tasks; using Gameplay.BT.Variables; using Gameplay.BT; using UnityEngine; using PhxhSDK; namespace Gameplay.AI { public class AIManager : Singlenton, IInitable, IUpdatable { private BTImplement _iaiImplement; private List bts; private List btsForSelf; public void Init() { bts = new List(); btsForSelf = new List(); _iaiImplement = BTImplement.Instance; _iaiImplement.Init(); PVEManager.Instance.AutoFight = false; } public void Release() { btsForSelf = null; bts = null; _iaiImplement.Release(); } public void Update(float deltaTime) { _iaiImplement.Update(deltaTime); } public void StartAllNpcAI() { foreach (var bt in bts) { bt.EnableBehavior(); } } /// /// 开启或关闭可操作单位 /// public void EnableAllSelfAI(bool enable) { if (enable) foreach (var bt in btsForSelf) { bt.EnableBehavior(); } else foreach (var bt in btsForSelf) { bt.DisableBehavior(); } } public void EnableSingleAI(GameObject go, bool enable) { var bt = go.GetComponent(); if (bt == null) return; if (enable) bt.EnableBehavior(); else bt.DisableBehavior(); } public async UniTask RegisterAI(GameObject go, string aiName, bool isSelf = false) { var name = string.IsNullOrEmpty(aiName) ? "AIBehavior" : aiName; var bt = await _iaiImplement.RegisterAI(go, name); if (isSelf) btsForSelf.Add(bt); else bts.Add(bt); return bt; } public void UnRegisterAI(GameObject go) { _iaiImplement.UnRegisterAI(go); } public async UniTask PreLoadAI(HashSet aiNames, int initCount) { await _iaiImplement.PreLoadAI(aiNames, initCount); } } }