using System.Collections.Generic; using PhxhSDK; using Gameplay.AI; using Gameplay.BT.Variables; using UnityEngine; using Gameplay.Unit; using Gameplay.Character; using Gameplay.Level; /// /// 自动战斗 /// public class PVEManager : Singlenton { private const string SharedVariableName = "battleInfo"; private const string AIBehavior = "AIBehavior"; public bool AutoFight = false; /// /// 己方添加AI /// public async void LoadAIToSelf(GameUnit unit, Vector2Int position) { if (unit is not Character { troopId: ETroopsId.Self } character) return; //创建角色 LevelData 数据 character.unitLevelData = new UnitLevelData() { AttachAIName = LevelData.AttachAIType.None, AIName = LevelData.AIType.BasicAI, BornPosition = position, PatrolInfos = new List(), GroupInfos = new List(), }; character.statusData.isAttackActive = true; var bt = await AIManager.Instance.RegisterAI(character.Node.GameObject, AIBehavior, false); bt.SetVariable(SharedVariableName, new SharedBattleInfo() { Value = new BattleInfo() { ownerId = character.GetID(), AIName = character.unitLevelData.AIName, AttachAIName = character.unitLevelData.AttachAIName, PatrolInfos = character.unitLevelData.PatrolInfos, groupInfo = character.unitLevelData.GroupInfos, AutoFight = false, } }); character.statusData.isAIControll = false; DebugUtil.Log("角色:{0} 绑定了AI", character.GetID()); } public void UnLoadAIToSelf(GameUnit unit) { if (unit is not Character { troopId: ETroopsId.Self } character) return; character.statusData.isAttackActive = true; AIManager.Instance.UnRegisterAI(character.Node.GameObject); DebugUtil.Log("角色:{0} 解绑了AI", character.GetID()); } /// /// 己方是否自动战斗 /// public void EnableSelfAutoFight(bool enable) { if (enable == AutoFight) return; AutoFight = enable; var units = GameUnitManager.instance.infightUnits.unitList; foreach (var unit in units) { if (unit is Character { troopId: ETroopsId.Self } unitCharacter) { AIManager.Instance.EnableAI(unitCharacter.Node.GameObject, enable); } } } }