using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class DataDock : MonoSingleton { #region 私有字段 /// /// 是否使用多场景加载 /// private bool m_IsLoadMultiScene = false; /// /// 操作类型配置数据 /// private OperationTypeConfig m_OperationTypeConfig; /// /// 操作类型 /// private string m_OperationType; /// /// 构建的场景数量 /// private int m_BuildSettingsNumber = 0; /// /// 记录所有构建场景的信息 /// private Dictionary m_RecordAllBuildSceneInfos = new Dictionary(); /// /// 记录需要调整场景的名称 /// private string m_RecordSceneName; #endregion #region 公开字段 /// /// 软件名称 /// public string m_SoftName; /// /// 连接IP /// public string m_ConnectIP; #endregion void Start() { Init(false); } /// /// 初始化 /// /// 是否加载多场景 public void Init(bool _isLoadMultiScene = true) { m_RecordSceneName = string.Empty; m_IsLoadMultiScene = _isLoadMultiScene; InitOperationConfig(); InitStartupData(); } /// /// 初始化启动数据 /// private void InitStartupData() { string[] args = Environment.GetCommandLineArgs(); Debug.Log(args[1]); if (args.Length < 2) { return; } //模拟数据 //string simulationData = "5c7fd0eaf63d8ecbd466043657c87d09ffeb09c8/Practice/高压侧套管更换检修处理/Chiva/4000801390/47.92.0.243:15155"; //string[] tmpArgs = simulationData.Split('/'); //截断 string tmpArgsDecrypt = args[1].Decrypt("chivatech"); string[] tmpArgs = tmpArgsDecrypt.Split('/'); string tmpMode = tmpArgs[1]; m_OperationType = tmpArgs[1]; string tmpCourseName = tmpArgs[2]; string tmpPhoneNumber = tmpArgs[4]; string tmpAddress = tmpArgs[5]; // 文件各种:手机号/课程名/模式/地址 //string tmpPhoneNumber = tmpArgs[0]; //string tmpCourseName = tmpArgs[1]; //string tmpMode = tmpArgs[2]; //string tmpAddress = tmpArgs[3]; GrpcChannelContronller.Instance.StartClient(tmpAddress); GetInfoaboutSpecifiedUser(tmpPhoneNumber); SetOperationMode(tmpMode); GlobalConfig.m_SelectDevice = tmpCourseName; if (m_IsLoadMultiScene) { StartCoroutine(LazyLoadProcess()); } else { SceneManager.LoadSceneAsync(2, LoadSceneMode.Single); } } /// /// 获取指定用户信息 /// /// private void GetInfoaboutSpecifiedUser(string _phoneNumber) { UserProxy userProxy = DAL.Instance.Get(); SearchInfoResponse tmpResponse = GrpcChannelContronller.Instance.client.StudentInfoSearch(new SearchRequest() { PhoneNumber = _phoneNumber }); if (tmpResponse.Result) { userProxy.userInfo.userName = tmpResponse.StudentInfos[0].Name; userProxy.userInfo.phoneNumber = _phoneNumber; } } /// /// 初始化操作相关配置文件 /// private void InitOperationConfig() { m_OperationTypeConfig = JsonDataAnalyze.GetOperationConfigData(); } /// /// 设置操作模式 /// /// private void SetOperationMode(string _mode) { switch (_mode) { case "学习": GlobalData.m_CurrentOperationMode = OperationMode.Learn; break; case "练习": GlobalData.m_CurrentOperationMode = OperationMode.Practice; break; case "考核": GlobalData.m_CurrentOperationMode = OperationMode.Exam; break; case "Learn": GlobalData.m_CurrentOperationMode = OperationMode.Learn; break; case "Practice": GlobalData.m_CurrentOperationMode = OperationMode.Practice; break; case "Exam": GlobalData.m_CurrentOperationMode = OperationMode.Exam; break; } } /// /// 延迟加载处理 /// /// private IEnumerator LazyLoadProcess() { yield return new WaitForSeconds(0.5f); m_BuildSettingsNumber = SceneManager.sceneCountInBuildSettings; for (int i = 0; i < m_BuildSettingsNumber; i++) { if (!m_RecordAllBuildSceneInfos.ContainsKey(i)) { // 获取完整路径 string buildPath = SceneUtility.GetScenePathByBuildIndex(i); if (!string.IsNullOrEmpty(buildPath)) { string buildSceneName = buildPath.Substring(buildPath.LastIndexOf('/') + 1).Split('.')[0]; m_RecordAllBuildSceneInfos.Add(i, buildSceneName); } } } foreach (var item in m_RecordAllBuildSceneInfos) { string[] tmpInfo = item.Value.Split('_'); //判定类型是否相同 if (m_OperationType.Contains(tmpInfo[tmpInfo.Length - 1])) { m_RecordSceneName = item.Value; } } if (!string.IsNullOrEmpty(m_RecordSceneName)) { SceneManager.LoadSceneAsync(m_RecordSceneName, LoadSceneMode.Single); } } }