您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
67 行
1.6 KiB
67 行
1.6 KiB
using UnityEngine;
|
|
using UOP1.StateMachine;
|
|
using UOP1.StateMachine.ScriptableObjects;
|
|
|
|
[CreateAssetMenu(fileName = "IsDialogueActiveCondition", menuName = "State Machines/Conditions/Is Dialogue Active Condition")]
|
|
public class IsDialogueActiveConditionSO : StateConditionSO
|
|
{
|
|
[SerializeField] private DialogueDataChannelSO _startDialogueEvent = default;
|
|
[SerializeField] private IntEventChannelSO _endDialogueEvent = default;
|
|
|
|
protected override Condition CreateCondition() => new IsDialogueActiveCondition(_startDialogueEvent, _endDialogueEvent);
|
|
|
|
}
|
|
|
|
public class IsDialogueActiveCondition : Condition
|
|
{
|
|
private DialogueDataChannelSO _startDialogueEvent;
|
|
private IntEventChannelSO _endDialogueEvent;
|
|
private bool _isDialogueActive = false;
|
|
|
|
public IsDialogueActiveCondition(DialogueDataChannelSO startDialogueEvent, IntEventChannelSO endDialogueEvent)
|
|
{
|
|
_startDialogueEvent = startDialogueEvent;
|
|
_endDialogueEvent = endDialogueEvent;
|
|
}
|
|
|
|
protected override bool Statement()
|
|
{
|
|
return _isDialogueActive;
|
|
}
|
|
|
|
public override void OnStateEnter()
|
|
{
|
|
if (_startDialogueEvent != null)
|
|
{
|
|
_startDialogueEvent.OnEventRaised += OnDialogueStart;
|
|
}
|
|
|
|
if (_endDialogueEvent != null)
|
|
{
|
|
_endDialogueEvent.OnEventRaised += OnDialogueEnd;
|
|
}
|
|
}
|
|
|
|
public override void OnStateExit()
|
|
{
|
|
if (_startDialogueEvent != null)
|
|
{
|
|
_startDialogueEvent.OnEventRaised -= OnDialogueStart;
|
|
}
|
|
|
|
if (_endDialogueEvent != null)
|
|
{
|
|
_endDialogueEvent.OnEventRaised -= OnDialogueEnd;
|
|
}
|
|
}
|
|
|
|
private void OnDialogueStart(DialogueDataSO dialogue)
|
|
{
|
|
_isDialogueActive = true;
|
|
}
|
|
|
|
private void OnDialogueEnd(int dialogueType)
|
|
{
|
|
_isDialogueActive = false;
|
|
}
|
|
}
|