304 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			304 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
| using DG.Tweening;
 | |
| using System;
 | |
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using System.Data;
 | |
| using System.Linq;
 | |
| using System.Threading.Tasks;
 | |
| using Unity.VisualScripting;
 | |
| using UnityEngine;
 | |
| using UnityEngine.SceneManagement;
 | |
| using UnityEngine.UI;
 | |
| 
 | |
| public class GameManager : MonoBehaviour
 | |
| {
 | |
|     public static GameManager Instance;
 | |
|     public GameObject Player;
 | |
|     public CameraManager CameraManager;
 | |
|     [SerializeField] GameObject QianXing;
 | |
|     [SerializeField] GameObject WanYon;
 | |
|     [SerializeField] GameObject YanDianBi;
 | |
|     char[] TempChar = new char[7] { '(', 'C', 'l', 'o', 'n', 'e', ')' };
 | |
|     public string dataStr;
 | |
|     [SerializeField] List<GameObject> GFGame;//光伏板物体
 | |
|     [SerializeField] SceneData SceneData;//暂时数据
 | |
|     [SerializeField] List<GameObject> Inverter;
 | |
|     [SerializeField] Transform trans;
 | |
|     public StopValveGai WanStopValve;//万用表UI旋钮
 | |
|     public StopValveGai QianStopValve;//钳形表UI旋钮
 | |
|     [SerializeField] GameObject NiBianQi;
 | |
|     [SerializeField] Image XiangWeiUI;//相位UI
 | |
|     public GameObject temp;
 | |
|     public List<GameObject> interactive;
 | |
|     public GameObject RedWanYon;
 | |
|     public Vector3 RedWanYonPos;
 | |
|     public GameObject BlackWanYon;
 | |
|     public Vector3 BlackWanYonPos;
 | |
|     public GameObject FuAnBiao;
 | |
|     public Interactive interactiveEnum = Interactive.none;
 | |
|     public Transform biaojiPos;
 | |
|     public Camera toolsCam;
 | |
|     public Image MultimeterIm;
 | |
|     public Image DianFuIm;
 | |
|     public Text DianFuTex;
 | |
|     [SerializeField] FirstPersonController FirstPersonController;
 | |
|     public string SceneName;
 | |
|     public GameObject GanTan;
 | |
|     public bool GonZuoZheng = false;
 | |
|     public bool JiaoHu = false;
 | |
|     public bool YanDian = false;
 | |
|     [SerializeField] Image HuiFuim;
 | |
|     public bool redok = false;
 | |
|     public string redData;
 | |
|     public DoolsPlayer DoolsPlayer;
 | |
| 
 | |
|     public void Awake()
 | |
|     {
 | |
|         if (Instance != null)
 | |
|         {
 | |
|             Destroy(Instance);
 | |
|             return;
 | |
|         }
 | |
|         Instance = this;
 | |
|         Scene scene = SceneManager.GetActiveScene();
 | |
|         SceneName = scene.name;
 | |
|         if (UIManager.Instance.Reconnection.ison)
 | |
|         {
 | |
|             //init();
 | |
|         }
 | |
|     }
 | |
|     // Start is called before the first frame update
 | |
|     private async void Start()
 | |
|     {
 | |
|         UIManager.Instance.toolsItemManager.ItemClick.AddListener(ToolsShow);
 | |
|         UIManager.Instance.toolsItemManager.recoverEvent.AddListener(() =>
 | |
|         {
 | |
|             WanStopValve.gameObject.SetActive(false);
 | |
|             QianStopValve.gameObject.SetActive(false);
 | |
|             DianFuIm.gameObject.SetActive(false);
 | |
|             interactiveEnum = Interactive.none;
 | |
|             FirstPersonController.enabled = true;
 | |
|         });
 | |
|         string sceneInfo = GlobalFlag.SceneInfo();
 | |
|         var tempStr = sceneInfo.Split('_');
 | |
| 
 | |
|         int pvwCount = 0;
 | |
|         if (GlobalFlag.userType == "正常")
 | |
|         {
 | |
|             pvwCount = (GlobalFlag.runRL * 1000) / 600;
 | |
|         }
 | |
|         else if (GlobalFlag.userType == "异常")
 | |
|         {
 | |
|             pvwCount = GlobalFlag.pvwNum;
 | |
|         }
 | |
| 
 | |
|         if (tempStr[tempStr.Length - 1].Equals("有光伏"))
 | |
|         {
 | |
|             for (int i = 0; i < pvwCount; i++)
 | |
|             {
 | |
|                 GFGame[i].gameObject.SetActive(true);
 | |
|             }
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             NiBianQi.gameObject.SetActive(false);
 | |
|         }
 | |
|         for (int i = 0; i < Inverter.Count; i++)
 | |
|         {
 | |
|             if (sceneInfo.Equals(Inverter[i].name))
 | |
|             {
 | |
|                 GameObject obj = Instantiate(Inverter[i]);
 | |
|                 obj.transform.localPosition = biaojiPos.localPosition;
 | |
|                 obj.transform.localEulerAngles = biaojiPos.localEulerAngles;
 | |
|                 interactive.Add(obj.GetComponentInChildren<door_control>().gameObject);
 | |
|             }
 | |
|         }
 | |
|         if (tempStr[tempStr.Length - 1].Equals("无光伏"))
 | |
|         {
 | |
|             await FractionManager.Instance.overAsync(5, 10, "检查光伏");
 | |
|         }
 | |
|     }
 | |
|     public void init()
 | |
|     {
 | |
|         if (UIManager.Instance.Reconnection.HandGameObject)
 | |
|         {
 | |
|             ToolsShow(UIManager.Instance.Reconnection.HandGameObject);
 | |
|             UIManager.Instance.toolsItemManager.recoverBtn.gameObject.SetActive(true);
 | |
|         }
 | |
|         Player.transform.GetComponent<FirstPersonController>().enabled = true;
 | |
|         Player.transform.localPosition = UIManager.Instance.Reconnection.PlayerPos;
 | |
|         Player.transform.localEulerAngles = UIManager.Instance.Reconnection.PlayerRot;
 | |
|         HuiFuim.gameObject.SetActive(true);
 | |
|         HuiFuim.DOFade(0.8f, 0.25f);
 | |
|         HuiFuim.DOFade(0, 0.25f).SetDelay(2).OnComplete(() =>
 | |
|         {
 | |
|             HuiFuim.gameObject.SetActive(false);
 | |
|         });
 | |
|         UIManager.Instance.Reconnection.ison = false;
 | |
|     }
 | |
|     public void show(string Str)
 | |
|     {
 | |
|         if (string.IsNullOrEmpty(Str))
 | |
|         {
 | |
|             return;
 | |
|         }
 | |
|         DianFuIm.gameObject.SetActive(true);
 | |
|         DianFuTex.text = Str;
 | |
|     }
 | |
|     private void Update()
 | |
|     {
 | |
|         if (transform)
 | |
|         {
 | |
|             switch (interactiveEnum)
 | |
|             {
 | |
|                 case Interactive.none:
 | |
|                     for (int i = 0; i < interactive.Count; i++)
 | |
|                     {
 | |
|                         if (interactive[i])
 | |
|                         {
 | |
|                             DoolsPlayer.ison = true;
 | |
|                             interactive[i].transform.GetComponent<door_control>().启用交互 = true;
 | |
|                         }
 | |
|                     }
 | |
|                     break;
 | |
|                 case Interactive.YanDian:
 | |
|                     for (int i = 0; i < interactive.Count; i++)
 | |
|                     {
 | |
|                         if (interactive[i])
 | |
|                         {
 | |
|                             DoolsPlayer.ison = false;
 | |
|                             interactive[i].transform.GetComponent<door_control>().启用交互 = false;
 | |
|                             interactive[i].transform.GetComponent<MeshCollider>().enabled = true;
 | |
|                         }
 | |
|                     }
 | |
|                     break;
 | |
|                 case Interactive.QianXing:
 | |
|                     for (int i = 0; i < interactive.Count; i++)
 | |
|                     {
 | |
|                         if (interactive[i])
 | |
|                         {
 | |
|                             DoolsPlayer.ison = true;
 | |
|                             interactive[i].transform.GetComponent<door_control>().启用交互 = true;
 | |
|                         }
 | |
|                     }
 | |
|                     break;
 | |
|                 case Interactive.YanDianOk:
 | |
|                     for (int i = 0; i < interactive.Count; i++)
 | |
|                     {
 | |
|                         interactive[i].transform.GetComponent<MeshCollider>().enabled = false;
 | |
|                     }
 | |
|                     break;
 | |
|                 default:
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|         //if (Input.GetKeyDown(KeyCode.K))
 | |
|         //{
 | |
|         //    ToolsShow(YanDianBi);
 | |
|         //}
 | |
|     }
 | |
|     /// <summary>
 | |
|     /// 工具生成方法
 | |
|     /// </summary>
 | |
|     public async void ToolsShow(GameObject tools)
 | |
|     {
 | |
|         if (Camera.main)
 | |
|         {
 | |
|             Camera.main.fieldOfView = 60;
 | |
|         }
 | |
|         if (FirstPersonController)
 | |
|         {
 | |
|             FirstPersonController.enabled = false;
 | |
|         }
 | |
|         if (temp != null)
 | |
|         {
 | |
|             Destroy(temp.gameObject);
 | |
|         }
 | |
|         temp = Instantiate(tools, Player.transform);
 | |
|         temp.transform.localPosition = new Vector3(0.12f, 0.46f, 0.81f);
 | |
|         UIManager.Instance.toolsItemManager.currentTool = temp;
 | |
|         string name = Filter(temp.name, TempChar);
 | |
|         if (FractionManager.Instance && GlobalFlag.userType == "异常")
 | |
|         {
 | |
|             await FractionManager.Instance.overAsync(6, 10, "测量窃电点");
 | |
|         }
 | |
|         redData = "";
 | |
|         DianFuTex.text = "-";
 | |
|         switch (name)
 | |
|         {
 | |
|             case "万用表":
 | |
|                 WanStopValve.gameObject.SetActive(true);
 | |
|                 QianStopValve.gameObject.SetActive(false);
 | |
|                 GameObject t2 = GameObject.FindGameObjectWithTag("旋转");
 | |
|                 WanStopValve.trans = t2.transform;
 | |
|                 BlackWanYonPos = temp.GetComponent<MultimeterManager>().blackXian.localPosition;
 | |
|                 RedWanYonPos = temp.GetComponent<MultimeterManager>().RedXian.localPosition;
 | |
|                 temp.GetComponent<MultimeterManager>();
 | |
|                 temp.GetComponent<MultimeterManager>().Camera = toolsCam;
 | |
|                 temp.GetComponent<ToolModelClick>().line.SetActive(true);
 | |
|                 break;
 | |
|             case "钳形电流表":
 | |
|                 interactiveEnum = Interactive.QianXing;
 | |
|                 temp.transform.localEulerAngles = new Vector3(90, 180, 0);
 | |
|                 GameObject g1 = GameObject.FindGameObjectWithTag("旋转");
 | |
|                 QianStopValve.trans = g1.transform;
 | |
|                 WanStopValve.gameObject.SetActive(false);
 | |
|                 temp.transform.localPosition = new Vector3(0.13f, 0.46f, 0.6f);
 | |
|                 QianStopValve.gameObject.SetActive(true);
 | |
|                 break;
 | |
|             case "验电笔":
 | |
|                 interactiveEnum = Interactive.YanDian;
 | |
|                 temp.transform.localPosition = new Vector3(0.307f, 0.504f, 0.654f);
 | |
|                 temp.AddComponent<TestPenInteractive>();
 | |
|                 break;
 | |
|             case "相位伏安表":
 | |
|                 temp.transform.localEulerAngles = new Vector3(0, 180, 0);
 | |
|                 temp.AddComponent<AmpereMeter>();
 | |
|                 temp.AddComponent<AmpereMeter>().cam = toolsCam;
 | |
|                 temp.GetComponent<AmpereMeter>().im = XiangWeiUI;
 | |
|                 FuAnBiao = temp;
 | |
|                 break;
 | |
|             default:
 | |
|                 Insta(temp);
 | |
|                 WanStopValve.gameObject.SetActive(false);
 | |
|                 QianStopValve.gameObject.SetActive(false);
 | |
|                 break;
 | |
|         }
 | |
|     }
 | |
|     public string Filter(string str, char[] charsToRemove)
 | |
|     {
 | |
|         return String.Concat(str.Split(charsToRemove.ToArray()));
 | |
|     }
 | |
|     /// <summary>
 | |
|     /// 克隆位置更改
 | |
|     /// </summary>
 | |
|     public void Insta(GameObject GameObj)
 | |
|     {
 | |
|         GameObj.transform.localPosition = new Vector3(Player.transform.position.x + 0.43f, Player.transform.position.y + 0.66f, Player.transform.position.z + 1.5f);
 | |
|     }
 | |
| }
 | |
| /// <summary>
 | |
| /// 后台读的数据
 | |
| /// </summary>
 | |
| [Serializable]
 | |
| public class datas
 | |
| {
 | |
|     public bool state;
 | |
|     public string message;
 | |
|     public data2s data;
 | |
| }
 | |
| [Serializable]
 | |
| public class data2s
 | |
| {
 | |
|     public string isguangfu;
 | |
|     public string jxfs;
 | |
|     public string zhbl;
 | |
| }
 | |
| public enum Interactive
 | |
| {
 | |
|     none,
 | |
|     YanDian,
 | |
|     QianXing,
 | |
|     YanDianOk
 | |
| }
 |