/
TON618OFF
/
Unity-Project-RTU
Обзор
Документация
Войти
/
TON618OFF
/
Unity-Project-RTU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Library/PackageCache/com.unity.visualscripting@1.9.4/Runtime/VisualScripting.State/FlowStateTransition.cs
95 строк
3 KB
TON618OFF
release
03 окт 2024, 22:20
03 окт 2024, 22:20
7c70e9f
Код
Авторство
О чём код?
using System; using UnityEngine; namespace Unity.VisualScripting { [SerializationVersion("A")] public sealed class FlowStateTransition : NesterStateTransition<FlowGraph, ScriptGraphAsset>, IGraphEventListener { public FlowStateTransition() : base() { } public FlowStateTransition(IState source, IState destination) : base(source, destination) { if (!source.canBeSource) { throw new InvalidOperationException("Source state cannot emit transitions."); } if (!destination.canBeDestination) { throw new InvalidOperationException("Destination state cannot receive transitions."); } } public static FlowStateTransition WithDefaultTrigger(IState source, IState destination) { var flowStateTransition = new FlowStateTransition(source, destination); flowStateTransition.nest.source = GraphSource.Embed; flowStateTransition.nest.embed = GraphWithDefaultTrigger(); return flowStateTransition; } public static FlowGraph GraphWithDefaultTrigger() { return new FlowGraph() { units = { new TriggerStateTransition() { position = new Vector2(100, -50) } } }; } #region Lifecycle public override void OnEnter(Flow flow) { if (flow.stack.TryEnterParentElement(this)) { flow.stack.TriggerEventHandler(hook => hook == StateEventHooks.OnEnterState, new EmptyEventArgs(), parent => parent is SubgraphUnit, false); flow.stack.ExitParentElement(); } } public override void OnExit(Flow flow) { if (flow.stack.TryEnterParentElement(this)) { flow.stack.TriggerEventHandler(hook => hook == StateEventHooks.OnExitState, new EmptyEventArgs(), parent => parent is SubgraphUnit, false); nest.graph.StopListening(flow.stack); flow.stack.ExitParentElement(); } } public void StartListening(GraphStack stack) { if (stack.TryEnterParentElement(this)) { nest.graph.StartListening(stack); stack.ExitParentElement(); } } public void StopListening(GraphStack stack) { if (stack.TryEnterParentElement(this)) { nest.graph.StopListening(stack); stack.ExitParentElement(); } } public bool IsListening(GraphPointer pointer) { return pointer.GetElementData<State.Data>(source).isActive; } #endregion public override FlowGraph DefaultGraph() { return GraphWithDefaultTrigger(); } } }