using UnityEngine; using Snxxz.UI; using System.Collections.Generic; using TableConfig; using System.Collections; public class DungeonStage : Stage { public static Dictionary> s_MapAreaDict; public static MapType CurrentMapType; HeavenBattleModel _heavenModel; HeavenBattleModel heavenModel { get { return _heavenModel ?? (_heavenModel = ModelCenter.Instance.GetModel()); } } public override void Initialize() { base.Initialize(); s_MapAreaDict = new Dictionary>(); CameraController.Instance.CameraObject.enabled = true; //屏蔽场景npc资源预加载逻辑,以获得更快的场景切换速度,资源压缩使用LZ4才行。 //AssetPreLoad.Instance.PreLoadNPC(PlayerDatas.Instance.baseData.MapID); SelectionManager.Initiailze(); var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(); SoundPlayer.Instance.UnLoadMusic(mapResConfig.Music); SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music); // 做一些前期战斗的预加载 if (!PreFightMission.Instance.IsFinished()) { PreFightMission.Instance.PreLoad(); } } protected override void OnStageLoadFinish() { base.OnStageLoadFinish(); GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero != null) { _hero.CurMapArea = 0; _hero.aiHandler.PriorityNpcID = 0; _hero.ExitArea((int)MapArea.E_Type.Boss); _hero.ExitArea((int)MapArea.E_Type.Safe); _hero.ExitArea((int)MapArea.E_Type.RebornSafe); _hero.ExitArea((int)MapArea.E_Type.Dazuo); _hero.ExitArea((int)MapArea.E_Type.Alliance); _hero.EnterArea((int)MapArea.E_Type.Normal); CameraController.Instance.ResetOriginal(); } var _instance = TipPanel.Instance; WindowCenter.Instance.Open(true); GA_Hero.s_MapSwitching = false; GA_Hero.forceAutoFight = false; if (PreFightMission.Instance.IsFinished() == false) { PreFightMission.Instance.Start(); } WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); CheckDungeonResult(); CreateMapTransfer(); CreateMapArea(); var mapConfig = ConfigManager.Instance.GetTemplate(PlayerDatas.Instance.baseData.MapID); var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(); CurrentMapType = (MapType)mapConfig.MapFBType; switch (CurrentMapType) { case MapType.OpenCountry: break; default: OnEnterNormalDungeon(); break; } PlayerDatas.Instance.RequestWorldTick(); if (DTCB105_tagMCPlayerWallow.forceOffLine) { WindowCenter.Instance.Open(); } } public override void UnInitialize() { base.UnInitialize(); if (s_MapAreaDict != null) { s_MapAreaDict.Clear(); s_MapAreaDict = null; } if (PlayerDatas.Instance.hero != null) { PlayerDatas.Instance.hero.atkBossID = 0; PlayerDatas.Instance.hero.currentBossArea = null; } if (CameraController.Instance != null) { CameraController.Instance.StopZoom(); CameraController.Instance.StopShake(); } PreFightMission.Instance.Destroy(); GAMgr.Instance.UnInit(); DropItemManager.ReleaseAll(); SFXPlayUtility.Instance.Unitialize(); FakeDungeonUtility.Instance.Reset(); } protected override void OnUpdate() { base.OnUpdate(); StatusMgr.Instance.DoUpdate(); GAMgr.Instance.DoUpdate(); FlyObjectManager.Instance.Update(); DropItemManager.Update(); if (PreFightMission.Instance.IsFinished() == false) { PreFightMission.Instance.Update(); } } protected override void OnFixedUpdate() { base.OnFixedUpdate(); GAMgr.Instance.DoFixedUpdate(); } protected override void OnLateUpdate() { base.OnLateUpdate(); GAMgr.Instance.DoLateUpdate(); } private void OnEnterNormalDungeon() { WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); WindowCenter.Instance.Open(); var mapId = PlayerDatas.Instance.baseData.MapID; switch (mapId) { case 31110: var teamModel = ModelCenter.Instance.GetModel(); if (teamModel.myTeam.inTeam && !teamModel.myTeam.iamCaptainer) { break; } var cfg = ConfigManager.Instance.GetTemplate(PlayerDatas.Instance.baseData.realmLevel); if (cfg != null) { if (cfg.IsBigRealm != 1) { WindowCenter.Instance.Open(); } } break; case 31080: { if (!WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Open(); } } break; case 31150: if (!WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Open(); } break; case TreasureModel.TREASURE_MAPID: WindowCenter.Instance.Open(); break; case DemonJarModel.DEMONJAR_MAPID: case 31140: WindowCenter.Instance.Open(); break; case FairyLeagueModel.FAIRY_LEAGUE_DUNGEON: SnxxzGame.Instance.StartCoroutine(Co_EnterDungeon(mapId)); break; case HeavenBattleModel.HEAVEBATTLE_MAPID: WindowCenter.Instance.CloseImmediately(); WindowCenter.Instance.CloseImmediately(); heavenModel.SetBattleStart(); break; case 31170: WindowCenter.Instance.CloseImmediately(); break; default: break; } // 等待处理开启自动战斗 DungeonModel _dungeonModel = ModelCenter.Instance.GetModel(); if (PlayerDatas.Instance.baseData.MapID == 52020 || PlayerDatas.Instance.baseData.MapID == 52010) { _dungeonModel.updateMissionEvent += HandleAutoFight; } else { _dungeonModel.dungeonBeginCoolDownEndEvent += HandleAutoFight; } } private void HandleAutoFight() { DungeonModel _dungeonModel = ModelCenter.Instance.GetModel(); _dungeonModel.dungeonBeginCoolDownEndEvent -= HandleAutoFight; _dungeonModel.updateMissionEvent -= HandleAutoFight; int _dgDataID = _dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); var dungeonOpen = ConfigManager.Instance.GetTemplate(_dgDataID); if (dungeonOpen != null) { if (dungeonOpen.DoFight == 1) { GA_Hero.forceAutoFight = true; PlayerDatas.Instance.hero.Behaviour.StartHandupAI(); } } } private void CreateMapTransfer() { // 创建传送点 var _dict = ConfigManager.Instance.GetAllValues(); foreach (var _item in _dict) { if (_item.OriginalMapID != PlayerDatas.Instance.baseData.MapID) { continue; } float _radius = _item.TransportDiameter * .5f; GameObject _transport = new GameObject(); if (_item.PerformID != 0) { SFXController _controller = SFXPlayUtility.Instance.Play(_item.PerformID, Vector3.zero, Vector3.forward); if (_controller) { _transport = _controller.gameObject; _controller.duration = 0; } } #if UNITY_EDITOR _transport.name = "MapTrigger_" + _item.TransportID; #endif _transport.gameObject.layer = LayerUtility.MapTrigger; Vector3 _position = new Vector3(_item.OriginalPosX * .5f, 100, _item.OriginalPosY * .5f); RaycastHit _hit; if (Physics.Raycast(_position, Vector3.down, out _hit, 200, LayerUtility.WalkbleMask)) { _position = _hit.point; _transport.transform.position = _position; } CapsuleCollider _collider = _transport.AddMissingComponent(); _collider.radius = _radius; _collider.height = 10; _collider.isTrigger = true; Renderer _renderer = _transport.GetComponent(); if (_renderer) { Destroy(_renderer); } MapTransfer _maptransfer = _transport.AddMissingComponent(); _maptransfer.transportModel = _item; _maptransfer.TransportID = _item.TransportID; } } private void CreateMapArea() { var _dict = ConfigManager.Instance.GetAllValues(); List _list = null; MapArea _areaMono; foreach (var _area in _dict) { if (mapId.Equals(_area.MapID) == false) { continue; } _areaMono = MapArea.CreateMapArea(_area); if (s_MapAreaDict.TryGetValue((MapArea.E_Type)_area.AreaName, out _list) == false) { _list = new List(); s_MapAreaDict.Add((MapArea.E_Type)_area.AreaName, _list); } _list.Add(_areaMono); } } private void CheckDungeonResult() { MapConfig _mapCfg = ConfigManager.Instance.GetTemplate(PlayerDatas.Instance.baseData.MapID); if (_mapCfg.MapFBType != 0) { return; } var dungeonResult = ModelCenter.Instance.GetModel().dungeonResult; if (dungeonResult.dataMapID == 31160) { StartCoroutine(Co_OpenSettleWin(dungeonResult.dataMapID)); } } IEnumerator Co_OpenSettleWin(int _mapId) { yield return null; yield return null; switch (_mapId) { case 31160: WindowCenter.Instance.Open(); break; } } IEnumerator Co_EnterDungeon(int _mapId) { yield return null; yield return null; switch (_mapId) { case FairyLeagueModel.FAIRY_LEAGUE_DUNGEON: //var _fairyLeagueModel = ModelCenter.Instance.GetModel(); //if (_fairyLeagueModel.IsAlreadyBattleGuide()) //{ // break; //} //ConfirmCancel.ShowFairyLeagueGuide((bool _guide) => //{ // if (_guide) // { // WindowCenter.Instance.Open(); // } //}); //_fairyLeagueModel.SetBattleGuide(); break; } } }