using System; using System.Collections; using System.Collections.Generic; using GameFramework; using GameFramework.Event; using GameFramework.Fsm; using GameFramework.Procedure; using GameFramework.Resource; using UnityEngine; using UnityAsync; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; using UnityGameFramework.Runtime; using WaitUntil = UnityAsync.WaitUntil; public class ProcedureModelView : ProcedureBase { private int studyCenterFormId = -99; private int baseStudyFormId = -99; private int trainStudyFormId = -99; private int examStudyFormId = -99; private int coolTrainStudyFormId = -99;//冷却系统 private int eleTrainStudyFormId = -99;//冷却系统 private int netTrainStudyFormId = -99;//网络系统 private int appTrainStudyFormId = -99;//App系统 private int obTrainStudyFormId = -99;//App系统 private FocusModelViewCtrl _focusModelViewCtrl; private int currentGameMode= 0; private int currentBaseStudyType = 0; private int currentTrainStudyType = -1; protected override void OnInit(IFsm procedureOwner) { base.OnInit(procedureOwner); } protected override void OnEnter(IFsm procedureOwner) { base.OnEnter(procedureOwner); GameMain.Event.Subscribe(ChangeGameModeTypeEvent.EventId, ChangeGameMode); GameMain.Event.Subscribe(ChangeBaseStudyTypeEvent.EventId,ChangeBaseStudy); GameMain.Event.Subscribe(Change3DTopoTypeEvent.EventId, Change3DTopo); GameMain.Event.Subscribe(ChangeEleTopoTypeEvent.EventId, ChangeElePar); GameMain.Event.Subscribe(ChangeTrainStudyTypeEvent.EventId, ChangeTrainStudy); GameMain.Event.Subscribe(LoginResultEvent.EventId,GotoLoginIn); studyCenterFormId = GameMain.UI.OpenUIForm("StudyCenter","Base"); } protected override void OnUpdate(IFsm procedureOwner, float elapseSeconds, float realElapseSeconds) { base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds); //RotationCamera(); } private void ChangeGameMode(object sender, GameEventArgs e) { ChangeGameModeTypeEvent args = (ChangeGameModeTypeEvent)e; if (args.type != currentGameMode) { //关掉其他模块的UI switch (currentGameMode) { case 0: if (baseStudyFormId != -99) { GameMain.UI.CloseUIForm(baseStudyFormId); baseStudyFormId = -99; } break; case 1: if (trainStudyFormId != -99) { GameMain.UI.CloseUIForm(trainStudyFormId); trainStudyFormId = -99; } break; case 2: if (examStudyFormId != -99) { GameMain.UI.CloseUIForm(examStudyFormId); examStudyFormId = -99; } break; case 3: if (netTrainStudyFormId != -99) { GameMain.UI.CloseUIForm(netTrainStudyFormId); netTrainStudyFormId = -99; } break; case 4: if (coolTrainStudyFormId != -99) { GameMain.UI.CloseUIForm(coolTrainStudyFormId); coolTrainStudyFormId = -99; } break; case 5: if (eleTrainStudyFormId != -99) { GameMain.UI.CloseUIForm(eleTrainStudyFormId); eleTrainStudyFormId = -99; } break; case 6: if (appTrainStudyFormId != -99) { GameMain.UI.CloseUIForm(appTrainStudyFormId); appTrainStudyFormId = -99; } break; case 7: if (obTrainStudyFormId != -99) { GameMain.UI.CloseUIForm(obTrainStudyFormId); obTrainStudyFormId = -99; } break; } switch (args.type) { case 0: baseStudyFormId = GameMain.UI.OpenUIForm("BaseStudy", "Normal"); //GameMain.Event.Fire(this,ChangeBaseStudyTypeEvent.Create(GameMain.UI.GetUIForm(baseStudyFormId).GetComponent().CurrentBaseStudyType)); GameMain.Event.Fire(this,ChangeBaseStudyTypeEvent.Create(0)); break; case 1: trainStudyFormId = GameMain.UI.OpenUIForm("TrainStudy", "Normal"); GameMain.Event.Fire(this,ChangeTrainStudyTypeEvent.Create(0)); break; case 2: examStudyFormId = GameMain.UI.OpenUIForm("ExamStudy", "Normal"); GameMain.Event.Fire(this, OnBeginExamEvent.Create(UserData.token)); break; case 3: netTrainStudyFormId = GameMain.UI.OpenUIForm("NetTrainStudy", "Normal"); GameMain.Event.Fire(this,ChangeTrainStudyTypeEvent.Create(1)); break; case 4: coolTrainStudyFormId = GameMain.UI.OpenUIForm("CoolTrainStudy", "Normal"); GameMain.Event.Fire(this,ChangeTrainStudyTypeEvent.Create(3)); break; case 5: eleTrainStudyFormId = GameMain.UI.OpenUIForm("EleTrainStudy", "Normal"); GameMain.Event.Fire(this, ChangeTrainStudyTypeEvent.Create(2)); break; case 6: appTrainStudyFormId = GameMain.UI.OpenUIForm("AppTrainStudy", "Normal"); GameMain.Event.Fire(this, ChangeTrainStudyTypeEvent.Create(6)); break; case 7: obTrainStudyFormId = GameMain.UI.OpenUIForm("ObTrainStudy", "Normal"); GameMain.Event.Fire(this, ChangeTrainStudyTypeEvent.Create(5)); break; } currentGameMode = args.type; } } private void GotoLoginIn(object sender, GameEventArgs e) { LoginResultEvent args = (LoginResultEvent)e; switch (args.currentResult) { case LoginResultEvent.LoginResult.success: baseStudyFormId = GameMain.UI.OpenUIForm("BaseStudy", "Normal"); currentGameMode = 0; SceneManager.LoadScene("Machine"); currentBaseStudyType = 0; currentTrainStudyType = -1; break; case LoginResultEvent.LoginResult.failure: break; } } private void ChangeBaseStudy(object sender, GameEventArgs e) { ChangeBaseStudyTypeEvent args = (ChangeBaseStudyTypeEvent)e; switch (args.type) { case 0: if (SceneManager.GetActiveScene().name != "Machine") SceneManager.LoadScene("Machine"); break; case 1: if (SceneManager.GetActiveScene().name != "Topology") SceneManager.LoadScene("Topology"); GameMain.Event.Fire(this, Change3DTopoTypeEvent.Create(GameMain.UI.GetUIForm(baseStudyFormId).GetComponent().CurrentPoloType)); break; case 2: if (SceneManager.GetActiveScene().name != "SXZX") SceneManager.LoadScene("SXZX"); break; case 3: if (SceneManager.GetActiveScene().name != "Machine") SceneManager.LoadScene("Machine"); break; } } private async void Change3DTopo(object sender, GameEventArgs e) { Change3DTopoTypeEvent args = (Change3DTopoTypeEvent)e; GameObject particle = GameObject.FindGameObjectWithTag("Particle"); if (particle != null) { for (int i = 0; i < particle.transform.childCount; i++) { particle.transform.GetChild(i).gameObject.SetActive(false); } particle.transform.GetChild(args.type).gameObject.SetActive(true); } else { await new WaitUntil(() => { return SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Topology"); }); particle = GameObject.FindGameObjectWithTag("Particle"); if (particle != null) { for (int i = 0; i < particle.transform.childCount; i++) { particle.transform.GetChild(i).gameObject.SetActive(false); } particle.transform.GetChild(args.type).gameObject.SetActive(true); } } } private async void ChangeElePar(object sender, GameEventArgs e) { ChangeEleTopoTypeEvent args = (ChangeEleTopoTypeEvent)e; GameObject particle = GameObject.FindGameObjectWithTag("Particle").transform.GetChild(2).gameObject; if (particle != null) { for (int i = 0; i < particle.transform.childCount; i++) { particle.transform.GetChild(i).gameObject.SetActive(false); } particle.transform.GetChild(args.type).gameObject.SetActive(true); } else { await new WaitUntil(() => { return SceneManager.GetActiveScene() == SceneManager.GetSceneByName("Topology"); }); GameObject particle2 = GameObject.FindGameObjectWithTag("Particle").transform.GetChild(2).gameObject; if (particle2 != null) { for (int i = 0; i < particle2.transform.childCount; i++) { particle2.transform.GetChild(i).gameObject.SetActive(false); } particle2.transform.GetChild(args.type).gameObject.SetActive(true); } } } private void ChangeTrainStudy(object sender, GameEventArgs e) { ChangeTrainStudyTypeEvent args = (ChangeTrainStudyTypeEvent)e; switch (args.type) { case 0: if (SceneManager.GetActiveScene().name != "TrainStudy") SceneManager.LoadScene("TrainStudy"); break; case 1: if (SceneManager.GetActiveScene().name != "TrainStudy2") SceneManager.LoadScene("TrainStudy2"); break; case 2: if (SceneManager.GetActiveScene().name != "TrainStudy4_1") SceneManager.LoadScene("TrainStudy4_1"); break; case 3: if (SceneManager.GetActiveScene().name != "TrainStudy3_1") SceneManager.LoadScene("TrainStudy3_1"); break; case 5: if (SceneManager.GetActiveScene().name != "TrainStudy5_1") SceneManager.LoadScene("TrainStudy5_1"); break; case 6: if (SceneManager.GetActiveScene().name != "TrainStudy6") SceneManager.LoadScene("TrainStudy6"); break; } } protected override void OnLeave(IFsm procedureOwner, bool isShutdown) { base.OnLeave(procedureOwner, isShutdown); GameMain.Event.Unsubscribe(ChangeGameModeTypeEvent.EventId, ChangeGameMode); GameMain.Event.Unsubscribe(ChangeBaseStudyTypeEvent.EventId,ChangeBaseStudy); GameMain.Event.Unsubscribe(Change3DTopoTypeEvent.EventId, Change3DTopo); GameMain.Event.Unsubscribe(ChangeEleTopoTypeEvent.EventId, ChangeElePar); GameMain.Event.Unsubscribe(ChangeTrainStudyTypeEvent.EventId, ChangeTrainStudy); GameMain.Event.Unsubscribe(LoginResultEvent.EventId, GotoLoginIn); //暂时没有切流程的先不写关闭全部UI // GameMain.UI.CloseUIForm(baseStudyFormId); // GameMain.UI.CloseUIForm(studyCenterFormId); // GameMain.UI.CloseUIForm(trainStudyFormId); } private void InitViewCtrl(string assetName, object asset, float duration, object userData) { Debug.Log(duration); } private void Fail(string assetName, LoadResourceStatus status, string errorMessage, object userData) { Debug.Log($"{errorMessage}"); } }