CultivationOfBrewing-2/Assets/Scripts/Project/UI/UI_Panel/UI_FaultSelectionRegistrati...

247 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.Top, panel => { panel.Init(); });
GameManager.UIMgr.HidePanel<UI_FaultSelectionRegistrationPanel>();
break;
}
}
}