diff --git a/Assets/Scenes/Editor.unity b/Assets/Scenes/Editor.unity index 104b633b3..b8310b432 100644 --- a/Assets/Scenes/Editor.unity +++ b/Assets/Scenes/Editor.unity @@ -4505,6 +4505,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _gameSelectionEventRef: {fileID: 1119871594} + _headerObject: {fileID: 1039002537} + _headerText: {fileID: 93287373} --- !u!1 &170980090 GameObject: m_ObjectHideFlags: 0 @@ -21412,6 +21414,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _categoryRef: {fileID: 167275725} + _spacing: -55 + _headerOffset: 61 --- !u!1 &889256060 GameObject: m_ObjectHideFlags: 0 @@ -26829,7 +26833,7 @@ MonoBehaviour: posDif: 15 ignoreSelectCount: 2 _newGameEventSelector: {fileID: 516264814} - _cateGoryRef: {fileID: 167275725} + _categoryManager: {fileID: 879299405} --- !u!114 &1154875948 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategory.cs b/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategory.cs index c1eb5d765..d635e11ee 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategory.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategory.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using TMPro; using UnityEngine; namespace HeavenStudio.Editor @@ -7,6 +8,26 @@ namespace HeavenStudio.Editor public class GameSelectionCategory : MonoBehaviour { [SerializeField] private NewGameSelectionEvent _gameSelectionEventRef; + [SerializeField] private GameObject _headerObject; + [SerializeField] private TMP_Text _headerText; + + public void SetHeaderText(string text) + { + _headerText.text = text; + } + + public void HeaderSetActive(bool active) + { + _headerObject.SetActive(active); + } + + public void AddEvent(Minigames.GameAction action) + { + NewGameSelectionEvent spawnedEvent = Instantiate(_gameSelectionEventRef, transform); + spawnedEvent.SetText(action.displayName); + spawnedEvent.SetActiveGearIcon(action.parameters != null && action.parameters.Count > 0); + spawnedEvent.gameObject.SetActive(true); + } } } diff --git a/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategoryManager.cs b/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategoryManager.cs index 5ce42d50f..7533a468b 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategoryManager.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/GameSelectionCategoryManager.cs @@ -6,7 +6,67 @@ namespace HeavenStudio.Editor { public class GameSelectionCategoryManager : MonoBehaviour { + [Header("Components")] [SerializeField] private GameSelectionCategory _categoryRef; + + [Header("Properties")] + [SerializeField] private float _spacing = 0f; + [SerializeField] private float _headerOffset = 39.8f; + + private List _categories = new(); + + public void StartCategories(List actions, string gameName) + { + string lastHeader = string.Empty; + GameSelectionCategory lastHeaderObject = null; + float currentY = _categoryRef.transform.localPosition.y; + + // eventually add the switch games here + + for (int i = 0; i < actions.Count; i++) + { + var action = actions[i]; + if (action.hidden || action.actionName == "switchGame") continue; + + if ((i == 0 && gameName != "gameManager") || (gameName == "gameManager" && i == 1) || (action.categoryName != lastHeader && action.categoryName != string.Empty)) + { + if ((i != 0 && gameName != "gameManager") || (gameName == "gameManager" && i != 1)) + { + Canvas.ForceUpdateCanvases(); + currentY += _spacing - lastHeaderObject.GetComponent().rect.height; + } + + lastHeader = action.categoryName; + GameSelectionCategory spawnedCategory = Instantiate(_categoryRef, transform); + lastHeaderObject = spawnedCategory; + _categories.Add(spawnedCategory); + + if (lastHeader != string.Empty) + { + spawnedCategory.SetHeaderText(lastHeader); + } + else + { + spawnedCategory.HeaderSetActive(false); + currentY += _headerOffset; + } + + spawnedCategory.transform.localPosition = new Vector3(spawnedCategory.transform.localPosition.x, currentY); + spawnedCategory.gameObject.SetActive(true); + } + + lastHeaderObject.AddEvent(action); + } + } + + public void DestroyCategories() + { + for (int i = 0; i < _categories.Count; i++) + { + Destroy(_categories[i].gameObject); + } + _categories.Clear(); + } } } diff --git a/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs b/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs index 0a10df45b..efb71e67a 100644 --- a/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs +++ b/Assets/Scripts/LevelEditor/EventSelector/GridGameSelector.cs @@ -458,7 +458,7 @@ namespace HeavenStudio.Editor [Header("New Game Event Selection")] [SerializeField] private GameObject _newGameEventSelector; - [SerializeField] private GameSelectionCategory _cateGoryRef; + [SerializeField] private GameSelectionCategoryManager _categoryManager; private bool _usingOld = false; @@ -480,37 +480,12 @@ namespace HeavenStudio.Editor private void SelectGameNew(int index) { NewDestroyEvents(); - NewAddEvents(); + NewAddEvents(index); } private void NewAddEvents(int index = 0) { - /*if (!EventCaller.FXOnlyGames().Contains(SelectedMinigame)) - { - NewGameSelectionEvent sg = Instantiate(_newEventRef, _newEventsParent).GetComponent(); - sg.SetText("Switch Game"); - sg.gameObject.SetActive(true); - } - else - { - index++; - if (SelectedMinigame.name == "gameManager") index++; - } - - for (var i = 0; i < SelectedMinigame.actions.Count; i++) - { - var action = SelectedMinigame.actions[i]; - if (action.actionName == "switchGame" || action.hidden) continue; - - //NewGameSelectionEvent g = Instantiate(_newEventRef, _newEventsParent).GetComponent(); - g.SetText(action.displayName); - - if (action.parameters != null && action.parameters.Count > 0) - g.SetActiveGearIcon(true); - - g.gameObject.SetActive(true); - - }*/ + _categoryManager.StartCategories(SelectedMinigame.actions, SelectedMinigame.name); } private void NewDestroyEvents() @@ -520,10 +495,7 @@ namespace HeavenStudio.Editor transform.GetChild(i).GetChild(0).gameObject.SetActive(false); } - /*for (int i = 0; i < _newEventsParent.childCount; i++) - { - Destroy(_newEventsParent.GetChild(i).gameObject); - }*/ + _categoryManager.DestroyCategories(); } public void Disable() diff --git a/Assets/Scripts/Minigames.cs b/Assets/Scripts/Minigames.cs index 3618d0259..b74f352e6 100644 --- a/Assets/Scripts/Minigames.cs +++ b/Assets/Scripts/Minigames.cs @@ -556,7 +556,8 @@ namespace HeavenStudio this.preFunction = prescheduleFunction ?? delegate { }; this.priority = priority; this.preFunctionLength = preFunctionLength; - this.categoryName = categoryName; + if (categoryName != null) this.categoryName = categoryName; + else this.categoryName = string.Empty; //todo: converting to new versions of GameActions @@ -781,7 +782,10 @@ namespace HeavenStudio new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "colorA", "valA" }) }) } - ), + ) + { + categoryName = "Test 1" + }, new GameAction("filter", "Filter", 1f, true, new List() { @@ -819,7 +823,10 @@ namespace HeavenStudio new Param("ease", Util.EasingFunction.Ease.Linear, "Ease Type"), new Param("axis", GameCamera.CameraAxis.All, "Axis", "The axis to move the camera on" ) } - ), + ) + { + categoryName = "Test2" + }, new("stretch camera", "Stretch Camera") { resizable = true,