using System.Collections.Generic; using Framework; using PhxhSDK; using Gameplay.AI; using Gameplay.BT.Variables; using Gameplay.Unit; using Gameplay.Character; using Gameplay.Level; /// /// 自动战斗 /// public class PVEManager : Singlenton { private const string SharedVariableName = "battleInfo"; // 临时AI行为树 private const string AIBehavior = "AIbaseEnemy"; public bool AutoFight = false; /// /// 己方添加AI /// public async void LoadAIToSelf(GameUnit unit) { if (unit is not Character { troopId: ETroopsId.Self } character) return; //创建角色 LevelData 数据 character.unitLevelData = new UnitLevelData() { PatrolInfos = new List(), GroupInfos = new List(), }; character.statusData.isAttackActive = true; var bt = await AIManager.Instance.RegisterAI(character.Node.GameObject, AIBehavior, true); bt.SetVariable(SharedVariableName, new SharedBattleInfo() { Value = new BattleInfo() { ownerID = character.GetID(), patrolInfos = character.unitLevelData.PatrolInfos, groupInfo = character.unitLevelData.GroupInfos, AutoFight = false, cannotReach = new List(), } }); character.statusData.isAIControll = false; DebugUtil.Log("角色:{0} 绑定AI", character.GetID()); } /// /// 开启或关闭自动战斗 /// public void EnableSelfAutoFight(bool enable) { if (enable == AutoFight) return; AutoFight = enable; foreach (var unit in GameUnitManager.instance.canControlUnits.unitList) { unit.statusData.isAIControll = enable; } AIManager.Instance.EnableAllSelfAI(enable); } public void StopAI(GameUnit unit) { if (!AutoFight) return; AIManager.Instance.EnableSingleAI(unit.Node.GameObject, false); } }