using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using XFramework; using XFramework.NetOuter; //AB包场景 用于编队行军和修理所展开科目 public class StudentABScene : SceneState { NetSubNameEnum subName; GameObject areaPrefab;//一区九厂预制件 GameObjectPiaker objectPiaker;//物体拾取器 string TerrainName; object subParameter;//科目数据类 /// /// AB包场景 /// /// AB包中的场景名称 /// 科目名称 /// 场景初始化相关参数 public StudentABScene(string sceneName, NetSubNameEnum subName,object sceneParameter) { this.sceneName = sceneName; TerrainName = sceneName;//地形名称=场景名称 this.subName = subName; this.subParameter = sceneParameter; async = true; loadPanel = true; } protected override void SceneLoaded(Scene scene, LoadSceneMode mode) { base.SceneLoaded(scene, mode); StudentOperateRecorder.Instance.StartTiming();//场景加载完成 记录开始时间 EventCenter.Instance.AddEventListener(IconType.areaFlage.ToString(), CreatAreaFlage); EventCenter.Instance.AddEventListener("SyncCreatArea", SyncCreatAreaFlage); EventCenter.Instance.AddEventListener>("CreatTuFaTrigger", CreatTuFa); GameObject.Instantiate( Resources.Load(ResourcesManager.GetPath("Camera"))); switch (subName) { case NetSubNameEnum.编队行军: panelManager.Push(new StudentSub1EditorPanel()); PermissibleArea permissibleArea = GetPermissibleArea(); if (permissibleArea.areaWorldPostion != Vector3.zero) panelManager.ChangePanel("PermissibleArea", permissibleArea); EventCenter.Instance.AddEventListener("ArriveDestination", ArriveDestination);//到达目的地 break; case NetSubNameEnum.修理所展开: //启用VR 启用相机交互逻辑 panelManager.Push(new StudentSub2EditorPanel()); if (GroupLearnHelper.isGroup )//分组训练时 初始化UDP相关逻辑 { CreatSyncEnvironment();// SyncSceneAB syncScene = new SyncSceneAB();//绑定场景同步物体发送/处理逻辑 } //GameObjectCreater.CreateCar() break; default: break; } panelManager.ChangePanel(subParameter); areaPrefab = Resources.Load(ResourcesManager.GetPath("AreaFlag")); } //创建UDP同步环境 和VR人物姿态展示模型 private static void CreatSyncEnvironment() { SyncGOManager.CreateInstance();//创建场景同步管理器 NetUDPManager.Instance.InitUdp($"239.0.0.{GroupLearnHelper.groupNumber}", 8989, 8989, UDPType.Group);//创建UDP网络消息管理器并加入组播 组播端口默认为8989 GameObjectCreater.CreatSyncVRPerson(GroupLearnHelper.otherUser);//创建展示其他VR操作人员的物体 } public override void OnExit() { base.OnExit(); EventCenter.Instance.RemoveEnvetListener(IconType.areaFlage.ToString(), CreatAreaFlage); EventCenter.Instance.RemoveEnvetListener>("CreatTuFaTrigger", CreatTuFa); EventCenter.Instance.RemoveEnvetListener("SyncCreatArea", SyncCreatAreaFlage); } //获取允许摆放区域的相关参数 用于UI初始化 未重新打包ab 使用测试数据 private PermissibleArea GetPermissibleArea() { //GameObject PermissibleBox = GameObject.Find("PermissibleArea"); //if (PermissibleBox == null) // return default(PermissibleArea); //PermissibleArea permissibleArea; //permissibleArea.areaWorldPostion = PermissibleBox.transform.position; //permissibleArea.angle = PermissibleBox.transform.eulerAngles.y; //permissibleArea.areaSize = new Vector2(PermissibleBox.transform.localScale.x, PermissibleBox.transform.localScale.z); PermissibleArea permissibleArea; permissibleArea.areaWorldPostion = new Vector3(659.5f, 245.4f, 6637.1f); permissibleArea.areaSize = new Vector2(90, 250); permissibleArea.angle = 118.38f; return permissibleArea; } //编队行军到达目的地后执行 编队行军只发生在连续训练科目中 private void ArriveDestination() { //SubRecordClass subRecordClass = Game.sceneParameter as SubRecordClass; //if (subRecordClass.isContinuity)//连续训练 //{ panelManager.Pop(); panelManager.Push(new StudentSub2EditorPanel()); panelManager.ChangePanel("continuity", TerrainName); //} //else //{ // SceneSystem.Instance.SetScene(new StudentLoginScene( LoadSceneType.Login)); // // Game.SendMessage("Result", "");//成绩梳理 后续实现 //} TCPManager.Instance.SendSubStage(NetSubStage.其他阶段);//抵达目的地时 发送状态到教员端 关闭可导调的状态 AdjustingManager.Destory();//销毁导调数据管理类 GameObjectManager.Instance.SetAdjustingState(false); EventCenter.Instance.RemoveEnvetListener("ArriveDestination", ArriveDestination);//到达目的地后 移除该事件 } GameObject flagParent; //触发UI图标创建一区九厂定位棋 private void CreatAreaFlage(StudentButtonIcon areaButton) { if (flagParent == null) { flagParent = new GameObject("Areaflage"); } if (objectPiaker == null) { objectPiaker = CameraCtrl.Instance.transform.GetOrAddComponent(); } GameObject areaGO = objectPiaker.GetCurrentPickGO(); if (areaGO == null)//当前没有未完成放置的厂区标记 { areaGO = GameObject.Instantiate(areaPrefab,flagParent.transform); } areaGO.GetComponent().InitFlage(areaButton); objectPiaker.InjectGO(areaGO.GetComponent()); } private void SyncCreatAreaFlage( string areaName,TransGesture trans) { if (flagParent == null) { flagParent = new GameObject("Areaflage"); } GameObject areaGO = GameObject.Instantiate(areaPrefab, flagParent.transform); areaGO.GetComponent().SyncInitFlage(areaName, trans); } GameObject tufaRoot;//突发事件触发器父物体 /// /// 创建突发事件触发器 /// /// private void CreatTuFa(List tuFaDatas) { if (tufaRoot == null) { tufaRoot = new GameObject("TuFaRoot"); tufaRoot.transform.SetParent(GameObjectManager.Instance.transform); } GameObjectCreater.CreateTufaTrigger(tuFaDatas, tufaRoot.transform); } }