using System.Collections; using System.Collections.Generic; using UnityEngine; using XNode; using System; using Sirenix.OdinInspector; using System.Linq; using ChivaXR; namespace ChivaVR.State { public class CloseStateNode : StateNode { [Input, HideInInspector] public Empty enter; [ValueDropdown("GetProcedure", IsUniqueList = true)] [OnValueChanged("ResetCurrentProcedure")] [HideLabel] public int currentProcedureStepID; private static IEnumerable GetProcedure() { return ProcessManagement.Instance.processes.Select(x => new ValueDropdownItem(x.processBase.GetPBDescribe(), x.stepID)); } private ProcessElement currentProcedure; public ProcessElement CurrentProcedure { get { if (currentProcedure == null) { currentProcedure = GetCurrentProcedure(); } return currentProcedure; } } public void ResetCurrentProcedure() { currentProcedure = GetCurrentProcedure(); } /// /// 获取当前流程 /// /// public ProcessElement GetCurrentProcedure() { if (currentProcedureStepID == 0) return null; return ProcessManagement.Instance.processes.Where(x => (x.stepID.Equals(currentProcedureStepID))).First(); } public override bool IsRuning { get => base.IsRuning; set => base.IsRuning = value; } public override bool IsFinished { get { if (CurrentProcedure != null) { return CurrentProcedure.finished; } return false; ; } } public override void OnEnter() { NodePort enterPort = GetInputPort("enter"); if (enterPort.GetConnections().Count == 0) { return; } for (int i = 0; i < enterPort.GetConnections().Count; i++) { StateNode node = enterPort.GetConnection(i).node as StateNode; if (!node.IsFinished) return; } CloseStateNodeProcedure(); } public void CloseStateNodeProcedure() { CurrentProcedure.QuitHalfWay(); } } }