GQ_Communicate/GQ_TongXin/Assets/script/点击/ClickEvent.cs

563 lines
20 KiB
C#

using DG.Tweening;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 柜子点击脚本
/// </summary>
public class ClickEvent : MonoBehaviour
{
/// <summary>
/// 物体是否透明
/// </summary>
public bool isTransparentGlow = false;
/// <summary>
/// 放大状态
/// </summary>
public bool My_magnifyState = false;
private List<MeshRenderer> meshRenderers;
/// <summary>
/// 自身的
/// </summary>
private List<Material> materials;
/// <summary>
/// 复制出来的
/// </summary>
public List<Material> empty = new List<Material>();
public Shader TransparentGlow_Shader;
/// <summary>
/// 坐标偏移值
/// </summary>
//[SerializeField] Vector3 yiDong_pos = new Vector3(1.5f, 0.5f, 0);
[SerializeField] Vector3 yiDong_pos = new Vector3(2.1f, 0.2f, 0);
/// <summary>
/// 角度偏移值
/// </summary>
[SerializeField] Vector3 fangDa_rot = new Vector3(0, -90, 0);
public List<MeshRenderer> MeshRenderers
{
get
{
if (meshRenderers == null)
meshRenderers = GetComponentsInChildren<MeshRenderer>().ToList();
return meshRenderers;
}
}
public List<Material> Materials
{
get
{
if (materials == null)
{
materials = new List<Material>();
MeshRenderers.ForEach(render =>
{
Array.ForEach(render.materials, (_mat) =>
{
if (!materials.Contains(_mat))
{
materials.Add(_mat);
Material _emp = new Material(_mat);
empty.Add(_emp);
}
});
});
}
return materials;
}
}
// Start is called before the first frame update
void Start()
{
TransparentGlow_Shader = Resources.Load<Shader>("TransparentGlow");
}
// Update is called once per frame
void Update()
{
if (!EventSystem.current.IsPointerOverGameObject() && Input.GetMouseButtonDown(0) && TransparentGlowManage.Inst.gameObject.activeSelf)
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Menu.M_数字孪生_场景管理 == CabinetUIManager.Instance.current_menu && GameManager.Inst.magnifyState)
{
if (Physics.Raycast(ray, out hit, 100, 1 << 8))
{
if (hit.collider.gameObject == gameObject)
{
Debug.Log("点击到配置" + gameObject.name);
PatternChoose.Inst.transform.Find("设备类/设备配置").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("设备类/设备新增").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("端口类/端口配置").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("端口类/端口新增").gameObject.SetActive(false);
GameManager.Inst.search_box.SetActive(false);
var d = gameObject.GetComponent<DeviceQuery>();
if (d)
{
if (string.IsNullOrEmpty(d.deviceList.id))
{
GameManager.Inst.nowDevice = gameObject;
PatternChoose.Inst.transform.Find("设备类/设备新增").gameObject.SetActive(true);//√
}
else
{
GameManager.Inst.nowDeviceID = d.deviceList.id;
GameManager.Inst.nowDevice = gameObject;
PatternChoose.Inst.transform.Find("设备类/设备配置").gameObject.SetActive(true);//√
}
}
}
}
}
else if (Menu.M_数字孪生_线缆连接_配置 == CabinetUIManager.Instance.current_menu && GameManager.Inst.magnifyState)
{
if (Physics.Raycast(ray, out hit, 100, 1 << 11))
{
if (hit.collider.gameObject == gameObject)
{
Debug.Log("点击到配置" + gameObject.name);
PatternChoose.Inst.transform.Find("设备类/设备配置").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("设备类/设备新增").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("端口类/端口配置").gameObject.SetActive(false);
PatternChoose.Inst.transform.Find("端口类/端口新增").gameObject.SetActive(false);
var p = gameObject.GetComponent<PortQuery>();
if (p)
{
if (string.IsNullOrEmpty(p.portList.id))
{
GameManager.Inst.nowDevice = gameObject;
PatternChoose.Inst.transform.Find("端口类/端口新增").gameObject.SetActive(true);//√
}
else
{
GameManager.Inst.nowDeviceID = p.portList.id;
GameManager.Inst.nowDevice = gameObject;
PatternChoose.Inst.transform.Find("端口类/端口配置").gameObject.SetActive(true);//√
}
}
}
}
}
#region MyRegion
////点击模型(配置)
//if (Physics.Raycast(ray, out hit, 100, 1 << 8))
//{
// if (hit.collider.gameObject == gameObject)
// {
// if (Menu.M_数字孪生_场景管理 == CabinetUIManager.Instance.current_menu)
// {
// GameManager.Inst.search_box.SetActive(false);
// var d = gameObject.GetComponent<DeviceQuery>();
// if (d)
// {
// if (string.IsNullOrEmpty(d.deviceList.id))
// {
// GameManager.Inst.nowDevice = gameObject;
// PatternChoose.Inst.transform.Find("设备类/设备新增").gameObject.SetActive(true);//√
// }
// else
// {
// GameManager.Inst.nowDeviceID = d.deviceList.id;
// GameManager.Inst.nowDevice = gameObject;
// PatternChoose.Inst.transform.Find("设备类/设备配置").gameObject.SetActive(true);//√
// }
// }
// }
// else if (Menu.M_数字孪生_线缆连接_配置 == CabinetUIManager.Instance.current_menu)
// {
// var p = gameObject.GetComponent<PortQuery>();
// if (p)
// {
// if (string.IsNullOrEmpty(p.portList.id))
// {
// GameManager.Inst.nowDevice = gameObject;
// PatternChoose.Inst.transform.Find("端口类/端口新增").gameObject.SetActive(true);//√
// }
// else
// {
// GameManager.Inst.nowDeviceID = p.portList.id;
// GameManager.Inst.nowDevice = gameObject;
// PatternChoose.Inst.transform.Find("端口类/端口配置").gameObject.SetActive(true);//√
// }
// }
// }
// else
// {
// PatternChoose.Inst.transform.Find("设备类/设备配置").gameObject.SetActive(false);
// PatternChoose.Inst.transform.Find("端口类/端口配置").gameObject.SetActive(false);
// }
// }
//}
#endregion
//不虚化
else if (Physics.Raycast(ray, out hit, 100, 1 << 6))
{
//放大
if (hit.collider.gameObject == gameObject && !My_magnifyState)
{
GameManager.Inst.nowDeviceID = hit.collider.gameObject.GetComponent<DeviceQuery>().deviceList.id;
Change_hide(gameObject, true, true);
}
//缩小
else if (hit.collider.gameObject == gameObject && My_magnifyState)
{
Change_hide(gameObject, false, false);
}
}
#region
////虚化非点击
//else if (Physics.Raycast(ray, out hit, 100, 1 << 6))
//{
// //点到,本身透明,场景透明模式
// if (hit.collider.gameObject == gameObject && isTransparentGlow && TransparentGlowManage.Inst.is_transparency)
// {
// ChangeBig_TouMing();
// }
// //点到,本身非透明,场景透明模式
// else if (hit.collider.gameObject == gameObject && !isTransparentGlow && TransparentGlowManage.Inst.is_transparency)
// {
// ChangeSmall_renewALL();
// }
// //点到,本身非透明,场景非透明模式
// else if (hit.collider.gameObject == gameObject && !isTransparentGlow && !TransparentGlowManage.Inst.is_transparency)
// {
// ChangeBig_();
// }
//}
#endregion
}
}
private void OnMouseEnter()
{
if (CabinetUIManager.Instance.current_menu == Menu.M_数字孪生_机柜容量)
{
DeviceQuery d = null;
try
{
d = GetComponent<DeviceQuery>();
}
catch (Exception)
{
return;
}
if (d)
{
if (d.deviceList.type == "1")
{
VolumeImg v = null;
try
{
v = transform.Find("容量/Canvas").GetComponent<VolumeImg>();
}
catch
{
return;
}
if (!v) return;
v.Image.gameObject.SetActive(true);
v.textMeshProUGUI.text = "剩余" + d.deviceList.residueNum + "个U位置";
}
else return;
}
else return;
}
else return;
}
private void OnMouseExit()
{
if (CabinetUIManager.Instance.current_menu == Menu.M_数字孪生_机柜容量)
{
DeviceQuery d = null;
try
{
d = GetComponent<DeviceQuery>();
}
catch (Exception)
{
return;
}
if (d)
{
if (d.deviceList.type == "1")
{
VolumeImg v = null;
try
{
v = transform.Find("容量/Canvas").GetComponent<VolumeImg>();
}
catch
{
return;
}
if (!v) return;
v.Image.gameObject.SetActive(false);
}
else return;
}
else return;
}
else return;
}
/// <summary>
/// 本身透明
/// </summary>
[ContextMenu("透明")]
public void F1()
{
isTransparentGlow = true;
for (int i = 0; i < Materials.Count; i++)
{
Materials[i].shader = TransparentGlow_Shader;
}
}
/// <summary>
/// 本身恢复原材质
/// </summary>
[ContextMenu("恢复原材质")]
public void F2()
{
isTransparentGlow = false;
for (int i = 0; i < Materials.Count; i++)
{
Materials[i].shader = empty[i].shader;
}
}
/// <summary>
/// 变大=>场景透明,自身不变
/// </summary>
public void ChangeBig_TouMing()
{
ExtendedFlycam.Inst.init_mainCamera_rot();
isTransparentGlow = true;
// 物体被点击
Debug.Log("放大点击到" + gameObject.name);
//Renderer renderer = GetComponent<Renderer>();
Renderer renderer = null;
//if (transform.childCount != 0)
// renderer = transform.Find(transform.name).GetComponent<Renderer>();
//else
// renderer = transform.GetComponent<Renderer>();
try
{
renderer = transform.Find(transform.name).GetComponent<Renderer>();
}
catch (Exception)
{
if (!renderer) renderer = transform.GetComponentInChildren<Renderer>();
}
Vector3 center = renderer.bounds.center;
Vector3 targetPosition = new Vector3(center.x + yiDong_pos.x, center.y + yiDong_pos.y, center.z + yiDong_pos.z);
Quaternion targetRotation = Quaternion.Euler(fangDa_rot);
Camera.main.transform.DOMove(targetPosition, 1f);
Camera.main.transform.DORotateQuaternion(targetRotation, 1f).OnComplete(() =>
{
//更新相机初始旋转角度
ExtendedFlycam.Inst.initialRotationEulerAngles = Camera.main.transform.localEulerAngles;
});
TransparentGlowManage.Inst.transparencyALL();
F2();
}
/// <summary>
/// 变小=>场景恢复
/// </summary>
public void ChangeSmall_renewALL()
{
ExtendedFlycam.Inst.init_mainCamera_rot();
isTransparentGlow = false;
// 物体被点击
Debug.Log("缩小点击到" + gameObject.name);
Camera.main.transform.DOMove(TransparentGlowManage.Inst.MainCamera_pos, 1f);
Camera.main.transform.DORotateQuaternion(Quaternion.Euler(TransparentGlowManage.Inst.MainCamera_rot), 1f).OnComplete(() =>
{
//更新相机初始旋转角度
ExtendedFlycam.Inst.initialRotationEulerAngles = Camera.main.transform.localEulerAngles;
});
TransparentGlowManage.Inst.renewALL();
}
public void ChangeBig_()
{
ExtendedFlycam.Inst.init_mainCamera_rot();
isTransparentGlow = true;
// 物体被点击
Debug.Log("放大点击到" + gameObject.name);
//Renderer renderer = GetComponent<Renderer>();
Renderer renderer = null;
//if (transform.childCount != 0)
// renderer = transform.Find(transform.name).GetComponent<Renderer>();
//else
// renderer = transform.GetComponent<Renderer>();
try
{
renderer = transform.Find(transform.name).GetComponent<Renderer>();
}
catch (Exception)
{
if (!renderer) renderer = transform.GetComponentInChildren<Renderer>();
}
Vector3 center = renderer.bounds.center;
Vector3 targetPosition = new Vector3(center.x + yiDong_pos.x, center.y + yiDong_pos.y, center.z + yiDong_pos.z); Quaternion targetRotation = Quaternion.Euler(fangDa_rot);
Camera.main.transform.DOMove(targetPosition, 1f);
Camera.main.transform.DORotateQuaternion(targetRotation, 1f).OnComplete(() =>
{
//更新相机初始旋转角度
ExtendedFlycam.Inst.initialRotationEulerAngles = Camera.main.transform.localEulerAngles;
});
TransparentGlowManage.Inst.transparencyALL();
F2();
}
/// <summary>
/// 机柜隐藏+是否拉近镜头
/// </summary>
/// <param name="isHide"></param>
/// <param name="isZoomin"></param>
public void Change_hide(GameObject cabine, bool isHide, bool isZoomin)
{
//放大
if (isZoomin)
Zoomin(cabine);
//缩小
else
Zoomout(cabine);
for (int i = 0; i < GameManager.Inst.Cabinets_go.Count; i++)
{
GameManager.Inst.Cabinets_go[i].SetActive(!isHide);
}
if (isHide)
gameObject.SetActive(true);
}
/// <summary>
/// 放大镜头
/// </summary>
public void Zoomin(GameObject cabine)
{
ExtendedFlycam.Inst.CameraRtDisable();
//ExtendedFlycam.Inst.init_mainCamera_rot();
// 物体被点击
Debug.Log("放大点击到" + gameObject.name);
GameManager.Inst.nowDevice = gameObject;
GameManager.Inst.nowDeviceID = GetComponent<DeviceQuery>().deviceList.id; ;
Renderer renderer = null;
try
{
renderer = transform.Find(transform.name).GetComponent<Renderer>();
}
catch (Exception)
{
if (!renderer) renderer = transform.GetComponentInChildren<Renderer>();
}
Array.ForEach(GameObject.FindObjectsOfType<ClickEvent>(), itme =>
{
itme.My_magnifyState = false;
});
My_magnifyState = true;
GameManager.Inst.magnifyState = true;
TransparentGlowManage.Inst.is_magnify = true;
Vector3 center = renderer.bounds.center;
Vector3 targetPosition = new Vector3(center.x + yiDong_pos.x, center.y + yiDong_pos.y, center.z + yiDong_pos.z);
Quaternion targetRotation = Quaternion.Euler(fangDa_rot);
Camera.main.transform.DOMove(targetPosition, 1f);
Camera.main.transform.DORotateQuaternion(targetRotation, 1f).OnComplete(() =>
{
//更新相机初始旋转角度
ExtendedFlycam.Inst.initialRotationEulerAngles = Camera.main.transform.localEulerAngles;
if (cabine&& cabine.transform.Find("门把手").GetComponentInChildren<Door>())
{
var door = cabine.transform.Find("门把手").GetComponentInChildren<Door>();
if (door.TextMeshProUGUI.text == "关门") return;
GameManager.Inst.power_open(cabine);
door.TextMeshProUGUI.text = "关门";
door.isopen = !door.isopen;
}
});
}
/// <summary>
/// 缩小镜头
/// </summary>
/// <param name="hit"></param>
public void Zoomout(GameObject cabine)
{
ExtendedFlycam.Inst.CameraRtDisable();
GameManager.Inst.nowDeviceID = null;
My_magnifyState = false;
GameManager.Inst.magnifyState = false;
TransparentGlowManage.Inst.is_magnify = false;
//ExtendedFlycam.Inst.init_mainCamera_rot();
// 物体被点击
Debug.Log("缩小点击到" + gameObject.name);
Camera.main.transform.DOMove(TransparentGlowManage.Inst.MainCamera_pos, 1f);
Camera.main.transform.DORotateQuaternion(Quaternion.Euler(TransparentGlowManage.Inst.MainCamera_rot), 1f).OnComplete(() =>
{
//更新相机初始旋转角度
//ExtendedFlycam.Inst.initialRotationEulerAngles = Camera.main.transform.localEulerAngles;
if (cabine&& cabine.transform.Find("门把手").GetComponentInChildren<Door>())
{
var door = cabine.transform.Find("门把手").GetComponentInChildren<Door>();
if (door.TextMeshProUGUI.text == "开门") return;
GameManager.Inst.power_close(cabine);
door.TextMeshProUGUI.text = "开门";
door.isopen = !door.isopen;
}
});
}
}