247 lines
11 KiB
C#
247 lines
11 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
//using static UnityEngine.SpatialTracking.TrackedPoseDriver;
|
||
|
||
public class UI_FaultSelectionRegistrationPanel : BasePanel
|
||
{
|
||
public FaultOptions faultOptions = new FaultOptions();
|
||
[HideInInspector]
|
||
public Transform leftFaultGroup = null;
|
||
[HideInInspector]
|
||
public Transform rightFaultGroup = null;
|
||
[HideInInspector]
|
||
public Transform centerFaultGroup = null;
|
||
|
||
public void Init()
|
||
{
|
||
faultOptions = JsonManager.Instance.LoadData<FaultOptions>("FaultOptions");
|
||
leftFaultGroup = this.transform.Find("BGImg/LeftImage/FaultGroup");
|
||
centerFaultGroup = this.transform.Find("BGImg/CenterGroup");
|
||
rightFaultGroup = this.transform.Find("BGImg/RightImage/FailureOptionsGroup");
|
||
Debug.Log("设备故障界面初始化");
|
||
InitializedUIIcon();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 生成故障类型按钮
|
||
/// </summary>
|
||
void InitializedUIIcon()
|
||
{
|
||
GameObject deviceType = Resources.Load<GameObject>("UI/UI_Item/UI_FaultSelectionRegistrationPanel/FailureOptionsRight");
|
||
faultOptions.dataFaultType.ForEach(type => {
|
||
GameObject obj_DT = Instantiate<GameObject>(deviceType, leftFaultGroup);
|
||
//Button btn_DT = obj_DT.GetComponent<Button>();
|
||
Toggle tog_DT = obj_DT.GetComponent<Toggle>();
|
||
tog_DT.group = leftFaultGroup.GetComponent<ToggleGroup>();
|
||
Sprite normal_sp = Resources.Load<Sprite>("Sprites/UI_FaultSelectionRegistrationPanel/" + type.name + "-默认@2x");
|
||
Sprite selected_sp = Resources.Load<Sprite>("Sprites/UI_FaultSelectionRegistrationPanel/" + type.name + "-选中@2x");
|
||
Image img = tog_DT.transform.Find("Background").GetComponent<Image>();
|
||
Image img_chk = tog_DT.transform.Find("Background/Checkmark").GetComponent<Image>();
|
||
img.sprite = normal_sp;
|
||
img_chk.sprite = selected_sp;
|
||
SpriteState btnSpriteState = new SpriteState();
|
||
tog_DT.transition = Selectable.Transition.SpriteSwap;
|
||
btnSpriteState.pressedSprite = selected_sp;
|
||
btnSpriteState.selectedSprite = selected_sp;
|
||
btnSpriteState.highlightedSprite = Resources.Load<Sprite>("Sprites/UI_FaultSelectionRegistrationPanel/" + type.name + "-悬浮@2x");
|
||
tog_DT.spriteState = btnSpriteState;
|
||
tog_DT.onValueChanged.AddListener((b)=>
|
||
{
|
||
if (b)
|
||
CreateCenterGroup(type.name);
|
||
});
|
||
});
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 点击二级现象后,右侧生成icon
|
||
/// </summary>
|
||
/// <param name="situationL2"></param>
|
||
void InitializedSelectedFaultSituationL2(string situationL2)
|
||
{
|
||
for (int i = 0; i < rightFaultGroup.childCount; i++)
|
||
{
|
||
if (rightFaultGroup.GetChild(i).name == situationL2)
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
GameObject faultSelected = Resources.Load<GameObject>("UI/UI_Item/UI_FaultSelectionRegistrationPanel/FaultSelected");
|
||
GameObject obj_Sel = Instantiate<GameObject>(faultSelected, rightFaultGroup);
|
||
obj_Sel.GetComponentInChildren<TMP_Text>().text = situationL2;
|
||
obj_Sel.name = situationL2;
|
||
obj_Sel.GetComponent<UI_FailureOptionsLeft>().mainPanel = this;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 生成一级和二级故障现象
|
||
/// </summary>
|
||
/// <param name="faultType">左侧选择的错误类型</param>
|
||
public void CreateCenterGroup(string faultType)
|
||
{
|
||
if (centerFaultGroup == null) centerFaultGroup = this.transform.Find("BGImg/CenterGroup");
|
||
if (centerFaultGroup.childCount > 0)
|
||
{
|
||
for (int i = centerFaultGroup.childCount - 1; i >= 0; i--)
|
||
{
|
||
// 获取子对象并销毁它
|
||
GameObject child = centerFaultGroup.GetChild(i).gameObject;
|
||
DestroyImmediate(child);
|
||
}
|
||
}
|
||
|
||
foreach (var situation in faultOptions.dataFaultType)
|
||
{
|
||
if (situation.name == faultType)
|
||
{
|
||
GameObject deviceFaultSituationL1 = Resources.Load<GameObject>("UI/UI_Item/UI_FaultSelectionRegistrationPanel/CenterFaultSituation");
|
||
foreach (var itemL1 in situation.dataFaultSituationL1)
|
||
{
|
||
GameObject obj_DFS = Instantiate<GameObject>(deviceFaultSituationL1, centerFaultGroup);
|
||
obj_DFS.GetComponent<Text>().text = itemL1.name;//生成一级现象标题
|
||
for (int i = obj_DFS.transform.childCount - 1; i >= 0; i--)
|
||
{
|
||
// 获取子对象并销毁它
|
||
GameObject child = obj_DFS.transform.GetChild(i).gameObject;
|
||
DestroyImmediate(child);
|
||
}
|
||
GameObject deviceFaultSituationL2 = Resources.Load<GameObject>("UI/UI_Item/UI_FaultSelectionRegistrationPanel/UI_FaultSituationL2Btn");
|
||
foreach (var itemL2 in itemL1.dataFaultSituationL2)//生成二级现象按钮
|
||
{
|
||
GameObject obj_DFS2 = Instantiate<GameObject>(deviceFaultSituationL2, obj_DFS.transform);
|
||
//Button btn_DFS2 = obj_DFS2.GetComponent<Button>();
|
||
Toggle tog_DFS2 = obj_DFS2.GetComponent<Toggle>();
|
||
Sprite normal_sp = Resources.Load<Sprite>("Sprites/UI_FaultSelectionRegistrationPanel/" + itemL2.L2name + "-默认@2x");
|
||
Sprite selected_sp = Resources.Load<Sprite>("Sprites/UI_FaultSelectionRegistrationPanel/" + itemL2.L2name + "-选中@2x");
|
||
Image img = tog_DFS2.transform.Find("Background").GetComponent<Image>();
|
||
Image img_sel = tog_DFS2.transform.Find("Background/Checkmark").GetComponent<Image>();
|
||
img.sprite = normal_sp;
|
||
img_sel.sprite = selected_sp;
|
||
tog_DFS2.name = itemL2.L2name;
|
||
tog_DFS2.GetComponent<UI_FaultSituationL2Btn>().loadLimitedFaults(itemL2.L2Limitation);
|
||
tog_DFS2.GetComponent<UI_FaultSituationL2Btn>().mainPanel = this;
|
||
//点击右侧
|
||
tog_DFS2.onValueChanged.AddListener((b) => {
|
||
if (b)
|
||
InitializedSelectedFaultSituationL2(tog_DFS2.name);
|
||
});
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
ResetL2FaultLimitationBySelected();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检测故障之间的冲突
|
||
/// </summary>
|
||
public void ResetL2FaultLimitationBySelected( )
|
||
{
|
||
if (faultOptions == null || faultOptions.dataFaultType.Count == 0) return;
|
||
|
||
List<string> selectedFaults = GetSelectedFault();
|
||
UI_FaultSituationL2Btn[] faultTogs = GameObject.FindObjectsOfType<UI_FaultSituationL2Btn>(true);
|
||
foreach (var item in faultTogs)
|
||
{
|
||
item.gameObject.GetComponent<Toggle>().interactable = true;
|
||
//如果是右侧选中的故障,则选中
|
||
if (selectedFaults.Contains(item.gameObject.name))
|
||
item.gameObject.GetComponent<Toggle>().isOn = true;
|
||
else
|
||
{
|
||
//如果右侧没有选中,则检测是否与左侧冲突
|
||
foreach (var itemSel in selectedFaults)
|
||
{
|
||
if (item.limitedFaults.Contains(itemSel))
|
||
{
|
||
//如果左侧故障与右侧冲突,则不选中
|
||
item.gameObject.GetComponent<Toggle>().isOn = false;
|
||
item.gameObject.GetComponent<Toggle>().interactable = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
Resources.UnloadUnusedAssets();
|
||
System.GC.Collect();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 返回右侧已经选中的故障
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<string> GetSelectedFault()
|
||
{
|
||
List<string> selectedfault = new List<string>();
|
||
for (int i = 0; i < rightFaultGroup.childCount; i++)
|
||
{
|
||
selectedfault.Add(rightFaultGroup.GetChild(i).name);
|
||
}
|
||
return selectedfault;
|
||
}
|
||
|
||
protected override void OnClick(string btnName)
|
||
{
|
||
switch (btnName)
|
||
{
|
||
case "EnterBtn"://HQB 进入场景 如果没有选中的故障,则提示用户
|
||
if (rightFaultGroup.childCount == 0)
|
||
{
|
||
if (GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>() != null)
|
||
GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>().Init("提示:请选择故障");
|
||
if (GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>() == null)
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.System, (p) =>
|
||
{
|
||
p.Init($"提示:请选择故障");
|
||
});
|
||
}
|
||
//GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.System, (p) =>
|
||
//{
|
||
// p.Init($"提示:请选择故障");
|
||
|
||
//});
|
||
return;
|
||
}
|
||
List<string> submitList = GetSelectedFault();
|
||
//读取科目所有故障
|
||
StepStateControl.instance.GetStepstate(GameManager.RunModelMgr.schemeID);
|
||
//
|
||
FaultManager.Instance.InitFaults(submitList);
|
||
GameManager.UIMgr.HidePanel<UI_FaultSelectionRegistrationPanel>();
|
||
GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) =>
|
||
{
|
||
panel.Init();
|
||
GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f);
|
||
GameManager.ScenesMgr.LoadSceneAsyn($"{GameManager.Instance.systemId}_{GameManager.RunModelMgr.schemeID}_03_OfficeScene", () =>
|
||
{
|
||
|
||
GameManager.UIMgr.HidePanel<UI_BGPanel>();
|
||
GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f);
|
||
if (GameManager.RunModelMgr.ModeType != E_ModeType.Study)
|
||
{
|
||
GameManager.RunModelMgr.startTime = DateTime.Now;
|
||
Debug.Log("开始记时:" + GameManager.RunModelMgr.startTime.ToString());
|
||
}
|
||
});
|
||
});
|
||
break;
|
||
case "RetrunBtn":
|
||
GameManager.UIMgr.ShowPanel<UI_SelectDevicePanel>(E_UI_Layer.Mid, panel => { panel.Init(); });
|
||
GameManager.UIMgr.HidePanel<UI_FaultSelectionRegistrationPanel>();
|
||
break;
|
||
}
|
||
}
|
||
}
|