using SC.XR.Unity; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScenesManager { public enum mType { LogoInt = 1, LoginInt = 2, ShowChoose = 3, ShowXunJian = 4, ShowRTC = 5, ShowDevice = 6, Navigationing = 8, officeInt = 30, RoomInt = 40, publicInt = 50, } public void showOffice(SceneType stype) { if(dlglist.ContainsKey(mType.officeInt.GetHashCode())) for (int i = 0; i < dlglist[mType.officeInt.GetHashCode()].Count; i++) { if (stype == dlglist[mType.officeInt.GetHashCode()][i]._sceneType) { dlglist[mType.officeInt.GetHashCode()][i].gameObject.SetActive(true); MonoBehaviour alist = dlglist[mType.officeInt.GetHashCode()][i].GetComponent(); Type t = Type.GetType(alist.name); System.Reflection.MethodInfo md = t.GetMethod("initShow"); if (md != null) { md.Invoke(alist, null); } } else { dlglist[mType.officeInt.GetHashCode()][i].gameObject.SetActive(false); } } } public enum SceneType { GameStartLogo = 10001, ShowLogin = 20001, ShowChoose = 30001, ShowXunJian = 40001, ShowXJ = 41001, ShowDH = 41002, ShowRTC = 50001, ShowRTCRoomMain = 51002, ShowRTCHistory = 51003, //ShowZhiDao = 50001, ShowDevice = 60001, // 设备基础信息 ShowBasicDevice = 61001, // 设备基础详情 DeviceDetails = 61002, // 设备详情 Navigationing = 80001, // 导航中 ShowOffice = 300001, CreateRoom = 300101, JoinRoom = 300102, UserSystem = 300103, RemoteSystem = 300104, OfficeWindow = 300105, ShowRoom = 400001, RoomMain = 400101, RoomOtherUser = 400102, RoomInfo = 400103, RoomFile = 400104, PopPublic = 500001, PopPeerView = 500101, PopUpInfo = 500101, PopCall = 500102, } private static ScenesManager instance; public static ScenesManager Instance { get { if (instance == null) { instance = new ScenesManager(); } return instance; } } public List windows = new List(); public Dictionary> dlglist = new Dictionary>(); public void initWindow(GameObject window) { SceneInfo sceneInfo = window.AddComponent(); SceneType stp = (SceneType)System.Enum.Parse(typeof(SceneType), window.name.Split('(')[0]); sceneInfo.setType(stp); int codeint = stp.GetHashCode() / 10000; if (stp.GetHashCode() - (codeint * 10000) == 1) { windows.Add(sceneInfo); // window.SetActive(false); } else { if (dlglist.ContainsKey(codeint)) { List dlg = dlglist[codeint]; dlg.Add(sceneInfo); dlglist[codeint] = dlg; } else { List dlg = new List(); dlg.Add(sceneInfo); dlglist.Add(codeint, dlg); } } } public void initRoom() { Debug.Log("HJJLANGCHAORTC " + mType.RoomInt.GetHashCode()); for (int i = 0; i < dlglist[mType.RoomInt.GetHashCode()].Count; i++) { MonoBehaviour alist = dlglist[mType.RoomInt.GetHashCode()][i].GetComponent(); Debug.Log("HJJLANGCHAORTC " + alist.name); Type t = Type.GetType(alist.name); System.Reflection.MethodInfo md = t.GetMethod("initShow"); if (md != null) { md.Invoke(alist, null); } } } public void showWindow(SceneType sceneType) { for (int i = 0; i < windows.Count; i++) { int codeint = windows[i]._sceneType.GetHashCode() / 10000; if (windows[i]._sceneType == sceneType || codeint == mType.publicInt.GetHashCode()) { windows[i].gameObject.SetActive(true); MonoBehaviour alist = windows[i].GetComponent(); Type t = Type.GetType(alist.name); System.Reflection.MethodInfo md = t.GetMethod("initShow"); if (md != null) { md.Invoke(alist, null); } } else { windows[i].gameObject.SetActive(false); } } } public void initPopUp() { // for (int i = 0; i < dlglist[mType.publicInt.GetHashCode()].Count; i++) // { // dlglist[mType.publicInt.GetHashCode()][i].gameObject.SetActive(false); // } } private PopPublic _popPublic; public PopPublic popPublic { get { if (!_popPublic) { for (int i = 0; i < dlglist[mType.publicInt.GetHashCode()].Count; i++) { PopPublic ppc = dlglist[mType.publicInt.GetHashCode()][i].GetComponent(); if (ppc) _popPublic = ppc; } } return _popPublic; } } public void showPop() { popPublic.gameObject.SetActive(true); } }