public static void DrawComponent(bool[] unfoldedComponents, string[] componentMemberSearch, IContext context, IEntity entity, int index, IComponent component) { var componentType = component.GetType(); var componentName = componentType.Name.RemoveComponentSuffix(); if (EntitasEditorLayout.MatchesSearchString(componentName.ToLower(), componentNameSearchString.ToLower())) { var boxStyle = getColoredBoxStyle(context, index); EditorGUILayout.BeginVertical(boxStyle); { var memberInfos = componentType.GetPublicMemberInfos(); EditorGUILayout.BeginHorizontal(); { if (memberInfos.Count == 0) { EditorGUILayout.LabelField(componentName, EditorStyles.boldLabel); } else { unfoldedComponents[index] = EntitasEditorLayout.Foldout(unfoldedComponents[index], componentName, foldoutStyle); if (unfoldedComponents[index]) { componentMemberSearch[index] = memberInfos.Count > 5 ? EntitasEditorLayout.SearchTextField(componentMemberSearch[index]) : string.Empty; } } if (EntitasEditorLayout.MiniButton("-")) { entity.RemoveComponent(index); } } EditorGUILayout.EndHorizontal(); if (unfoldedComponents[index]) { var newComponent = entity.CreateComponent(index, componentType); component.CopyPublicMemberValues(newComponent); var changed = false; var componentDrawer = getComponentDrawer(componentType); if (componentDrawer != null) { EditorGUI.BeginChangeCheck(); { componentDrawer.DrawComponent(newComponent); } changed = EditorGUI.EndChangeCheck(); } else { foreach (var info in memberInfos) { if (EntitasEditorLayout.MatchesSearchString(info.name.ToLower(), componentMemberSearch[index].ToLower())) { var memberValue = info.GetValue(newComponent); var memberType = memberValue == null ? info.type : memberValue.GetType(); if (DrawObjectMember(memberType, info.name, memberValue, newComponent, info.SetValue)) { changed = true; } } } } if (changed) { entity.ReplaceComponent(index, newComponent); } else { entity.GetComponentPool(index).Push(newComponent); } } } EntitasEditorLayout.EndVerticalBox(); } }
void drawSystemList(DebugSystems systems) { EntitasEditorLayout.BeginVerticalBox(); { EntitasEditorLayout.BeginHorizontal(); { DebugSystems.avgResetInterval = (AvgResetInterval)EditorGUILayout.EnumPopup("Reset average duration Ø", DebugSystems.avgResetInterval); if (GUILayout.Button("Reset Ø now", GUILayout.Width(88), GUILayout.Height(14))) { systems.ResetDurations(); } } EntitasEditorLayout.EndHorizontal(); _threshold = EditorGUILayout.Slider("Threshold Ø ms", _threshold, 0f, 33f); _systemSortMethod = (SortMethod)EditorGUILayout.EnumPopup("Sort by ", _systemSortMethod); _hideEmptySystems = EditorGUILayout.Toggle("Hide empty systems", _hideEmptySystems); EditorGUILayout.Space(); EntitasEditorLayout.BeginHorizontal(); { _systemNameSearchTerm = EditorGUILayout.TextField("Search", _systemNameSearchTerm); const string clearButtonControlName = "Clear Button"; GUI.SetNextControlName(clearButtonControlName); if (GUILayout.Button("x", GUILayout.Width(19), GUILayout.Height(14))) { _systemNameSearchTerm = string.Empty; GUI.FocusControl(clearButtonControlName); } } EntitasEditorLayout.EndHorizontal(); _showInitializeSystems = EntitasEditorLayout.Foldout(_showInitializeSystems, "Initialize Systems"); if (_showInitializeSystems && shouldShowSystems(systems, true)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, true, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } _showExecuteSystems = EntitasEditorLayout.Foldout(_showExecuteSystems, "Execute Systems"); if (_showExecuteSystems && shouldShowSystems(systems, false)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, false, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } } EntitasEditorLayout.EndVertical(); }
public static void DrawComponent(bool[] unfoldedComponents, IEntity entity, int index, IComponent component) { var componentType = component.GetType(); var componentName = componentType.Name.RemoveComponentSuffix(); if (EntitasEditorLayout.MatchesSearchString(componentName.ToLower(), _componentNameSearchString.ToLower())) { var boxStyle = getColoredBoxStyle(entity.totalComponents, index); EntitasEditorLayout.BeginVerticalBox(boxStyle); { var memberInfos = componentType.GetPublicMemberInfos(); EntitasEditorLayout.BeginHorizontal(); { if (memberInfos.Count == 0) { EditorGUILayout.LabelField(componentName, EditorStyles.boldLabel); } else { unfoldedComponents[index] = EntitasEditorLayout.Foldout(unfoldedComponents[index], componentName, _foldoutStyle); } if (GUILayout.Button("-", GUILayout.Width(19), GUILayout.Height(14))) { entity.RemoveComponent(index); } } EntitasEditorLayout.EndHorizontal(); if (unfoldedComponents[index]) { var componentDrawer = getComponentDrawer(componentType); if (componentDrawer != null) { var newComponent = entity.CreateComponent(index, componentType); component.CopyPublicMemberValues(newComponent); EditorGUI.BeginChangeCheck(); { componentDrawer.DrawComponent(newComponent); } var changed = EditorGUI.EndChangeCheck(); if (changed) { entity.ReplaceComponent(index, newComponent); } else { entity.GetComponentPool(index).Push(newComponent); } } else { foreach (var info in memberInfos) { DrawAndSetElement(info.type, info.name, info.GetValue(component), entity, index, component, info.SetValue); } } } } EntitasEditorLayout.EndVertical(); } }
void drawSystemList(DebugSystems systems) { EntitasEditorLayout.BeginVerticalBox(); { EntitasEditorLayout.BeginHorizontal(); { DebugSystems.avgResetInterval = (AvgResetInterval)EditorGUILayout.EnumPopup("Reset average duration Ø", DebugSystems.avgResetInterval); if (GUILayout.Button("Reset Ø now", GUILayout.Width(88), GUILayout.Height(14))) { systems.ResetDurations(); } } EntitasEditorLayout.EndHorizontal(); _threshold = EditorGUILayout.Slider("Threshold Ø ms", _threshold, 0f, 33f); _systemSortMethod = (SortMethod)EditorGUILayout.EnumPopup("Sort by ", _systemSortMethod); _hideEmptySystems = EditorGUILayout.Toggle("Hide empty systems", _hideEmptySystems); EditorGUILayout.Space(); _systemNameSearchString = EntitasEditorLayout.SearchTextField(_systemNameSearchString); EditorGUILayout.Space(); _showInitializeSystems = EntitasEditorLayout.Foldout(_showInitializeSystems, "Initialize Systems"); if (_showInitializeSystems && shouldShowSystems(systems, SystemInterfaceFlags.IInitializeSystem)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, SystemInterfaceFlags.IInitializeSystem, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } _showExecuteSystems = EntitasEditorLayout.Foldout(_showExecuteSystems, "Execute Systems"); if (_showExecuteSystems && shouldShowSystems(systems, SystemInterfaceFlags.IExecuteSystem)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, SystemInterfaceFlags.IExecuteSystem, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } _showCleanupSystems = EntitasEditorLayout.Foldout(_showCleanupSystems, "Cleanup Systems"); if (_showCleanupSystems && shouldShowSystems(systems, SystemInterfaceFlags.ICleanupSystem)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, SystemInterfaceFlags.ICleanupSystem, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } _showTearDownSystems = EntitasEditorLayout.Foldout(_showTearDownSystems, "TearDown Systems"); if (_showTearDownSystems && shouldShowSystems(systems, SystemInterfaceFlags.ITearDownSystem)) { EntitasEditorLayout.BeginVerticalBox(); { var systemsDrawn = drawSystemInfos(systems, SystemInterfaceFlags.ITearDownSystem, false); if (systemsDrawn == 0) { EditorGUILayout.LabelField(string.Empty); } } EntitasEditorLayout.EndVertical(); } } EntitasEditorLayout.EndVertical(); }