ShanxiKnowledgeBase/SXKnowledgeBase-master/sxknowledgebase/Assets/Scripts/UI/Items/DeviceItem.cs

170 lines
5.5 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;
public class DeviceItem : MonoBehaviour
{
/// <summary>
/// 已实例化的设备
/// Key设备名称Value设备实例物体
/// </summary>
public static Dictionary<string, GameObject> InstantiatedObjects = new Dictionary<string, GameObject>();
/// <summary>
/// 所有设备列表
/// </summary>
public static List<DeviceItem> DeviceItemsList = new List<DeviceItem>();
/// <summary>
/// 当前选中的设备
/// </summary>
public static DeviceItem SelectedItem;
/// <summary>
/// 设备按钮
/// </summary>
public Button OnSelectButton;
/// <summary>
/// 设备名称
/// </summary>
public TextMeshProUGUI DeviceName;
/// <summary>
/// 设备数据
/// </summary>
public DevicesItemData DevicesItemData;
/// <summary>
/// 是否处在爆炸状态
/// </summary>
public bool IsExploded;
/// <summary>
/// 默认颜色
/// </summary>
public Color NormalColor = new Color(0.066f, 0.316f, 0.598f);
/// <summary>
/// 高亮颜色
/// </summary>
public Color HighlightColor = new Color(0, 0.766f, 1);
public void Init(DevicesItemData devicesItemData)
{
if (!DeviceItemsList.Contains(this))
DeviceItemsList.Add(this);
OnSelectButton.onClick.AddListener(OnSelect);
if (devicesItemData == null) return;
DevicesItemData = devicesItemData;
DeviceName.text = devicesItemData.dev_name;
DeviceName.color = NormalColor;
var dev = Resources.Load<GameObject>("Prefabs/Devices/" + devicesItemData.dev_name);
if (dev != null)
{
var x = Instantiate(dev, GameObject.Find("GameCenter").transform);
InstantiatedObjects.Add(devicesItemData.dev_name, x);
x.gameObject.SetActive(false);
}
if (TrainingManager.Instance.PictureDic.ContainsKey(DevicesItemData.dev_name))
{
var _path = TrainingManager.Instance.PictureDic[DevicesItemData.dev_name].Find(x => System.IO.Path.GetFileNameWithoutExtension(x) == DevicesItemData.pic_id);
MainCoroutine.Instance.CoroutineStart(InterfaceManager.GetSprite(_path, (_sp) =>
{
DevicesItemData._right_sprite = _sp;
}));
}
}
private void OnSelect()
{
if (SelectedItem != this)
{
if (SelectedItem != null)
SelectedItem.OnDisselectDo();
SelectedItem = this;
SelectedItem.OnSelectDo();
//if (TrainingManager.Instance.IsTutorial)
//{
// AudioManager.Instance.PlayAudio(DevicesItemData.dev_name);
//}
//切换设备时关闭正在播放的,并且状态切回
AudioManager.Instance.StopAudio();
CanvasMain.Instance.PlayAudioButton.GetComponent<CusButton>().SetStatus(false);
}
//取消选中
//else
//{
// SelectedItem.OnDisselectDo();
// SelectedItem = null;
//}
}
/// <summary>
/// 当前选中状态
/// </summary>
public void OnSelectDo()
{
//选中效果
OnSelectButton.GetComponent<Image>().enabled = true;
DeviceName.color = HighlightColor;
if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name))
{
//展示设备模型
InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(true);
//更新交互设备
//BaseCam.Instance.Init(InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].transform.Find("ObjectCenter"));
OrbitCamera.Instance.Init(InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].GetComponent<CameraSettings>().CameraSettingsParam, InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].transform.Find("ObjectCenter"));
}
//更新设备信息介绍
CanvasMain.Instance.Introduction.text = DevicesItemData.dev_int;
//若在结构模式下切换设备,更新标签展示
if (!CanvasMain.Instance.IsPrincipleMode /*&& CanvasMain.Instance.IsTutorialMode*/)
CanvasMain.Instance.ShowDeviceTags();
//改变设备时,对应改变练习模式的当前设备信息
TrainingManager.ChangeDevice(SelectedItem);
}
/// <summary>
/// 取消当前选中状态
/// </summary>
public void OnDisselectDo()
{
OnSelectButton.GetComponent<Image>().enabled = false;
DeviceName.color = NormalColor;
//若在结构模式下切换设备,更新标签展示
if (!CanvasMain.Instance.IsPrincipleMode)
{
if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name))
CanvasMain.Instance.HideDeviceTags(immediately: true, lastDevice: InstantiatedObjects[SelectedItem.DevicesItemData.dev_name]);
else
CanvasMain.Instance.HideDeviceTags(immediately: true);
}
else
{
//前面动画没播放完,不能隐藏此物体
if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name))
InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(false);
}
}
//private void SetActiveFalse()
//{
// if (InstantiatedObjects.ContainsKey(SelectedItem.DevicesItemData.dev_name))
// InstantiatedObjects[SelectedItem.DevicesItemData.dev_name].SetActive(false);
//}
private void OnDestroy()
{
DeviceItemsList.Clear();
}
}