using System.Collections; using System.Collections.Generic; using BehaviorDesigner.Runtime; using MoleMole.Config; using UnityEngine; using UnityEngine.UI; namespace MoleMole { public class MonoDebugPanel : MonoBehaviour { private enum MonsterColType { CATEGORY = 0, NAME = 1, TYPE = 2 } private int monsterNumber = 1; private int monsterLevel = 1; private uint uniqueMonsterID; private bool isElite; private bool isStationary; private float toggleCategoryListPanelOriginHeight; private float toggleNameListPanelOriginHeight; private float toggleTypeListPanelOriginHeight; private List _selectedMonsterCategoryList; private List _selectedMonsterNameList; private List _selectedMonsterTypeList; private string _selectedMonsterCategory; private string _selectedMonsterName; private string _selectedMonsterType; private List _monsterMetaDataList; private Dictionary avatarMaxHPDict; private Dictionary avatarMaxSPDict; private void Awake() { avatarMaxHPDict = new Dictionary(); avatarMaxSPDict = new Dictionary(); } private void Start() { } private void Update() { } public void OnShowPanelButtonClick() { SetupView(); base.transform.gameObject.SetActive(true); } public void OnConfirmButtonClick() { _selectedMonsterCategoryList.Clear(); _selectedMonsterNameList.Clear(); _selectedMonsterTypeList.Clear(); string text = base.transform.Find("ConfirmPanel/MonsterNumber/Text").GetComponent().text; if (text == string.Empty) { text = "1"; } if (!int.TryParse(text, out monsterNumber)) { monsterNumber = 1; } string text2 = base.transform.Find("ConfirmPanel/MonsterLevel/Text").GetComponent().text; if (text2 == string.Empty) { text2 = "1"; } if (!int.TryParse(text2, out monsterLevel)) { monsterNumber = 1; } string text3 = base.transform.Find("ConfirmPanel/UniqueID/Text").GetComponent().text; if (text3 == string.Empty) { text3 = "0"; } if (!uint.TryParse(text3, out uniqueMonsterID)) { uniqueMonsterID = 0u; } isElite = base.transform.Find("ConfirmPanel/EliteToggle").GetComponent().isOn; if (uniqueMonsterID != 0 || (!string.IsNullOrEmpty(_selectedMonsterCategory) && !string.IsNullOrEmpty(_selectedMonsterName) && !string.IsNullOrEmpty(_selectedMonsterType))) { Vector3 xZPosition = Singleton.Instance.GetLocalAvatar().XZPosition; for (int i = 0; i < monsterNumber; i++) { uint runtimeID = Singleton.Instance.CreateMonster(_selectedMonsterName, _selectedMonsterType, monsterLevel, true, xZPosition, Singleton.Instance.GetNextRuntimeID(4), isElite, uniqueMonsterID); if (isElite) { MonsterActor actor = Singleton.Instance.GetActor(runtimeID); if (_selectedMonsterCategory == "DeadGal" || _selectedMonsterCategory == "Ulysses" || _selectedMonsterCategory == "Robot") { actor.abilityPlugin.AddAbility(AbilityData.GetAbilityConfig("Elite_EliteShield", _selectedMonsterName)); } } } isStationary = base.transform.Find("ConfirmPanel/MonsterStationaryToggle").GetComponent().isOn; if (isStationary) { OnMonsterStationaryToggleValueChanged(isStationary); } } base.transform.gameObject.SetActive(false); } public void OnKillAllMonsterButtonClick() { MonsterActor[] actorByCategory = Singleton.Instance.GetActorByCategory(4); foreach (MonsterActor monsterActor in actorByCategory) { if ((bool)monsterActor.isAlive) { monsterActor.ForceKill(); } } Singleton.Instance.useDebugFunction = true; } private void ClearMonsterCol(MonsterColType colType) { ClearMonsterColData(colType); ClearMonsterColItem(colType); } private void ClearMonsterColData(MonsterColType colType) { switch (colType) { case MonsterColType.CATEGORY: _selectedMonsterCategoryList.Clear(); _selectedMonsterCategory = string.Empty; break; case MonsterColType.NAME: _selectedMonsterNameList.Clear(); _selectedMonsterName = string.Empty; break; case MonsterColType.TYPE: _selectedMonsterTypeList.Clear(); _selectedMonsterType = string.Empty; break; } } private void ClearMonsterColItem(MonsterColType colType) { switch (colType) { case MonsterColType.CATEGORY: { Transform transform2 = base.transform.Find("MonsterCategoryListPanel/MonsterToggleListPanel"); for (int j = 0; j < transform2.childCount; j++) { Object.Destroy(transform2.GetChild(j).gameObject); } break; } case MonsterColType.NAME: { Transform transform3 = base.transform.Find("MonsterNameListPanel/MonsterToggleListPanel"); for (int k = 0; k < transform3.childCount; k++) { Object.Destroy(transform3.GetChild(k).gameObject); } break; } case MonsterColType.TYPE: { Transform transform = base.transform.Find("MonsterTypeListPanel/MonsterToggleListPanel"); for (int i = 0; i < transform.childCount; i++) { Object.Destroy(transform.GetChild(i).gameObject); } break; } } } private void ClearMonsterNameColume() { _selectedMonsterNameList.Clear(); _selectedMonsterName = string.Empty; Transform transform = base.transform.Find("MonsterNameListPanel/MonsterToggleListPanel"); for (int i = 0; i < transform.childCount; i++) { Object.Destroy(transform.GetChild(i).gameObject); } } private void ClearMonsterTypeColume() { _selectedMonsterTypeList.Clear(); _selectedMonsterType = string.Empty; Transform transform = base.transform.Find("MonsterTypeListPanel/MonsterToggleListPanel"); for (int i = 0; i < transform.childCount; i++) { Object.Destroy(transform.GetChild(i).gameObject); } } public void SetupView() { _selectedMonsterCategoryList = new List(); _selectedMonsterTypeList = new List(); _selectedMonsterNameList = new List(); toggleCategoryListPanelOriginHeight = base.transform.Find("MonsterCategoryListPanel").GetComponent().rect.height; toggleNameListPanelOriginHeight = base.transform.Find("MonsterNameListPanel").GetComponent().rect.height; toggleTypeListPanelOriginHeight = base.transform.Find("MonsterTypeListPanel").GetComponent().rect.height; Transform transform = base.transform.Find("MonsterCategoryListPanel/MonsterToggleListPanel"); Transform transform2 = base.transform.Find("MonsterNameListPanel/MonsterToggleListPanel"); Transform transform3 = base.transform.Find("MonsterTypeListPanel/MonsterToggleListPanel"); transform.GetComponent().sizeDelta = new Vector2(0f, toggleCategoryListPanelOriginHeight); transform2.GetComponent().sizeDelta = new Vector2(0f, toggleNameListPanelOriginHeight); transform3.GetComponent().sizeDelta = new Vector2(0f, toggleTypeListPanelOriginHeight); ClearMonsterCol(MonsterColType.CATEGORY); ClearMonsterCol(MonsterColType.NAME); ClearMonsterCol(MonsterColType.TYPE); _monsterMetaDataList = MonsterData.GetAllMonsterConfigMetaData(); BuildMonsterColData(MonsterColType.CATEGORY); BuildMonsterColItem(MonsterColType.CATEGORY); } private void BuildMonsterColData(MonsterColType colType) { switch (colType) { case MonsterColType.CATEGORY: { foreach (MonsterConfigMetaData monsterMetaData in _monsterMetaDataList) { if (!_selectedMonsterCategoryList.Contains(monsterMetaData.categoryName)) { _selectedMonsterCategoryList.Add(monsterMetaData.categoryName); } } break; } case MonsterColType.NAME: { foreach (MonsterConfigMetaData monsterMetaData2 in _monsterMetaDataList) { if (monsterMetaData2.categoryName == _selectedMonsterCategory && !_selectedMonsterNameList.Contains(monsterMetaData2.monsterName)) { _selectedMonsterNameList.Add(monsterMetaData2.monsterName); } } break; } case MonsterColType.TYPE: { foreach (MonsterConfigMetaData monsterMetaData3 in _monsterMetaDataList) { if (monsterMetaData3.categoryName == _selectedMonsterCategory && monsterMetaData3.monsterName == _selectedMonsterName && !_selectedMonsterTypeList.Contains(monsterMetaData3.typeName)) { _selectedMonsterTypeList.Add(monsterMetaData3.typeName); } } break; } } } private void BuildMonsterColItem(MonsterColType colType) { Transform transform = base.transform.Find("MonsterCategoryListPanel/MonsterToggleListPanel"); if (_selectedMonsterCategoryList.Count > 5) { transform.GetComponent().sizeDelta = new Vector2(0f, toggleCategoryListPanelOriginHeight * (float)_selectedMonsterCategoryList.Count / 5f); } Transform transform2 = base.transform.Find("MonsterNameListPanel/MonsterToggleListPanel"); if (_selectedMonsterNameList.Count > 5) { transform2.GetComponent().sizeDelta = new Vector2(0f, toggleNameListPanelOriginHeight * (float)_selectedMonsterNameList.Count / 5f); } Transform transform3 = base.transform.Find("MonsterTypeListPanel/MonsterToggleListPanel"); if (_selectedMonsterTypeList.Count > 5) { transform3.GetComponent().sizeDelta = new Vector2(0f, toggleTypeListPanelOriginHeight * (float)_selectedMonsterTypeList.Count / 5f); } int num = 0; switch (colType) { case MonsterColType.CATEGORY: { foreach (string selectedMonsterCategory in _selectedMonsterCategoryList) { num++; Transform transform6 = Object.Instantiate(Miscs.LoadResource("UI/MonsterDebugToggle")).transform; string text3 = string.Format("{0}", selectedMonsterCategory); transform6.Find("Label").GetComponent().text = text3; transform6.GetComponent().SetMonsterToggleValue(this, text3, MonoMonsterToggle.ToggleColumn.CATEGORY); transform6.SetParent(transform, false); transform6.GetComponent().group = transform.GetComponent(); transform6.GetComponent().onValueChanged.AddListener(transform6.GetComponent().OnToggleValueChanged); } break; } case MonsterColType.NAME: { foreach (string selectedMonsterName in _selectedMonsterNameList) { num++; Transform transform5 = Object.Instantiate(Miscs.LoadResource("UI/MonsterDebugToggle")).transform; string text2 = string.Format("{0}", selectedMonsterName); transform5.Find("Label").GetComponent().text = text2; transform5.GetComponent().SetMonsterToggleValue(this, text2, MonoMonsterToggle.ToggleColumn.NAME); transform5.SetParent(transform2, false); transform5.GetComponent().group = transform2.GetComponent(); transform5.GetComponent().onValueChanged.AddListener(transform5.GetComponent().OnToggleValueChanged); } break; } case MonsterColType.TYPE: { foreach (string selectedMonsterType in _selectedMonsterTypeList) { num++; Transform transform4 = Object.Instantiate(Miscs.LoadResource("UI/MonsterDebugToggle")).transform; string text = string.Format("{0}", selectedMonsterType); transform4.Find("Label").GetComponent().text = text; transform4.GetComponent().SetMonsterToggleValue(this, text, MonoMonsterToggle.ToggleColumn.TYPE); transform4.SetParent(transform3, false); transform4.GetComponent().group = transform3.GetComponent(); transform4.GetComponent().onValueChanged.AddListener(transform4.GetComponent().OnToggleValueChanged); } break; } } } public void OnMonsterCategoryToggleValueChanged(Toggle toggle) { string text = toggle.gameObject.transform.Find("Label").GetComponent().text; _selectedMonsterCategory = text; ClearMonsterCol(MonsterColType.NAME); ClearMonsterCol(MonsterColType.TYPE); BuildMonsterColData(MonsterColType.NAME); BuildMonsterColItem(MonsterColType.NAME); } public void OnMonsterNameToggleValueChanged(Toggle toggle) { string text = toggle.gameObject.transform.Find("Label").GetComponent().text; _selectedMonsterName = text; ClearMonsterCol(MonsterColType.TYPE); BuildMonsterColData(MonsterColType.TYPE); BuildMonsterColItem(MonsterColType.TYPE); } public void OnMonsterTypeToggleValueChanged(Toggle toggle) { string text = toggle.gameObject.transform.Find("Label").GetComponent().text; _selectedMonsterType = text; } public void OnMonsterStationaryToggleValueChanged(bool isOn) { isStationary = isOn; if (isOn) { if (Singleton.Instance.GetAllMonsters().Count <= 0) { return; } { foreach (BaseMonoMonster allMonster in Singleton.Instance.GetAllMonsters()) { MonsterActor actor = Singleton.Instance.GetActor(allMonster.GetRuntimeID()); actor.baseMaxHP = (actor.HP = (actor.maxHP = float.MaxValue)); BehaviorTree component = allMonster.GetComponent(); if (component != null) { component.enabled = false; } } return; } } foreach (BaseMonoMonster allMonster2 in Singleton.Instance.GetAllMonsters()) { MonsterActor actor2 = Singleton.Instance.GetActor(allMonster2.GetRuntimeID()); NPCLevelMetaData nPCLevelMetaDataByKey = NPCLevelMetaDataReader.GetNPCLevelMetaDataByKey(monsterLevel); actor2.baseMaxHP = (actor2.maxHP = (actor2.HP = actor2.config.CommonArguments.HP * nPCLevelMetaDataByKey.HPRatio)); actor2.defense = actor2.config.CommonArguments.Defence * nPCLevelMetaDataByKey.DEFRatio; actor2.attack = actor2.config.CommonArguments.Attack * nPCLevelMetaDataByKey.ATKRatio; actor2.PushProperty("Actor_ResistAllElementAttackRatio", nPCLevelMetaDataByKey.ElementalResistRatio); if (isElite) { actor2.baseMaxHP = (actor2.maxHP = (actor2.HP = (float)actor2.maxHP * actor2.config.EliteArguments.HPRatio)); actor2.defense = (float)actor2.defense * actor2.config.EliteArguments.DefenseRatio; actor2.attack = (float)actor2.attack * actor2.config.EliteArguments.AttackRatio; } BehaviorTree component2 = allMonster2.GetComponent(); if (component2 != null) { component2.enabled = true; } } } public void OnAvatarPowerfulToggleValueChanged(bool isOn) { if (isOn) { foreach (BaseMonoAvatar allAvatar in Singleton.Instance.GetAllAvatars()) { AvatarActor actor = Singleton.Instance.GetActor(allAvatar.GetRuntimeID()); foreach (AvatarActor.SKillInfo skillInfo2 in actor.skillInfoList) { skillInfo2.CD = 0f; } avatarMaxHPDict[allAvatar.GetRuntimeID()] = actor.maxHP; avatarMaxSPDict[allAvatar.GetRuntimeID()] = actor.maxSP; actor.maxHP = 999999f; actor.maxSP = 999999f; DelegateUtils.UpdateField(ref actor.HP, 999999f, 0f, actor.onHPChanged); DelegateUtils.UpdateField(ref actor.SP, 999999f, 0f, actor.onSPChanged); } Singleton.Instance.useDebugFunction = true; return; } foreach (BaseMonoAvatar allAvatar2 in Singleton.Instance.GetAllAvatars()) { uint runtimeID = allAvatar2.GetRuntimeID(); AvatarActor actor2 = Singleton.Instance.GetActor(runtimeID); foreach (string key in actor2.config.Skills.Keys) { ConfigAvatarSkill configAvatarSkill = actor2.config.Skills[key]; string skillNameByAnimEventID = actor2.GetSkillNameByAnimEventID(key); AvatarActor.SKillInfo skillInfo = actor2.GetSkillInfo(skillNameByAnimEventID); if (skillInfo != null) { skillInfo.CD = Mathf.Max(0f, configAvatarSkill.SkillCD + actor2.Evaluate(configAvatarSkill.SkillCDDelta)); } } if (avatarMaxHPDict.ContainsKey(runtimeID)) { actor2.maxHP = avatarMaxHPDict[runtimeID]; DelegateUtils.UpdateField(ref actor2.HP, avatarMaxHPDict[runtimeID], 0f, actor2.onHPChanged); } if (avatarMaxSPDict.ContainsKey(runtimeID)) { actor2.maxSP = avatarMaxSPDict[runtimeID]; DelegateUtils.UpdateField(ref actor2.SP, avatarMaxSPDict[runtimeID], 0f, actor2.onSPChanged); } } } public void DebugRemoveGameLogic() { StartCoroutine(DestructionIter()); } private IEnumerator DestructionIter() { yield return new WaitForEndOfFrame(); Singleton.Instance.levelEntity.StopAllCoroutines(); Singleton.Instance.DropEventsAndStop(); Singleton.Instance.StopLevelDesign(); yield return null; Rigidbody[] array = Object.FindObjectsOfType(); foreach (Rigidbody rigidbody in array) { rigidbody.velocity = Vector3.zero; } Object.Destroy(Object.FindObjectOfType().gameObject); DestroyAll(); DestroyAll(); DestroyAll(); DestroyAll(); DestroyAll(); DestroyAll(); } private void DestroyAll() where T : Component { T[] array = Object.FindObjectsOfType(); foreach (T obj in array) { Object.Destroy(obj); } } public void TogglePostFX() { PostFX postFX = Object.FindObjectOfType(); if (postFX != null) { postFX.enabled = !postFX.enabled; } } public void ToggleBenchmark(bool isOn) { MonoBenchmarkSwitches monoBenchmarkSwitches = Object.FindObjectOfType(); if (monoBenchmarkSwitches == null) { if (isOn) { new GameObject("__benchmark", typeof(MonoBenchmarkSwitches)); } } else { monoBenchmarkSwitches.gameObject.SetActive(isOn); } } public void ToggleFXAA(bool isOn) { PostFX postFX = Object.FindObjectOfType(); if (postFX != null) { postFX.FXAA = isOn; } } public void ToggleDistortion(bool isOn) { PostFX postFX = Object.FindObjectOfType(); if (postFX != null) { postFX.UseDistortion = isOn; } } public void ToggleDistortionDepth(bool isOn) { PostFX postFX = Object.FindObjectOfType(); if (postFX != null) { postFX.UseDepthTest = isOn; } } public void Toggle60Frames(bool is60) { if (is60) { Application.targetFrameRate = 60; } else { Application.targetFrameRate = 30; } } public void ToggleAlwaysLastKill(bool isOn) { MainCameraActor actor = Singleton.Instance.GetActor(Singleton.Instance.GetMainCamera().GetRuntimeID()); if (isOn) { actor.SetupLastKillCloseUp(); CameraActorLastKillCloseUpPlugin plugin = actor.GetPlugin(); plugin.AlwaysTrigger = true; } else if (actor.HasPlugin()) { actor.RemovePlugin(); } } public void OnEndLevel() { Singleton.Instance.useDebugFunction = true; base.transform.gameObject.SetActive(false); Singleton.Instance.SetPause(true); Singleton.Instance.levelActor.SuddenLevelEnd(); Singleton.Instance.ShowPage(new LevelEndPageContext(EvtLevelState.LevelEndReason.EndWin, true)); Singleton.Instance.SetSwitch("Level_Result", "Win"); Singleton.Instance.Post("BGM_PauseMenu_Off"); Singleton.Instance.Post("BGM_Stage_End"); } } }