using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; /// /// 步骤状态(管理一个步骤下的所有需要初始化的状态) /// public abstract class StepState : MonoBehaviour { [HideInInspector] public int systemId; [HideInInspector] public int schemeId; public Dictionary steps=new Dictionary(); public void Init() { schemeId = int.Parse(transform.name); systemId = int.Parse(transform.parent.name); } /// /// 跳步骤 /// /// 从一开始 public void JumpStep(int num) { //检查是否跳场景 InvokeChangeScene(steps[num], isChangeSence => { //找到此步骤场景第一个 int first = steps.First(a => a.Value == steps[num]).Key; //从场景第一个开始还原到此步骤 foreach (var item in steps) { if(item.Key>=first && item.Key<=num) { SetStepState(item.Key); } } }); } /// /// 跳场景并且执行场景状态设置 /// /// /// public void InvokeChangeScene(E_SceneType jumpSence, Action doStepState) { string sname = ""; switch (jumpSence) { case E_SceneType.None: return; case E_SceneType.Office: sname = "03_OfficeScene"; break; case E_SceneType.ToolRoom: sname = "04_ToolMaterialScene"; break; case E_SceneType.Site: sname = "05_LiveScene"; break; default: return; } if (GameManager.RunModelMgr.SceneType != jumpSence) { //跳场景 GameManager.UIMgr.ShowPanel(E_UI_Layer.System); GameManager.ScenesMgr.LoadSceneAsyn(sname, () => { Debug.Log("步骤场景:" + jumpSence.ToString()); GameManager.UIMgr.HidePanel(); GameManager.RunModelMgr.SceneType = jumpSence; GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, jumpSence); GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, GameManager.ProcessMgr.d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName[0]); doStepState.Invoke(true); }); } else { doStepState.Invoke(false); } } public abstract void SetStepState(int num); }