using Cal.DataTable; using ET.EventType; using ET; using System; using System.Collections.Generic; using UnityEngine; namespace ET { public class ChangeMapEvent : AEvent { public override async ETTask Run(ChangeMap args) { try { int sceneId = args.mapId / 100; int mapLayer = args.mapId % 100; Vector3 pos = args.pos; var zoneScene = args.zoneScene; Game.EventSystem.Publish_Sync(new ET.EventType.TranslateSceneStart { isAutoEnd = false }); try { //相机 Sys_Scene cameraPosition = Sys_SceneCategory.Instance.Get(sceneId); Unit unit = zoneScene.GetComponent().MyUnit; CameraComponent cameraComponent = unit.GetComponent(); cameraComponent.ChangeRange(cameraPosition); } catch (Exception e) { Log.Error(e); } await UnitySceneComponent.Instance.LoadSceneAsync(args.zoneScene, sceneId, pos); await TimerComponent.Instance.WaitAsync(500); //关闭所有UI FUIHelper.CloseAllWindows(); //地图名字 if ((FUIComponent.Instance.Get(FUIPackage.Common_MainUI) is FUI_MainUI mainUi)) { Sys_Scene sys_Scene = DataTableHelper.Get(sceneId); if (sys_Scene == null) throw new Exception($"sysScene == null where Id = {sceneId}"); else { mainUi.m_txtMapName.text = $"{sys_Scene.Desc}{(sys_Scene.Layers > 1 ? $"——{mapLayer}层" : "")}"; } } //清空玩家列表 MainUI.ClearUnitList(); foreach (Unit u in zoneScene.GetComponent().GetAll()) { try { switch (u.UnitType) { case UnitType.None: break; case UnitType.Player: case UnitType.OtherPlayer: case UnitType.TeamMember: ClientUnitCharacter clientUnitCharacter = ClientUnitCharacterComponent.Instance.Get(u.Id); MainUI.AddUnit(clientUnitCharacter.Id, clientUnitCharacter.Job, clientUnitCharacter.NickName); break; case UnitType.Monster: case UnitType.Enermy: break; case UnitType.NPC: NPCBase nPCBase = NPCBaseCategory.Instance.Get(u.ConfigId); MainUI.AddUnit(u.Id, "NPC", nPCBase.Name); break; case UnitType.MapMonster: break; case UnitType.TransPoint: MainUI.AddUnit(u.Id, "传送门", ""); break; case UnitType.SceneUnit: MainUI.AddUnit(u.Id, "交互", ""); break; break; default: break; } } catch (Exception e) { Log.Error(e); } } } catch (Exception e) { Log.Error(e); } Game.EventSystem.Publish_Sync(new ET.EventType.TranslateSceneEnd { }); } } }