| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- using ChivaXR;
- using ChivaXR.Op;
- using QFramework;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- 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 Dictionary<OperationDataBase, string> dic_NoOperationData = new Dictionary<OperationDataBase, string>();
- 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);
- //检测非交互操作点如:语音播放等
- PB_OpData pbOpData = processElement.GetComponent<PB_OpData>();
- if (OperationManager.Instance.GetOpData(pbOpData.opData.operationDataName) == null)
- {
- return;
- }
- OperationDataBase tmpOperationData = OperationManager.Instance.GetOpData(pbOpData.opData.operationDataName);
- if ((tmpOperationData as OpTrigger_ToolPack == null) && !dic_NoOperationData.Keys.Contains(tmpOperationData))
- {
- dic_NoOperationData.Add(tmpOperationData, tmpStepFreeConditionss[processElement.stepID - 1].stepName);
- }
- }
- }
- public void RemoveProcessElementActiveState(ProcessElement processElement)
- {
- if (activeProcessElements.Contains(processElement))
- {
- activeProcessElements.Remove(processElement);
- UIKit.GetPanel<ArrowTipsPanel>().RemoveProcessElement(processElement);
- //检测非交互操作点如:语音播放等
- PB_OpData pbOpData = processElement.GetComponent<PB_OpData>();
- if (OperationManager.Instance.GetOpData(pbOpData.opData.operationDataName) == null)
- {
- return;
- }
- OperationDataBase tmpOperationData = OperationManager.Instance.GetOpData(pbOpData.opData.operationDataName);
- if ((tmpOperationData as OpTrigger_ToolPack == null) && dic_NoOperationData.Keys.Contains(tmpOperationData))
- {
- dic_NoOperationData.Remove(tmpOperationData);
- }
- }
- }
- }
- public class FreeProcessElement
- {
- /// <summary>
- /// 前置流程条件
- /// </summary>
- public List<ProcessElement> preconditions = new List<ProcessElement>();
- public ProcessElement freeProcessElement;
- public void Init()
- {
- foreach (ProcessElement element in preconditions)
- {
- element.processElementExitHandle += PreConditionProcessFinished;
- }
- freeProcessElement.processElementExitHandle += FreeProcessElementFinished;
- if (preconditions.Count == 0)
- {
- FreeProcessManagement.Instance.RecordProcessElementActiveState(freeProcessElement);
- freeProcessElement.Enter();
- }
- }
- /// <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);
- //刷新工具列表
- if (UIKit.GetPanel<ToolLibraryForm>() == null)
- {
- UIKit.OpenPanel<ToolLibraryForm>().Hide();
- }
- UIKit.GetPanel<ToolLibraryForm>().RefrushAllChoseTool();
- }
- }
- }
|