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

68 lines
2.1 KiB
C#

using BehaviorDesigner.Runtime.Tasks;
using Gameplay.BT.Variables;
using Framework;
using Gameplay.Character;
using Gameplay.Unit;
namespace Code.Scripts.Gameplay.BT.Conditional
{
public class BTHasReceivdCalled : BehaviorDesigner.Runtime.Tasks.Conditional
{
public SharedBattleInfo SharedBattleInfo;
private bool _isRegistered;
private bool _isChainCall;
private GameUnit _owner;
public override void OnStart()
{
_owner = GameUnitManager.instance.infightUnits.Search(SharedBattleInfo.Value.ownerId);
if (!_isRegistered)
{
EventManager.Instance.Register<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN,
OnSpecialTriggerChanged);
_isRegistered = true;
_isChainCall = false;
}
}
private void OnSpecialTriggerChanged(EventDataSpecialAI chainAIData)
{
if (chainAIData.friendsInOwnerSight.Contains(_owner))
{
_owner.statusData.isAttackActive = true;
_isChainCall = true;
SharedBattleInfo.Value.theChosenOneId = chainAIData.target;
}
}
public override TaskStatus OnUpdate()
{
if ( /*SharedBattleInfo.Value.AttachAIName != LevelData.AttachAIType.ChainAI &&*/ _isChainCall)
{
return TaskStatus.Success;
}
return TaskStatus.Failure;
}
public override void OnEnd()
{
if (_isChainCall)
{
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN,
OnSpecialTriggerChanged);
_isRegistered = false;
_isChainCall = false;
}
}
public override void OnBehaviorComplete()
{
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_CHAIN,
OnSpecialTriggerChanged);
_isRegistered = false;
_isChainCall = false;
}
}
}