2025-01-23 06:49:08 +00:00
|
|
|
using CodeStage.AntiCheat.ObscuredTypes;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using WebSocketSharp;
|
|
|
|
|
|
|
|
|
|
public class DungeonInfo : MonoBehaviourSingletonTemplate<DungeonInfo>
|
|
|
|
|
{
|
|
|
|
|
public ObscuredFloat m_Time;
|
|
|
|
|
public ObscuredInt m_MaxDieMobCount;
|
|
|
|
|
public Action<float> act_Time;
|
|
|
|
|
public Action<int> act_MobDieCount;
|
|
|
|
|
|
|
|
|
|
ObscuredInt m_DieCount;
|
2025-01-26 18:16:16 +00:00
|
|
|
eDungeon m_Dungeon;
|
2025-01-23 06:49:08 +00:00
|
|
|
|
2025-01-26 03:52:03 +00:00
|
|
|
public void Stop_Dungeon(bool? win)
|
2025-01-23 22:16:18 +00:00
|
|
|
{
|
|
|
|
|
act_Time = null;
|
|
|
|
|
StopAllCoroutines();
|
|
|
|
|
Time.timeScale = 0f;
|
|
|
|
|
Ingame_DungeonResult.Ins.Show_Result(win);
|
|
|
|
|
}
|
2025-01-23 06:49:08 +00:00
|
|
|
IEnumerator Co_Update_Time()
|
|
|
|
|
{
|
|
|
|
|
while (m_Time > 0f)
|
|
|
|
|
{
|
|
|
|
|
yield return null;
|
|
|
|
|
m_Time -= Time.deltaTime;
|
|
|
|
|
m_Time.RandomizeCryptoKey();
|
|
|
|
|
act_Time?.Invoke(m_Time);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 시간 오버
|
2025-01-23 22:16:18 +00:00
|
|
|
Stop_Dungeon(false);
|
2025-01-23 06:49:08 +00:00
|
|
|
}
|
|
|
|
|
void Set_MobDie(int mobid)
|
|
|
|
|
{
|
|
|
|
|
++m_DieCount;
|
|
|
|
|
m_DieCount.RandomizeCryptoKey();
|
|
|
|
|
act_MobDieCount?.Invoke(m_DieCount);
|
|
|
|
|
if (m_DieCount == m_MaxDieMobCount)
|
2025-01-26 18:16:16 +00:00
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-23 06:49:08 +00:00
|
|
|
}
|
2025-01-26 22:53:57 +00:00
|
|
|
void Make_Mob(eSubRol subrol, MonsterTableData mobData, DungeonMapConfigTableData dgData)
|
|
|
|
|
{
|
|
|
|
|
AddrResourceMgr.Ins.LoadObject<GameObject>(mobData.s_MonsterPrefab, handle =>
|
|
|
|
|
{
|
|
|
|
|
var mob = DSUtil.Get_Clone<MobActor>(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;
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-01-23 06:49:08 +00:00
|
|
|
|
2025-01-26 18:16:16 +00:00
|
|
|
public void Start_Dungeon()
|
|
|
|
|
{
|
2025-01-26 22:48:47 +00:00
|
|
|
m_DieCount = 0;
|
|
|
|
|
m_DieCount.RandomizeCryptoKey();
|
|
|
|
|
|
2025-01-26 18:16:16 +00:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-23 06:49:08 +00:00
|
|
|
IEnumerator Co_Update_Mimic()
|
|
|
|
|
{
|
|
|
|
|
yield return new WaitForSeconds(1f);
|
|
|
|
|
StartCoroutine(Co_Update_Time());
|
|
|
|
|
|
2025-01-23 22:16:18 +00:00
|
|
|
var mapdata = MyValue.MyChoiceMapData.Get_MapData();
|
|
|
|
|
var dungeonData = MyValue.MyChoiceMapData.Get_DungeonMapData_orNull();
|
2025-01-23 06:49:08 +00:00
|
|
|
var mimicData = table_monsterlist.Ins.Get_Data_orNull(dungeonData.n_MobID);
|
|
|
|
|
var mobCount = dungeonData.n_MobCount;
|
|
|
|
|
while (mobCount > 0)
|
|
|
|
|
{
|
|
|
|
|
--mobCount;
|
2025-01-26 22:53:57 +00:00
|
|
|
Make_Mob(eSubRol.Mimic, mimicData, dungeonData);
|
2025-01-23 06:49:08 +00:00
|
|
|
yield return new WaitForSeconds(dungeonData.f_MakeGap);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-26 18:16:16 +00:00
|
|
|
|
|
|
|
|
IEnumerator Co_Update_Maze()
|
|
|
|
|
{
|
|
|
|
|
var dgData = MyValue.MyChoiceMapData.Get_DungeonMapData_orNull();
|
|
|
|
|
for (int i = 0; i < dgData.n_MobCount; i++)
|
2025-01-26 22:53:57 +00:00
|
|
|
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);
|
2025-01-26 22:48:47 +00:00
|
|
|
|
|
|
|
|
yield return new WaitForSeconds(1f);
|
|
|
|
|
StartCoroutine(Co_Update_Time());
|
2025-01-26 18:16:16 +00:00
|
|
|
}
|
2025-01-23 06:49:08 +00:00
|
|
|
}
|