gongyejiqiren/Assets/_Scripts/Application/UI/BJCZTotalOperationPanel.cs

265 lines
12 KiB
C#

using CG.Framework;
using CG.UTility;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/*******************************************************************************
*Create By CG
*Function 部件拆装总控制界面Ui
*******************************************************************************/
namespace ZXK.GYJQR
{
public class BJCZTotalOperationPanel : UIBase
{
private OperationPartsBJCJPanel _partsBJCJPanel = null;
private OperationStepBJCJPanel _stepBJCJPanel = null;
private PartExplainPanel _partExplainPanel = null;
private Button _previousSelectBtn = null;
protected override void Awake()
{
base.Awake();
//顶部设置
UI_Manage.Instance.ShowPanel("OperationTopPanel", Type.GetType("ZXK.GYJQR.OperationTopPanel"), UIGroup.Top);
//部件栏
_partsBJCJPanel = UI_Manage.Instance.ShowPanel("OperationPartsPanel", Type.GetType("ZXK.GYJQR.OperationPartsBJCJPanel"), UIGroup.Main)?.GetComponent<OperationPartsBJCJPanel>();
_partsBJCJPanel.gameObject.SetActive(false);
//拆卸流程显示
_stepBJCJPanel = UI_Manage.Instance.ShowPanel("OperationStepPanel", Type.GetType("ZXK.GYJQR.OperationStepBJCJPanel"), UIGroup.Main)?.GetComponent<OperationStepBJCJPanel>();
_stepBJCJPanel.gameObject.SetActive(false);
//零件说明显示
_partExplainPanel = UI_Manage.Instance.ShowPanel("PartExplainPanel", Type.GetType("ZXK.GYJQR.PartExplainPanel"), UIGroup.Main)?.GetComponent<PartExplainPanel>();
_partExplainPanel.gameObject.SetActive(false);
GameManager.Instance._DataBJCJHandler._ShowPartsName.OnValueChanged += OnPartsNameChanged;
GameManager.Instance._DataBJCJHandler._CurState.OnValueChanged += OnStateChanged;
GameManager.Instance._DataBJCJHandler.OnYJCJCombinateChanged += OnYJCJCombinateChanged;
AddEventListener("AcquaintPartBtn_N", UIEventType.OnButtonClick, () =>
{
if (GameManager.Instance._DataBJCJHandler._CurState.Value == (int)EnumCtrl.BJCZState.BJRZ) return;
_partsBJCJPanel.gameObject.SetActive(true);
_partExplainPanel.gameObject.SetActive(true);
_stepBJCJPanel.gameObject.SetActive(false);
BtnStyleChanged(EnumCtrl.BJCZState.BJRZ);
});
AddEventListener("AllSplitBtn_N", UIEventType.OnButtonClick, () =>
{
_partsBJCJPanel.gameObject.SetActive(false);
_partExplainPanel.gameObject.SetActive(true);
_stepBJCJPanel.gameObject.SetActive(false);
if (GameManager.Instance._DataBJCJHandler._CurState.Value == (int)EnumCtrl.BJCZState.YJCJ)
{
BtnStyleChanged(EnumCtrl.BJCZState.YJPZ);
}
else
{
BtnStyleChanged(EnumCtrl.BJCZState.YJCJ);
}
});
AddEventListener("OrderSplitBtn_N", UIEventType.OnButtonClick, () =>
{
if (GameManager.Instance._DataBJCJHandler._CurState.Value == (int)EnumCtrl.BJCZState.SXCJ) return;
_partsBJCJPanel.gameObject.SetActive(false);
_partExplainPanel.gameObject.SetActive(false);
_stepBJCJPanel.gameObject.SetActive(true);
BtnStyleChanged(EnumCtrl.BJCZState.SXCJ);
});
//TODO 原理示意按钮监听
AddEventListener("LeftArrayBtn_N", UIEventType.OnButtonClick, () =>
{
if (GameManager.Instance._DataBJCJHandler._ShowPartsName.Value.Equals(ConstCtrl.BJCZ_MAINMODEL2_NAME))
{
GameManager.Instance._DataBJCJHandler._ShowPartsName.Value = ConstCtrl.BJCZ_MAINMODEL1_NAME;
}
GetWedage("AcquaintPartBtn_N").GetComponent<Button>().onClick.Invoke();
});
AddEventListener("RightArrayBtn_N", UIEventType.OnButtonClick, () =>
{
if (GameManager.Instance._DataBJCJHandler._ShowPartsName.Value.Equals(ConstCtrl.BJCZ_MAINMODEL1_NAME))
{
GameManager.Instance._DataBJCJHandler._ShowPartsName.Value = ConstCtrl.BJCZ_MAINMODEL2_NAME;
}
GetWedage("AcquaintPartBtn_N").GetComponent<Button>().onClick.Invoke();
});
//初始状态赋值
GameManager.Instance._DataBJCJHandler._ShowPartsName.Value = ConstCtrl.BJCZ_MAINMODEL1_NAME;
StartCoroutine("LoadFirst");
}
private IEnumerator LoadFirst()
{
yield return new WaitForSeconds(0.02f);
GetWedage("AcquaintPartBtn_N").GetComponent<Button>().onClick.Invoke();
}
protected override void OnDestroy()
{
base.OnDestroy();
GameManager.Instance._DataBJCJHandler._ShowPartsName.OnValueChanged -= OnPartsNameChanged;
GameManager.Instance._DataBJCJHandler._CurState.OnValueChanged -= OnStateChanged;
GameManager.Instance._DataBJCJHandler.OnYJCJCombinateChanged -= OnYJCJCombinateChanged;
GameManager.Instance._DataBJCJHandler._CurState.Value = 0;
GameManager.Instance._DataBJCJHandler._ShowPartsName.Value = "";
}
/// <summary>
/// 介绍模型发生变化
/// </summary>
/// <param name="str"></param>
private void OnPartsNameChanged(string str)
{
if (str.Equals(ConstCtrl.BJCZ_MAINMODEL1_NAME))
{
GetWedage("AcquaintPartBtn_N").SetActive(true);
GetWedage("AllSplitBtn_N").SetActive(true);
GetWedage("OrderSplitBtn_N").SetActive(true);
}
else if (str.Equals(ConstCtrl.BJCZ_MAINMODEL2_NAME))
{
GetWedage("AcquaintPartBtn_N").SetActive(true);
GetWedage("AllSplitBtn_N").SetActive(true);
GetWedage("OrderSplitBtn_N").SetActive(false);
}
Camera.main.GetComponent<CameraAroundCtrl>().ResetCameraInit();
BJCZSceneCtrl._Instance.ModelAndStateChanged();
InitDataBJCJ();
}
/// <summary>
/// 功能模块发生变化
/// </summary>
/// <param name="state"></param>
private void OnStateChanged(int state)
{
BJCZSceneCtrl._Instance.ModelAndStateChanged();
InitDataBJCJ();
}
/// <summary>
/// 实例化部件拆解模块对应的部件栏数据
/// </summary>
private void InitDataBJCJ()
{
string showName = GameManager.Instance._DataBJCJHandler._ShowPartsName.Value;
if (string.IsNullOrEmpty(showName) || GameManager.Instance._DataBJCJHandler._CurState.Value == 0) return;
switch ((EnumCtrl.BJCZState)GameManager.Instance._DataBJCJHandler._CurState.Value)
{
case EnumCtrl.BJCZState.BJRZ: //部件认知
List<BJCJ_INFO> bjrzParts = GameManager.Instance._DataBJCJHandler._BJRZDataArray[showName];
BJCJ_INFO bjrzPartInfo;
if (GameManager.Instance._DataBJCJHandler._CurBJRZhandler.GetValue().ContainsKey(showName))
{//如果操作过此部件,那么需要找到这个部件对应操作的零件
Dictionary<string, BJCJ_INFO> curTemp = GameManager.Instance._DataBJCJHandler._CurBJRZhandler.GetValue();
bjrzPartInfo = curTemp[showName];
}
else
{
bjrzPartInfo = GameManager.Instance._DataBJCJHandler._BJRZDataArray[showName][0];
}
_partsBJCJPanel.InitData(bjrzParts);
GameManager.Instance._DataBJCJHandler._CurBJRZhandler.SetValue(showName, bjrzPartInfo);
break;
case EnumCtrl.BJCZState.SXCJ:
List<BJCJ_SXCJ> sxcjSteps = GameManager.Instance._DataBJCJHandler._SXCJDataArray[showName];
BJCJ_SXCJ sxcjStepInfo;
if (GameManager.Instance._DataBJCJHandler._CurDismountStephandler.GetValue().ContainsKey(showName))
{
Dictionary<string, BJCJ_SXCJ> curTemp = GameManager.Instance._DataBJCJHandler._CurDismountStephandler.GetValue();
sxcjStepInfo = curTemp[showName];
}
else
{
sxcjStepInfo = GameManager.Instance._DataBJCJHandler._SXCJDataArray[showName][0];
}
_stepBJCJPanel.InitData(sxcjSteps);
GameManager.Instance._DataBJCJHandler._CurDismountStephandler.SetValue(showName, sxcjStepInfo);
break;
case EnumCtrl.BJCZState.YJCJ://一件拆解
BJCJ_INFO yjcjPartInfo;
if (GameManager.Instance._DataBJCJHandler._CurYJCJhandler.GetValue().ContainsKey(showName))
{//如果操作过此部件,那么需要找到这个部件对应操作的零件
Dictionary<string, BJCJ_INFO> curTemp = GameManager.Instance._DataBJCJHandler._CurYJCJhandler.GetValue();
yjcjPartInfo = curTemp[showName];
}
else
{
yjcjPartInfo = GameManager.Instance._DataBJCJHandler._YJCJDataArray[showName][0];
}
GameManager.Instance._DataBJCJHandler._CurYJCJhandler.SetValue(showName, yjcjPartInfo);
break;
case EnumCtrl.BJCZState.YJPZ://一件拼装
yjcjPartInfo = GameManager.Instance._DataBJCJHandler._YJCJDataArray[showName][0];
GameManager.Instance._DataBJCJHandler._CurYJCJhandler.SetValue(showName, yjcjPartInfo);
break;
//TODO 原理示意UI界面监听
}
}
/// <summary>
/// 改变四个按钮选中状态
/// </summary>
/// <param name="btn"></param>
private void BtnStyleChanged(EnumCtrl.BJCZState bjczState)
{
GetWedage("AllSplitBtn_N").transform.Find("Text (Legacy)").GetComponent<Text>().text = "一键拆解";
GameObject btn = null;
switch (bjczState)
{
case EnumCtrl.BJCZState.BJRZ:
btn = GetWedage("AcquaintPartBtn_N");
break;
case EnumCtrl.BJCZState.YJCJ:
btn = GetWedage("AllSplitBtn_N");
GetWedage("AllSplitBtn_N").transform.Find("Text (Legacy)").GetComponent<Text>().text = "一键拼装";
break;
case EnumCtrl.BJCZState.YJPZ:
btn = GetWedage("AllSplitBtn_N");
break;
case EnumCtrl.BJCZState.SXCJ:
btn = GetWedage("OrderSplitBtn_N");
break;
case EnumCtrl.BJCZState.YLSY:
btn = GetWedage("SchematicBtn_N");
break;
}
GameManager.Instance._DataBJCJHandler._CurState.Value = (int)bjczState;
if (_previousSelectBtn)
{
_previousSelectBtn.GetComponent<Image>().sprite = _previousSelectBtn.spriteState.highlightedSprite;
}
btn.GetComponent<Image>().sprite = btn.GetComponent<Button>().spriteState.pressedSprite;
_previousSelectBtn = btn.GetComponent<Button>();
}
/// <summary>
/// 一件拆解拼合监听
/// </summary>
/// <param name="obj"></param>
private void OnYJCJCombinateChanged(BJCJ_INFO obj)
{
string partsName = GameManager.Instance._DataBJCJHandler._ShowPartsName.Value;
if (GameManager.Instance._DataBJCJHandler.GetYJCJCombinate()[partsName].Count ==
GameManager.Instance._DataBJCJHandler._YJCJDataArray[partsName].Count)
{//拆解完成
BtnStyleChanged(EnumCtrl.BJCZState.BJRZ);
_partsBJCJPanel.gameObject.SetActive(true);
_stepBJCJPanel.gameObject.SetActive(false);
}
}
}
}