| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- using ChivaXR;
- using ChivaXR.Op;
- using QFramework;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using UnityEngine;
- /// <summary>
- /// 自由版流程控制
- /// </summary>
- public class FreeProcessManagement : MonoSingleton<FreeProcessManagement>
- {
- //自由操作清单
- public List<FreeProcessElement> freeProcessElements = new List<FreeProcessElement>();
- //当前场景中激活的操作
- public List<ProcessElement> activeProcessElements = new List<ProcessElement>();
- private List<OperationStepFreeCondition> tmpStepFreeConditionss = new List<OperationStepFreeCondition>();
- public void InitFreeProcess(string courseName)
- {
- FreeStepListProxy m_FreeStepListProxy = DAL.Instance.Get<FreeStepListProxy>();
- tmpStepFreeConditionss = m_FreeStepListProxy.ReadStepMsgInfoFromTable(courseName);
- for (int i = 0; i < tmpStepFreeConditionss.Count; i++)
- {
- FreeProcessElement tmpProcessElement = new FreeProcessElement();
- tmpProcessElement.freeProcessElement = ProcessManagement.Instance.processes[i];
- foreach (var item in tmpStepFreeConditionss[i].preStepCondition.Split('/'))
- {
- if (string.IsNullOrEmpty(item)) { continue; }
- int id = int.Parse(item);
- if (id == 0) continue;
- tmpProcessElement.preconditions.Add(ProcessManagement.Instance.processes[id - 1]);
- };
- freeProcessElements.Add(tmpProcessElement);
- }
- }
- public void ActiveProcess()
- {
- foreach (var item in freeProcessElements)
- {
- item.Init();
- }
- }
- public void RecordProcessElementActiveState(ProcessElement processElement)
- {
- if (!activeProcessElements.Contains(processElement))
- {
- activeProcessElements.Add(processElement);
- UIKit.GetPanel<ArrowTipsPanel>().AddProcessElement(processElement, tmpStepFreeConditionss[processElement.stepID - 1].stepName);
- }
- }
- public void RemoveProcessElementActiveState(ProcessElement processElement)
- {
- if (activeProcessElements.Contains(processElement))
- {
- activeProcessElements.Remove(processElement);
- UIKit.GetPanel<ArrowTipsPanel>().RemoveProcessElement(processElement);
- }
- }
- }
- public class FreeProcessElement
- {
- /// <summary>
- /// 前置流程条件
- /// </summary>
- public List<ProcessElement> preconditions = new List<ProcessElement>();
- public ProcessElement freeProcessElement;
- public void Init()
- {
- if (preconditions.Count == 0)
- {
- freeProcessElement.Enter();
- }
- foreach (ProcessElement element in preconditions)
- {
- element.processElementExitHandle += PreConditionProcessFinished;
- }
- freeProcessElement.processElementExitHandle += FreeProcessElementFinished;
- }
- /// <summary>
- /// 前置流程完成检测
- /// </summary>
- /// <param name="element"></param>
- public void PreConditionProcessFinished(ProcessElement element)
- {
- bool allPreConditionFinished = true;
- foreach (var item in preconditions)
- {
- if (!item.finished)
- {
- allPreConditionFinished = false;
- }
- }
- if (allPreConditionFinished && !freeProcessElement.active && !freeProcessElement.finished)
- {
- freeProcessElement.Enter();
- FreeProcessManagement.Instance.RecordProcessElementActiveState(freeProcessElement);
- }
- }
- /// <summary>
- /// 当前自由流程完成
- /// </summary>
- /// <param name="element"></param>
- public void FreeProcessElementFinished(ProcessElement element)
- {
- if (freeProcessElement == element)
- {
- FreeProcessManagement.Instance.RemoveProcessElementActiveState(freeProcessElement);
- }
- }
- }
|