ND_SimulationAutomaticControl/Assets/Scripts/Line/LineManager.cs

340 lines
12 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 DG.Tweening;
using HighlightPlus;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class LineManager : MonoBehaviour
{
public static LineManager instance;
public Transform point1;
public Transform point2;
public GameObject Tips;
public TextMeshProUGUI TipTexts;
public List<GameObject> Models = new List<GameObject>();
LineData lineData = new LineData();
public GameObject Lights;
/// <summary>
/// 高亮板、机器
/// </summary>
public HighlightEffect LightPanel, Devices;
/// <summary>
/// 电脑屏幕显示的图形
/// </summary>
public Image ComputerPanel;
public List<HighlightEffect> Highlights = new List<HighlightEffect>();
public List<HighlightEffect> Highlights_Backup = new List<HighlightEffect>();
public int hightindext = 0;
/// <summary>
/// 接口名称
/// </summary>
public string LineName;
public string line1;
public string line2;
private void Awake()
{
instance = this;
PlayerPrefs.SetString("LineData", "");
}
void Start()
{
Initialization();
}
private void Initialization()
{
if (PlayerPrefs.GetString("LineData") != "")
{
lineData = JsonConvert.DeserializeObject<LineData>(PlayerPrefs.GetString("LineData"));
for (int i = 0; i < lineData.Modelname.Count; i++)
{
for (int j = 0; j < Models.Count; j++)
{
if (lineData.Modelname[i].Contains(Models[j].name))
{
Models[j].SetActive(true);
}
if (lineData.Modelname[i].Equals(Models[j].name) && Models[j].name.Equals("diannaoxian"))
{
Models[j].transform.DOLocalMove(new Vector3(-0.56f, -0.293f, -0.163f), 0.5f);
}
}
}
}
for (int i = 0; i < Highlights.Count; i++)
{
if (i != 0)
{
Highlights[i].highlighted = false;
}
}
}
bool isshow;
void Update()
{
if (Input.GetMouseButtonDown(2))
{
point1 = null;
point2 = null;
PlayerPrefs.SetString("LineData", "");
}
if (allline >= Models.Count && !isshow)
{
isshow = true;
TipTexts.text = "导线已全部连接,请先打开电源开关再打开按钮开关!";
StartCoroutine(WaitHide(Tips));
}
if (Highlights.Count <= 0)
{
ComputerPanel.gameObject.SetActive(true);
TipTexts.text = "当前实验图形已显示。";
StartCoroutine(WaitHide(Tips));
Highlights = Highlights_Backup;
Bootstrap.Instance.uiManager.HidePanel<UI_TopTipPanel>();
}
}
/// <summary>
/// 鼠标点击的物体
/// </summary>
/// <param name="point"></param>
public void ClickPoint(Transform point)
{
if (Highlights.Count != 21 && Highlights.Count % 2 == 0)
{
for (int i = 0; i < Highlights.Count; i++)
{
for (int j = 0; j < Highlights_Backup.Count; j++)
{
if (!Highlights_Backup[j].name.Equals(Highlights[i].name))
{
Highlights_Backup[j].GetComponent<BoxCollider>().enabled = false;
}
}
}
}
//if (point1 != null)
//{
// point2 = point;
//}
//if (point1 == null)
//{
// point1 = point;
//}
//if (point1 != null && point2 != null)
//{
// //StartCoroutine(Checkconnection(point1, point2));
//}
if (point.name.Equals("diannaoxian"))
{
if (!lineData.Modelname.Contains(point.name))
{
allline++;
lineData.Modelname.Add(point.name);
string json = JsonConvert.SerializeObject(lineData);
PlayerPrefs.SetString("LineData", json);
}
point.DOLocalMove(new Vector3(-0.56f, -0.293f, -0.163f), 0.5f);
}
if (point.name.Equals("开关"))
{
//if (!lineData.Modelname.Contains(point.name))
//{
// allline++;
// lineData.Modelname.Add(point.name);
// string json = JsonConvert.SerializeObject(lineData);
// PlayerPrefs.SetString("LineData", json);
//}
point.DORotateQuaternion(Quaternion.Euler(-17f, 0, 0), 0.5f);
}
if (point.name.Equals("闸"))
{
//if (!lineData.Modelname.Contains(point.name))
//{
// allline++;
// lineData.Modelname.Add(point.name);
// string json = JsonConvert.SerializeObject(lineData);
// PlayerPrefs.SetString("LineData", json);
//}
Material material = Lights.GetComponent<MeshRenderer>().material;
material.EnableKeyword("_EMISSION");
material.color = UnityEngine.Color.red;
point.DORotateQuaternion(Quaternion.Euler(-50f, 0, 0), 0.5f);
}
for (int i = 0; i < Highlights.Count; i++)
{
if (Highlights[i].name.Equals(point.name))
{
hightindext = i;
Highlights[i].highlighted = false;
Highlights.Remove(Highlights[i]);
break;
}
}
if (hightindext < Highlights.Count)
{
LineName = Highlights[hightindext].GetComponent<LineConnect>().interfaceType.ToString();
Highlights[hightindext].highlighted = true;
Highlights[hightindext].GetComponent<BoxCollider>().enabled = true;
}
LightPanel.highlighted = false;
Devices.highlighted = false;
Bootstrap.Instance.uiManager.ShowPanel<UI_TopTipPanel>(this, E_UI_Layer.Top,
(panel) =>
{
panel.Init("提示:", "请点击" + LineName+"。");
});
}
public IEnumerator Checkconnection(Transform transform, Transform transform2)
{
LineConnect line = transform.GetComponent<LineConnect>();
LineConnect line2 = transform2.GetComponent<LineConnect>();
if (line != null && line2 != null)
{
if (!JudgmentLine(line, line2))
{
yield return null;
StartCoroutine(WaitHide(Tips));
}
}
}
public bool JudgmentLine(LineConnect line1, LineConnect line2)
{
Init();
if (line1.interfaceType == InterfaceType.12V && line2.interfaceType != InterfaceType.12V ||
line2.interfaceType == InterfaceType.12V && line1.interfaceType != InterfaceType.12V)
{
TipTexts.text = "连接错误,-12V应该与-12V相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.12V && line2.interfaceType != InterfaceType.12V
|| line2.interfaceType == InterfaceType.12V && line1.interfaceType != InterfaceType.12V
)
{
TipTexts.text = "连接错误12V应该与12V相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
//else if (line1.interfaceType == InterfaceType.零V && line2.interfaceType != InterfaceType.GND
// || line2.interfaceType == InterfaceType.GND && line1.interfaceType != InterfaceType.零V)
//{
// TipTexts.text = "连接错误0V应该与GND相连";
// // WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
// //WireDrawingSystem.instance.HandleDelete();
// //WireDrawingSystem.instance.ClearSnapPreview();
// LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
// return false;
//}
else if (line1.interfaceType == InterfaceType.IN2_200K && line2.interfaceType != InterfaceType.OUT1
|| line2.interfaceType == InterfaceType.IN2_200K && line1.interfaceType != InterfaceType.OUT1)
{
TipTexts.text = "连接错误200K应该与OUT1相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.OUT1 && (line2.interfaceType != InterfaceType.IN4 && line2.interfaceType != InterfaceType.IN2_200K)
|| line2.interfaceType == InterfaceType.OUT1 && line1.interfaceType != InterfaceType.IN4)
{
TipTexts.text = "连接错误OUT1应该与IN4相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.AD1 && line2.interfaceType != InterfaceType.OUT2
|| line2.interfaceType == InterfaceType.AD1 && line1.interfaceType != InterfaceType.OUT2)
{
TipTexts.text = "连接错误AD1应该与OUT2相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if ((line1.interfaceType == InterfaceType.V && (line2.interfaceType != InterfaceType.GND && line2.interfaceType != InterfaceType.III)
|| line2.interfaceType == InterfaceType.GND && line1.interfaceType != InterfaceType.V)
)
{
TipTexts.text = "连接错误0V应该与GND相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.OUT && line2.interfaceType != InterfaceType.IN1
|| line2.interfaceType == InterfaceType.OUT && line1.interfaceType != InterfaceType.IN1)
{
TipTexts.text = "连接错误OUT应该与IN1相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.interfaceType == InterfaceType.AD2 && line2.interfaceType != InterfaceType.IN1
|| line2.interfaceType == InterfaceType.AD2 && line1.interfaceType != InterfaceType.IN1)
{
TipTexts.text = "连接错误AD2应该与IN1相连";
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else if (line1.IsNotLine == true || line2.IsNotLine == true)
{
TipTexts.text = "连接错误,不需要此连线";
// WireDrawingSystem.instance.currentState = WireDrawingSystem.DrawingState.Idle;
//WireDrawingSystem.instance.HandleDelete();
//WireDrawingSystem.instance.ClearSnapPreview();
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return false;
}
else
{
for (int i = 0; i < Models.Count; i++)
{
string[] splitname = Models[i].name.Split('连');
if (splitname[0] == line1.interfaceType.ToString() && splitname[1] == line2.interfaceType.ToString() ||
splitname[0] == line2.interfaceType.ToString() && splitname[1] == line1.interfaceType.ToString())
{
if (!lineData.Modelname.Contains(Models[i].name))
{
allline++;
lineData.Modelname.Add(Models[i].name);
string json = JsonConvert.SerializeObject(lineData);
PlayerPrefs.SetString("LineData", json);
}
Models[i].SetActive(true);
}
}
LineShowModel.Instance.DeleteWiresByCollider(line1.gameObject);
return true;
}
}
int allline = 0;
public void Init()
{
point2 = null;
point1 = null;
}
IEnumerator WaitHide(GameObject game)
{
game.SetActive(true);
yield return new WaitForSeconds(1.5f);
game.SetActive(false);
}
}
public class LineData
{
public List<string> Modelname = new List<string>();
}