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(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered); _isRegistered = true; _isProvoked = false; } } private void OnProvokeTriggered(EventDataSpecialAI evenDataChainAI ) { SharedBattleInfo.Value.theChosenOneId = evenDataChainAI.target; _isProvoked = true; } public override TaskStatus OnUpdate() { if(SharedBattleInfo.Value.AttachAIName == LevelData.AttachAIType.ProvokeAI && SharedBattleInfo.Value.theChosenOneId != Constants.INVALID_UINT_ID) { return _isProvoked ? TaskStatus.Success : TaskStatus.Running; } return TaskStatus.Failure; } public override void OnEnd() { if (!_isProvoked) { EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered); _isRegistered = false; _isProvoked = false; } } public override void OnBehaviorComplete() { EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_CHARACTER_AI_PROVOKE, OnProvokeTriggered); _isRegistered = false; _isProvoked = false; } } }