using CodeStage.AntiCheat.ObscuredTypes; using System; using System.Collections; using UnityEngine; using WebSocketSharp; public class DungeonInfo : MonoBehaviourSingletonTemplate { public ObscuredFloat m_Time; public ObscuredInt m_MaxDieMobCount; public Action act_Time; public Action act_MobDieCount; ObscuredInt m_DieCount; eDungeon m_Dungeon; public void Stop_Dungeon(bool? win) { act_Time = null; StopAllCoroutines(); Time.timeScale = 0f; Ingame_DungeonResult.Ins.Show_Result(win); } IEnumerator Co_Update_Time() { while (m_Time > 0f) { yield return null; m_Time -= Time.deltaTime; m_Time.RandomizeCryptoKey(); act_Time?.Invoke(m_Time); } // 시간 오버 Stop_Dungeon(false); } void Set_MobDie(int mobid) { ++m_DieCount; m_DieCount.RandomizeCryptoKey(); act_MobDieCount?.Invoke(m_DieCount); if (m_DieCount == m_MaxDieMobCount) { switch (m_Dungeon) { case eDungeon.d1_Mimic: Stop_Dungeon(true); break; case eDungeon.d2_Maze: // 다음 층으로 break; case eDungeon.d3_Nightmare: break; case eDungeon.d4_Wave: break; } } } void Make_Mob(eSubRol subrol, MonsterTableData mobData, DungeonMapConfigTableData dgData) { AddrResourceMgr.Ins.LoadObject(mobData.s_MonsterPrefab, handle => { var mob = DSUtil.Get_Clone(handle.Result); ActorInfo.Ins.Add_Actor(mob, eRole.Mob, dgData.n_SpawnID, mobData.s_MonsterPrefab); mob.Set(true, null, null, dgData.n_SpawnID, false); var rdnpos = DSUtil.Get_RandomPos_onNavMesh(MyValue.MyPC.Get_position(), 10f, 20f); mob.Set(mobData, rdnpos, Set_MobDie, 0); mob.m_SubRole = subrol; }); } public void Start_Dungeon() { m_DieCount = 0; m_DieCount.RandomizeCryptoKey(); m_Dungeon = MyValue.MyChoiceMapData.Get_MapData().e_Dungeon; switch (m_Dungeon) { case eDungeon.d1_Mimic: StartCoroutine(Co_Update_Mimic()); break; case eDungeon.d2_Maze: StartCoroutine(Co_Update_Maze()); break; case eDungeon.d3_Nightmare: break; case eDungeon.d4_Wave: break; } } IEnumerator Co_Update_Mimic() { yield return new WaitForSeconds(1f); StartCoroutine(Co_Update_Time()); var mapdata = MyValue.MyChoiceMapData.Get_MapData(); var dungeonData = MyValue.MyChoiceMapData.Get_DungeonMapData_orNull(); var mimicData = table_monsterlist.Ins.Get_Data_orNull(dungeonData.n_MobID); var mobCount = dungeonData.n_MobCount; while (mobCount > 0) { --mobCount; Make_Mob(eSubRol.Mimic, mimicData, dungeonData); yield return new WaitForSeconds(dungeonData.f_MakeGap); } } IEnumerator Co_Update_Maze() { var dgData = MyValue.MyChoiceMapData.Get_DungeonMapData_orNull(); for (int i = 0; i < dgData.n_MobCount; i++) Make_Mob(eSubRol.None, table_monsterlist.Ins.Get_RandomData(eSubRol.None), dgData); if (MyValue.MyChoiceMapData.n_DungeonLv % 6 == 0) Make_Mob(eSubRol.Boss, table_monsterlist.Ins.Get_RandomData(eSubRol.Boss), dgData); yield return new WaitForSeconds(1f); StartCoroutine(Co_Update_Time()); } }