168 lines
7.9 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 OperationPartsBJCJPanel : UIBase
{
private GameObject _partItemContentOnePrefab = null;
private Transform _partParent = null;
private Transform _curSelectStepBtn = null;
private void OnEnable()
{
_partItemContentOnePrefab = GetWedage("ContentOnePrefab_N");
_partParent = GetWedage("PartItemContent_N").transform;
GameManager.Instance._DataBJCJHandler._CurBJRZhandler.OnValueChanged += OnPartInfoChanged;
//EventCenterManager.Instance.AddEventListener(EventEnum.CameraDoubleClickNull, DoubleClickNullHandler);
}
///// <summary>
///// 双击空白处再次显示原模型
///// </summary>
//private void DoubleClickNullHandler(object sender, EventArgs e)
//{
// string showName = GameManager.Instance._DataBJCJHandler._ShowPartsName.Value;
// BJCJ_INFO bjrzInfo = GameManager.Instance._DataBJCJHandler._CurBJRZhandler.GetValue()[showName];
// if (bjrzInfo == null) return;
// GameManager.Instance._DataBJCJHandler._CurBJRZhandler.SetValue(showName, bjrzInfo);
//}
private void OnDisable()
{
GameManager.Instance._DataBJCJHandler._CurBJRZhandler.OnValueChanged -= OnPartInfoChanged;
//EventCenterManager.Instance.RemoveListener(EventEnum.CameraDoubleClickNull, DoubleClickNullHandler);
}
/// <summary>
/// 实例化数据到部件栏
/// 切换功能状态和模型都会刷新
/// </summary>
/// <param name="info">设置不同数据集合</param>
public void InitData(List<BJCJ_INFO> ItemInfo)
{
foreach (Transform item in _partParent)
{
item.gameObject.SetActive(false);
}
GameObject itemContentTemp = null;
for (int i = 0; i < ItemInfo.Count; i++)
{
GameObject geo = null;
if (_partParent.Find("itemContent/"+ItemInfo[i].id.ToString()))
{
geo = _partParent.Find("itemContent/" + ItemInfo[i].id.ToString()).gameObject;
geo.transform.parent.gameObject.SetActive(true);
}
else
{
if (i % 3 == 0)
{
itemContentTemp = Instantiate(_partItemContentOnePrefab, _partParent);
itemContentTemp.name ="itemContent";
}
GameObject itemPrefab = itemContentTemp.transform.Find("PartItemPrefab").gameObject;
geo = Instantiate(itemPrefab, itemContentTemp.transform);
itemContentTemp.SetActive(true);
ButtonExtension2 geoBtnExt = geo.AddComponent<ButtonExtension2>();
geo.name = ItemInfo[i].id.ToString();
Sprite tmep = null;
//if (DataBJCJHandler._BJCZSpriteArray.ContainsKey(ItemInfo[i].partName))
//{
// tmep = DataBJCJHandler._BJCZSpriteArray[ItemInfo[i].partName];
//}
//else
//{
Sprite sprite = Resources.Load<Sprite>("BJCZLogo/"
+ GameManager.Instance._DataBJCJHandler._ShowPartsName.Value
+ "/"
+ ItemInfo[i].partName.Replace("/",""));
//UtilitiesMng.LoadSpriteByURL(ItemInfo[i].picURL, (sprite) =>
//{
//DataBJCJHandler._BJCZSpriteArray.Add(ItemInfo[i].partName, sprite);
geo.transform.Find("PartBG/PartImg").GetComponent<Image>().sprite = sprite;
//});
//}
if (System.Text.Encoding.Default.GetBytes(ItemInfo[i].partName).Length <= 15)
{
geo.GetComponent<RectTransform>().sizeDelta = new Vector2(72, 92);
geo.transform.Find("PartNameTxt").GetComponent<RectTransform>().sizeDelta = new Vector2(72, 20);
geo.transform.Find("PartNameTxt").GetComponent<Text>().alignment = TextAnchor.UpperCenter;
}
else
{
geo.GetComponent<RectTransform>().sizeDelta = new Vector2(72, 112);
geo.transform.Find("PartNameTxt").GetComponent<RectTransform>().sizeDelta = new Vector2(72, 40);
geo.transform.Find("PartNameTxt").GetComponent<Text>().alignment = TextAnchor.UpperLeft;
}
geo.transform.Find("PartNameTxt").GetComponent<Text>().text = ItemInfo[i].partName;
geoBtnExt.onClick.AddListener(() =>
{
string showName = GameManager.Instance._DataBJCJHandler._ShowPartsName.Value;
BJCJ_INFO curInfo = GameManager.Instance._DataBJCJHandler._CurBJRZhandler.GetValue()[showName];
if (GameManager.Instance._DataBJCJHandler._CurState.Value == (int)EnumCtrl.BJCZState.BJRZ)
{
BJCJ_INFO bjrzInfo = GameManager.Instance._DataBJCJHandler.GetBJRZInfoByID(geoBtnExt.name);
if (bjrzInfo == curInfo) return;
GameManager.Instance._DataBJCJHandler._CurBJRZhandler.SetValue(showName, bjrzInfo);
}
});
geoBtnExt.onDoubleClick.AddListener(() =>
{
WDebug.Log("双击" + geo.name);
string showName = GameManager.Instance._DataBJCJHandler._ShowPartsName.Value;
BJCJ_INFO bjrzInfo = GameManager.Instance._DataBJCJHandler._CurBJRZhandler.GetValue()[showName];
if (BJCZSceneCtrl._Instance._OnlyShowGeo)
{
if (bjrzInfo == null) return;
GameManager.Instance._DataBJCJHandler._CurBJRZhandler.SetValue(showName, bjrzInfo);
}
else
{
BJCZSceneCtrl._Instance.DoubleClick(showName, bjrzInfo.itemGeo);
}
});
}
geo.SetActive(true);
}
}
/// <summary>
/// 选中零件发生变化
/// </summary>
/// <param name="obj"></param>
private void OnPartInfoChanged(Dictionary<string, BJCJ_INFO> obj)
{
foreach (var item in obj)
{
if (item.Key.Equals(GameManager.Instance._DataBJCJHandler._ShowPartsName.Value))
{
WDebug.Log($"当前主题:{item.Key},零件ID:{item.Value.id}");
if (GameManager.Instance._DataBJCJHandler._CurState.Value == (int)EnumCtrl.BJCZState.BJRZ)
{
if (_curSelectStepBtn)
{
_curSelectStepBtn.Find("FrameImg").gameObject.SetActive(false);
}
Transform btnTran = _partParent.Find("itemContent/"+item.Value.id.ToString());
if (btnTran)
{
btnTran.Find("FrameImg").gameObject.SetActive(true);
_curSelectStepBtn = btnTran;
}
}
}
}
}
}
}