123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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 StateNode : Node
- {
- /// <summary>
- /// 进入触发条件
- /// </summary>
- public enum EnterConditon
- {
- allFinish,
- anyFinish
- }
- [LabelText("Enter进入条件")]
- public EnterConditon enterConditon = EnterConditon.allFinish;
- public enum EnterState
- {
- 激活状态,
- 冻结状态
- }
- [ReadOnly]
- public EnterState enterState = EnterState.冻结状态;
- [PropertyOrder(10)]
- [LabelText("监听nodes")]
- [ValueDropdown("GetAllProcessName",IsUniqueList = true)]
- public List<string> listenStateNodes;
- public virtual bool IsRuning { get; set; }
- public virtual bool IsFinished { get; set; }
- public virtual bool IsTiShi { get; set; }
- /// <summary>
- /// State进入
- /// </summary>
- public virtual void OnEnter()
- {
- enterState = EnterState.激活状态;
- IsRuning = true;
- }
- /// <summary>
- /// State离开
- /// </summary>
- public virtual void OnExit()
- {
- enterState = EnterState.冻结状态;
- IsRuning = false;
- IsFinished = true;
- }
- public virtual void InitState()
- {
- enterState = EnterState.冻结状态;
- IsRuning = false;
- IsFinished = false;
- }
- [Serializable]
- public class Empty { }
- /// <summary>
- /// 输入端连接的Node是否完成
- /// </summary>
- public bool CheckEnterConnectState()
- {
- NodePort enterNodePort = GetInputPort("enter");
- bool tmpResult = true;
- foreach (var item in enterNodePort.GetConnections())
- {
- StateNode node = item.node as StateNode;
-
- switch (enterConditon)
- {
- case EnterConditon.allFinish:
-
- if (!node.IsFinished) return false;
- break;
- case EnterConditon.anyFinish:
- if (node.IsFinished) return true;
- break;
- }
- }
- return tmpResult;
- }
- private IEnumerable GetAllProcessName()
- {
- for (int i = 0; i < ProcessManagement.Instance.processes.Count; i++)
- {
- yield return ProcessManagement.Instance.processes[i].processBase.GetPBDescribe();
- }
- }
- }
- }
|