VirtualSimulationManager12.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. #if UNITY_EDITOR
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEditor;
  6. using Sirenix.OdinInspector;
  7. using Sirenix.OdinInspector.Editor;
  8. using Sirenix.Utilities.Editor;
  9. using ChivaXR;
  10. using ChivaXR.Op;
  11. public class VirtualSimulationManager12 : OdinMenuEditorWindow
  12. {
  13. public enum ManagerState
  14. {
  15. markContainer,
  16. animationManager,
  17. operationManager,
  18. processManagement,
  19. animationEditor,
  20. soundManager,
  21. videoManager,
  22. ToolsManager
  23. }
  24. [LabelText("Manager View")]
  25. [LabelWidth(100f)]
  26. [EnumToggleButtons]
  27. [ShowInInspector]
  28. [OnValueChanged("OnValueChange")]
  29. private ManagerState managerstate;
  30. private int enumIndex = 0;
  31. private bool treeRebuild = false;
  32. private DrawMarkContainer drawMarkContanier = new DrawMarkContainer();
  33. private DrawProcessManagement drawProcess = new DrawProcessManagement();
  34. private DrawAnimationManager drawAnimationManager = new DrawAnimationManager();
  35. private DrawOperationManager drawOperationManager = new DrawOperationManager();
  36. private DrawAnimationEditor drawAnimationEditor = new DrawAnimationEditor();
  37. [MenuItem("ChivaTool/VirtualSimulationManager")]
  38. public static void OpenWindow()
  39. {
  40. GetWindow<VirtualSimulationManager12>().Show();
  41. }
  42. private void StateChanged()
  43. {
  44. treeRebuild = true;
  45. }
  46. protected override void Initialize()
  47. {
  48. drawMarkContanier.FindMyObject();
  49. drawProcess.FindMyObject();
  50. drawAnimationManager.FindMyObject();
  51. drawOperationManager.FindMyObject();
  52. drawAnimationEditor.FindMyObject();
  53. }
  54. protected override void OnGUI()
  55. {
  56. if (treeRebuild && Event.current.type == EventType.Layout)
  57. {
  58. ForceMenuTreeRebuild();
  59. treeRebuild = false;
  60. }
  61. SirenixEditorGUI.Title("VirtualSimulationManager", "仿真编辑控制器", TextAlignment.Center, true);
  62. EditorGUILayout.Space();
  63. switch (managerstate)
  64. {
  65. case ManagerState.soundManager:
  66. case ManagerState.videoManager:
  67. case ManagerState.ToolsManager:
  68. DrawEditor(enumIndex);
  69. break;
  70. }
  71. EditorGUILayout.Space();
  72. base.OnGUI();
  73. }
  74. protected override void DrawEditors()
  75. {
  76. switch (managerstate)
  77. {
  78. case ManagerState.markContainer:
  79. case ManagerState.animationManager:
  80. case ManagerState.operationManager:
  81. case ManagerState.processManagement:
  82. case ManagerState.animationEditor:
  83. DrawEditor(enumIndex);
  84. break;
  85. }
  86. DrawEditor((int)managerstate);
  87. }
  88. protected override IEnumerable<object> GetTargets()
  89. {
  90. List<object> targets = new List<object>();
  91. targets.Add(drawMarkContanier);
  92. targets.Add(drawAnimationManager);
  93. targets.Add(drawOperationManager);
  94. targets.Add(drawProcess);
  95. targets.Add(drawAnimationEditor);
  96. targets.Add(null);
  97. targets.Add(null);
  98. targets.Add(null);
  99. targets.Add(base.GetTarget());
  100. enumIndex = targets.Count - 1;
  101. return targets;
  102. }
  103. protected override void DrawMenu()
  104. {
  105. switch (managerstate)
  106. {
  107. case ManagerState.soundManager:
  108. case ManagerState.videoManager:
  109. case ManagerState.ToolsManager:
  110. base.DrawMenu();
  111. break;
  112. }
  113. }
  114. protected override OdinMenuTree BuildMenuTree()
  115. {
  116. OdinMenuTree tree = new OdinMenuTree();
  117. switch (managerstate)
  118. {
  119. case ManagerState.markContainer:
  120. break;
  121. case ManagerState.animationManager:
  122. break;
  123. case ManagerState.operationManager:
  124. break;
  125. case ManagerState.processManagement:
  126. break;
  127. case ManagerState.animationEditor:
  128. break;
  129. case ManagerState.soundManager:
  130. break;
  131. case ManagerState.videoManager:
  132. break;
  133. case ManagerState.ToolsManager:
  134. DrawToolManagerObject(tree);
  135. break;
  136. default:
  137. break;
  138. }
  139. return tree;
  140. }
  141. public void DrawToolManagerObject(OdinMenuTree tree)
  142. {
  143. ToolWindow stepWindow = new ToolWindow();
  144. CreateWindow createWindow = new CreateWindow();
  145. tree.Add("工具配置文件列表/肘型头配置表", stepWindow);
  146. tree.Add("添加工具配置表", createWindow);
  147. }
  148. private void OnValueChange()
  149. {
  150. //switch (managerstate)
  151. //{
  152. // case ManagerState.soundManager:
  153. // case ManagerState.videoManager:
  154. // case ManagerState.ToolsManager:
  155. // DrawEditor(enumIndex);
  156. // break;
  157. //}
  158. base.ForceMenuTreeRebuild();
  159. }
  160. }
  161. public class DrawMarkContainer : DrawSceneManagerObject<MarkContainer>
  162. {
  163. }
  164. public class DrawProcessManagement : DrawSceneManagerObject<ProcessManagement>
  165. {
  166. }
  167. public class DrawAnimationManager : DrawSceneManagerObject<AnimationManager>
  168. {
  169. }
  170. public class DrawOperationManager : DrawSceneManagerObject<OperationManager>
  171. {
  172. }
  173. public class DrawAnimationEditor : DrawSceneManagerObject<AnimationDataEditor>
  174. {
  175. }
  176. public class ToolWindow
  177. {
  178. [TableList(ShowIndexLabels = true)]
  179. public List<ToolConfig> m_Tools;
  180. [Button("保存")]
  181. public void SaveAction()
  182. {
  183. }
  184. }
  185. public class CreateWindow
  186. {
  187. }
  188. public class DrawSceneManagerObject<T> where T : MonoBehaviour
  189. {
  190. [ShowIf("@myObject!=null")]
  191. [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)]
  192. public T myObject;
  193. public void FindMyObject()
  194. {
  195. if (myObject == null)
  196. {
  197. myObject = GameObject.FindObjectOfType<T>();
  198. }
  199. }
  200. [ShowIf("@myObject!=null")]
  201. [GUIColor(0.7f, 1, 0.7f)]
  202. [ButtonGroup("Top Button", -1000)]
  203. private void SelectSceneObject()
  204. {
  205. if (myObject != null)
  206. {
  207. Selection.activeGameObject = myObject.gameObject;
  208. }
  209. }
  210. [ShowIf("@myObject==null")]
  211. [Button]
  212. private void CreateManagerObject()
  213. {
  214. GameObject newManager = new GameObject();
  215. newManager.name = "New" + typeof(T).ToString();
  216. myObject = newManager.AddComponent<T>();
  217. GameObject managerGroup = GameObject.Find("Manager");
  218. if (managerGroup == null)
  219. {
  220. managerGroup = new GameObject("Manager");
  221. }
  222. newManager.transform.parent = managerGroup.transform;
  223. }
  224. }
  225. #endif