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();
}
}
}