95 lines
2.5 KiB
C#
95 lines
2.5 KiB
C#
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<AIManager>, IInitable, IUpdatable
|
|
{
|
|
private BTImplement _iaiImplement;
|
|
|
|
private List<BehaviorTree> bts;
|
|
private List<BehaviorTree> btsForSelf;
|
|
|
|
public void Init()
|
|
{
|
|
bts = new List<BehaviorTree>();
|
|
btsForSelf = new List<BehaviorTree>();
|
|
_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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开启或关闭可操作单位
|
|
/// </summary>
|
|
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<BehaviorTree>();
|
|
if (bt == null) return;
|
|
if (enable)
|
|
bt.EnableBehavior();
|
|
else
|
|
bt.DisableBehavior();
|
|
}
|
|
|
|
public async UniTask<BehaviorTree> 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<string> aiNames, int initCount)
|
|
{
|
|
await _iaiImplement.PreLoadAI(aiNames, initCount);
|
|
}
|
|
}
|
|
} |