using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using System; public class UI_SubProcessItem : BaseItem { public int processID; public int subProcessID; public int subProcessStepID; public string warnnigTips; private Action cancelCallback; public void Init(D_SubProcess d_SubProcess, int subProcessID) { this.processID = d_SubProcess.processId; this.subProcessID = d_SubProcess.id; this.subProcessStepID = d_SubProcess.subProcessStepes[0].id; GetControl("subProcessItemName").text = d_SubProcess.subProcessName; gameObject.name = subProcessID.ToString(); SwitchSubProcess(subProcessID); ShowMe(); warnnigTips = "当前步骤还没有学完,确定要切换吗?"; } public override void ShowMe() { GameManager.EventMgr.AddEventListener(Enum_EventType.SwitchSubProcess, SwitchSubProcess); } /// /// 控制按钮状态 /// /// private void SwitchSubProcess(int subProcess) { if (subProcessID == subProcess) GetControl("learningTips").gameObject.SetActive(true); else GetControl("learningTips").gameObject.SetActive(false); } /// /// 根据传进来得状态去切换重新学习或者切换步骤 /// /// true 是否重新学习 ,false 当前步骤还没有学完,确定要切换吗? /// 0 未完成所有步骤跳转,1 完成所有步骤跳转 /// cancelCallback :当完成所有得步骤之后,在弹出得界面上选择重新学习之后,弹出确认框,如果选择取消就需要该方法第三个参数入参 public void OnResetClick(bool isReset, int state, Action _cancelCallback = null) { warnnigTips = isReset ? "是否重新学习?" : "当前步骤还没有学完,确定要切换吗?"; if (state == 0) OnClick("subProcessBtn"); else CheckSubProcess(); if (_cancelCallback != null) cancelCallback += _cancelCallback; } protected override void OnClick(string btnName) { base.OnClick(btnName); switch (btnName) { case "subProcessBtn": if (GameManager.ProcessMgr.d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count > 0) { CheckSubProcess(); } break; } } /// /// 是否重置学习或者跳步骤 /// private void CheckSubProcess() { GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (p) => { p.Init("提示", warnnigTips, E_MessageType.Error, () => { GameManager.ProcessMgr.HandoverProcess(processID, subProcessID, subProcessStepID); //重置物体 StepStateControl.instance.InvokeInitStepState(GameManager.Instance.systemId, GameManager.ProcessMgr.d_Scheme.id, subProcessID); //通知ui高亮 GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcess, subProcessID); //通知物体高亮 GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID); }, () => { cancelCallback?.Invoke(); }); }); } private void OnDestroy() { GameManager.EventMgr.RemoveEventListener(Enum_EventType.SwitchSubProcess, SwitchSubProcess); } }