NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/AI/Conditional/BTHasReceivdCalled.cs

71 lines
2.3 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using BehaviorDesigner.Runtime.Tasks;
using Gameplay.BT.Variables;
using Gameplay.Character;
2023-12-13 16:20:41 +08:00
using Gameplay.Unit;
2024-11-04 15:24:11 +08:00
using Framework;
2023-08-22 19:08:45 +08:00
namespace Code.Scripts.Gameplay.BT.Conditional
{
2024-11-04 15:24:11 +08:00
/// <summary>
/// 接受连锁召唤事件
/// </summary>
2023-08-22 19:08:45 +08:00
public class BTHasReceivdCalled : BehaviorDesigner.Runtime.Tasks.Conditional
{
public SharedBattleInfo SharedBattleInfo;
private bool _isRegistered;
private bool _isChainCall;
private GameUnit _owner;
public override void OnStart()
{
2023-12-14 18:25:52 +08:00
_owner = GameUnitManager.instance.infightUnits.Search(SharedBattleInfo.Value.ownerId);
2023-08-22 19:08:45 +08:00
if (!_isRegistered)
{
2024-11-04 15:24:11 +08:00
EventManager.Instance.Register<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN, OnSpecialTriggerChanged);
2023-08-22 19:08:45 +08:00
_isRegistered = true;
_isChainCall = false;
}
}
private void OnSpecialTriggerChanged(EventDataSpecialAI chainAIData)
{
2024-11-04 15:24:11 +08:00
if (chainAIData.friendsInOwnerSight.Contains(_owner) && chainAIData.owner != _owner)
2023-08-22 19:08:45 +08:00
{
2024-07-04 18:10:57 +08:00
_owner.statusData.isAttackActive = true;
2023-08-22 19:08:45 +08:00
_isChainCall = true;
SharedBattleInfo.Value.theChosenOneId = chainAIData.target;
2024-11-04 15:24:11 +08:00
// DebugUtil.LogError("AI {0} ,已经被连锁召唤,召唤者是:{1}, 目标是:{2}", _owner.GetID(), chainAIData.owner.GetID(), chainAIData.target);
2023-08-22 19:08:45 +08:00
}
}
public override TaskStatus OnUpdate()
{
2024-11-04 15:24:11 +08:00
if (_isChainCall)
2023-08-22 19:08:45 +08:00
{
return TaskStatus.Success;
}
2023-12-27 17:27:04 +08:00
return TaskStatus.Failure;
2023-08-22 19:08:45 +08:00
}
public override void OnEnd()
{
if (_isChainCall)
{
2023-12-27 17:27:04 +08:00
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN,
OnSpecialTriggerChanged);
2023-08-22 19:08:45 +08:00
_isRegistered = false;
_isChainCall = false;
}
}
public override void OnBehaviorComplete()
{
2023-12-27 17:27:04 +08:00
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN,
OnSpecialTriggerChanged);
2023-08-22 19:08:45 +08:00
_isRegistered = false;
_isChainCall = false;
}
}
2023-12-27 17:27:04 +08:00
}