60 lines
1.9 KiB
C#
60 lines
1.9 KiB
C#
using BehaviorDesigner.Runtime.Tasks;
|
|
using Framework;
|
|
using Gameplay.BT.Variables;
|
|
using Gameplay.Character;
|
|
using Gameplay.Level;
|
|
|
|
namespace Code.Scripts.Gameplay.BT.Conditional
|
|
{
|
|
public class BTProvokeTrigger : BehaviorDesigner.Runtime.Tasks.Conditional
|
|
{
|
|
public SharedBattleInfo SharedBattleInfo;
|
|
private bool _isProvoked;
|
|
private bool _isRegistered;
|
|
|
|
public override void OnStart()
|
|
{
|
|
if (!_isRegistered)
|
|
{
|
|
EventManager.Instance.Register<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered);
|
|
_isRegistered = true;
|
|
_isProvoked = false;
|
|
}
|
|
}
|
|
|
|
private void OnProvokeTriggered(EventDataSpecialAI evenDataChainAI )
|
|
{
|
|
SharedBattleInfo.Value.targetID = evenDataChainAI.target;
|
|
_isProvoked = true;
|
|
}
|
|
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
if(SharedBattleInfo.Value.AttachAIName == LevelData.AttachAIType.ProvokeAI
|
|
&& SharedBattleInfo.Value.targetID != Constants.INVALID_UINT_ID)
|
|
{
|
|
return _isProvoked ? TaskStatus.Success : TaskStatus.Running;
|
|
}
|
|
return TaskStatus.Failure;
|
|
|
|
}
|
|
public override void OnEnd()
|
|
{
|
|
if (!_isProvoked)
|
|
{
|
|
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered);
|
|
_isRegistered = false;
|
|
_isProvoked = false;
|
|
}
|
|
}
|
|
|
|
public override void OnBehaviorComplete()
|
|
{
|
|
EventManager.Instance.Unregister<EventDataSpecialAI>(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered);
|
|
_isRegistered = false;
|
|
_isProvoked = false;
|
|
}
|
|
}
|
|
}
|
|
|