FindInconsistentNaming.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEditor.SceneManagement;
  5. using UnityEditor;
  6. using UnityEngine;
  7. using UnityEngine.SceneManagement;
  8. using DCGO.CardEntities;
  9. using Unity.EditorCoroutines.Editor;
  10. using System.Collections;
  11. using UnityEngine.Networking;
  12. using WebSocketSharp;
  13. using static UnityEngine.ParticleSystem;
  14. namespace DCGO.Tools.Repair{
  15. [CreateAssetMenu(fileName = "CardEntity_Inconsistency", menuName = "Create Inconsistency Entity")]
  16. public class InconsistentName : ScriptableObject
  17. {
  18. public enum DataType
  19. {
  20. name,
  21. text,
  22. attribute,
  23. type
  24. }
  25. public DataType dataType;
  26. public string stringToFind;
  27. public string stringToCompare;
  28. }
  29. public class TrackedData
  30. {
  31. public CEntity_Base entity;
  32. public string name;
  33. public List<string> tags = new List<string>();
  34. }
  35. [CustomEditor(typeof(InconsistentName))]
  36. public class FindInconsistentNaming : Editor
  37. {
  38. InconsistentName _stringValue;
  39. List<TrackedData> _entities;
  40. public override void OnInspectorGUI()
  41. {
  42. _stringValue = target as InconsistentName;
  43. DrawDefaultInspector();
  44. if (GUILayout.Button("Find Inconsistencies"))
  45. EditorCoroutineUtility.StartCoroutine(FindInconsistency(_stringValue), this);
  46. if (_entities == null)
  47. return;
  48. GUILayout.Space(30);
  49. GUILayout.Label($"Inconsistencies Found: {_entities.Count}");
  50. GUILayout.Space(10);
  51. if (GUILayout.Button("Fix Inconsistencies"))
  52. UpdateInconsistencies(_stringValue);
  53. GUILayout.BeginVertical();
  54. foreach (TrackedData data in _entities)
  55. {
  56. if (GUILayout.Button($"Card ID: {data.entity.CardID}"))
  57. Selection.SetActiveObjectWithContext(data.entity, null);
  58. }
  59. GUILayout.EndVertical();
  60. }
  61. IEnumerator FindInconsistency(InconsistentName value)
  62. {
  63. List<CEntity_Base> List = GetAsset.LoadAll<CEntity_Base>("Assets/CardBaseEntity/");
  64. _entities = new List<TrackedData>();
  65. foreach (CEntity_Base card in List)
  66. {
  67. TrackedData data = new TrackedData();
  68. switch (value.dataType)
  69. {
  70. case InconsistentName.DataType.name:
  71. if (!card.CardName_ENG.Contains(value.stringToFind))
  72. continue;
  73. data.entity = card;
  74. data.name = card.CardName_ENG.Replace(value.stringToFind,value.stringToCompare);
  75. _entities.Add(data);
  76. break;
  77. case InconsistentName.DataType.text:
  78. break;
  79. case InconsistentName.DataType.attribute:
  80. List<string> attributes = card.Attribute_ENG.Clone().ToList();
  81. for (int i = 0; i < attributes.Count; i++)
  82. {
  83. if (!attributes[i].Contains(value.stringToFind))
  84. continue;
  85. if (attributes[i].Equals(value.stringToCompare))
  86. continue;
  87. attributes[i] = value.stringToCompare;
  88. data.entity = card;
  89. data.tags = attributes;
  90. _entities.Add(data);
  91. }
  92. break;
  93. case InconsistentName.DataType.type:
  94. List<string> types = card.Type_ENG.Clone().ToList();
  95. for (int i = 0; i < types.Count; i++)
  96. {
  97. if (!types[i].Contains(value.stringToFind))
  98. continue;
  99. if (types[i].Equals(value.stringToCompare))
  100. continue;
  101. types[i] = value.stringToCompare;
  102. data.entity = card;
  103. data.tags = types;
  104. _entities.Add(data);
  105. }
  106. break;
  107. }
  108. }
  109. Debug.Log($"Inconsistency Complete: Found {_entities.Count}");
  110. yield return null;
  111. }
  112. void UpdateInconsistencies(InconsistentName value)
  113. {
  114. foreach (TrackedData data in _entities)
  115. {
  116. switch (value.dataType)
  117. {
  118. case InconsistentName.DataType.name:
  119. data.entity.CardName_ENG = data.name;
  120. break;
  121. case InconsistentName.DataType.text:
  122. break;
  123. case InconsistentName.DataType.attribute:
  124. data.entity.Attribute_ENG = data.tags;
  125. break;
  126. case InconsistentName.DataType.type:
  127. data.entity.Type_ENG = data.tags;
  128. break;
  129. }
  130. EditorUtility.SetDirty(data.entity);
  131. }
  132. }
  133. }
  134. }