From 0a2d780693011057f9317759100f46a094db44f9 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 7 Jul 2025 23:02:39 +0200 Subject: [PATCH] Add IResettable, fix ReturnButtonBehaviour logic --- .../Assets/Scenes/SampleScene.unity | 81 +++++++++++++++++-- vr-configurator/Assets/Scripts/Managing.meta | 3 + .../Assets/Scripts/Managing/IResettable.cs | 8 ++ .../Scripts/Managing/IResettable.cs.meta | 3 + .../Assets/Scripts/Managing/StateManager.cs | 33 ++++++++ .../Scripts/Managing/StateManager.cs.meta | 3 + .../Assets/Scripts/Models/ModelManager.cs | 9 ++- .../Assets/Scripts/Transform/ExplodeModel.cs | 29 +++++-- .../Assets/Scripts/UI/CanvasBehaviour.cs | 11 +++ .../Assets/Scripts/UI/CanvasBehaviour.cs.meta | 3 + .../Assets/Scripts/UI/ChildModelSelector.cs | 34 ++++---- .../Assets/Scripts/UI/ColorSelector.cs | 26 ++++-- .../Assets/Scripts/UI/PortSelector.cs | 38 +++++---- .../Assets/Scripts/UI/PortSelectorButton.cs | 4 +- .../Scripts/UI/ReturnButtonBehaviour.cs | 13 +-- 15 files changed, 234 insertions(+), 64 deletions(-) create mode 100644 vr-configurator/Assets/Scripts/Managing.meta create mode 100644 vr-configurator/Assets/Scripts/Managing/IResettable.cs create mode 100644 vr-configurator/Assets/Scripts/Managing/IResettable.cs.meta create mode 100644 vr-configurator/Assets/Scripts/Managing/StateManager.cs create mode 100644 vr-configurator/Assets/Scripts/Managing/StateManager.cs.meta create mode 100644 vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs create mode 100644 vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs.meta diff --git a/vr-configurator/Assets/Scenes/SampleScene.unity b/vr-configurator/Assets/Scenes/SampleScene.unity index 3fbf976..bd6ec59 100644 --- a/vr-configurator/Assets/Scenes/SampleScene.unity +++ b/vr-configurator/Assets/Scenes/SampleScene.unity @@ -5123,6 +5123,50 @@ Transform: - {fileID: 2139722053} m_Father: {fileID: 2107447216} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &317678348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 317678350} + - component: {fileID: 317678349} + m_Layer: 0 + m_Name: StateManagerGO + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &317678349 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317678348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35b25439a4a74eaa92122e7fae78561b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &317678350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317678348} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.28093836, y: 0.72670066, z: 2.560518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &318658192 GameObject: m_ObjectHideFlags: 0 @@ -9007,6 +9051,7 @@ GameObject: - component: {fileID: 525196401} - component: {fileID: 525196408} - component: {fileID: 525196407} + - component: {fileID: 525196409} m_Layer: 0 m_Name: CanvasButtons m_TagString: Untagged @@ -9161,6 +9206,18 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 +--- !u!114 &525196409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525196400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aa9b103044004bcea119061f22ab49fa, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &527859712 GameObject: m_ObjectHideFlags: 0 @@ -10344,11 +10401,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6090c3d0202faa84bb7bbf94c1cceec8, type: 3} m_Name: m_EditorClassIdentifier: - bms: {fileID: 624025131} - mm: {fileID: 1519836175} - buttonCanvas: {fileID: 525196400} - explodeButton: {fileID: 465093186} - cmsCanvas: {fileID: 1509914124} + StateManager: {fileID: 317678349} --- !u!224 &576843183 RectTransform: m_ObjectHideFlags: 0 @@ -25795,6 +25848,7 @@ GameObject: - component: {fileID: 1509914125} - component: {fileID: 1509914131} - component: {fileID: 1509914130} + - component: {fileID: 1509914132} m_Layer: 0 m_Name: CanvasChildModelSelector m_TagString: Untagged @@ -25946,6 +26000,18 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 +--- !u!114 &1509914132 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1509914124} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aa9b103044004bcea119061f22ab49fa, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1514041112 GameObject: m_ObjectHideFlags: 0 @@ -27319,7 +27385,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1591058970} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} m_Name: @@ -27380,7 +27446,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1591058970} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 2518c50cb3fc6a6458d4b743c2f69c7d, type: 3} m_Name: @@ -181153,3 +181219,4 @@ SceneRoots: - {fileID: 548570670} - {fileID: 540709790} - {fileID: 1275794569} + - {fileID: 317678350} diff --git a/vr-configurator/Assets/Scripts/Managing.meta b/vr-configurator/Assets/Scripts/Managing.meta new file mode 100644 index 0000000..bbb275f --- /dev/null +++ b/vr-configurator/Assets/Scripts/Managing.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c746a9ffc9ef4ec899ec5d95b8bbb1eb +timeCreated: 1751913636 \ No newline at end of file diff --git a/vr-configurator/Assets/Scripts/Managing/IResettable.cs b/vr-configurator/Assets/Scripts/Managing/IResettable.cs new file mode 100644 index 0000000..a3ee6dd --- /dev/null +++ b/vr-configurator/Assets/Scripts/Managing/IResettable.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +// This interface manages Resetting Elements that have to be resetted (UI elements, Model etc.) +// Managed by StateManager +public interface IResettable +{ + public void ResetThis(); +} \ No newline at end of file diff --git a/vr-configurator/Assets/Scripts/Managing/IResettable.cs.meta b/vr-configurator/Assets/Scripts/Managing/IResettable.cs.meta new file mode 100644 index 0000000..f842ba6 --- /dev/null +++ b/vr-configurator/Assets/Scripts/Managing/IResettable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5cc676a40183456aa13e1a8d7acf805f +timeCreated: 1751913656 \ No newline at end of file diff --git a/vr-configurator/Assets/Scripts/Managing/StateManager.cs b/vr-configurator/Assets/Scripts/Managing/StateManager.cs new file mode 100644 index 0000000..341ca2f --- /dev/null +++ b/vr-configurator/Assets/Scripts/Managing/StateManager.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using Unity.VisualScripting; +using UnityEngine; +using UnityEngine.SceneManagement; + +public class StateManager : MonoBehaviour +{ + public List Resettables; + + private void populateResettables() + { + Resettables ??= new List(); + Resettables.Clear(); + foreach (var goot in SceneManager.GetActiveScene().GetRootGameObjects()) + { + Resettables.AddRange(goot.GetComponentsInChildren()); + } + } + + void Start() + { + populateResettables(); + } + + public void ResetAll() + { + foreach (var resettable in Resettables) + { + resettable.ResetThis(); + } + } +} diff --git a/vr-configurator/Assets/Scripts/Managing/StateManager.cs.meta b/vr-configurator/Assets/Scripts/Managing/StateManager.cs.meta new file mode 100644 index 0000000..ae655fb --- /dev/null +++ b/vr-configurator/Assets/Scripts/Managing/StateManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 35b25439a4a74eaa92122e7fae78561b +timeCreated: 1751914506 \ No newline at end of file diff --git a/vr-configurator/Assets/Scripts/Models/ModelManager.cs b/vr-configurator/Assets/Scripts/Models/ModelManager.cs index fa1be19..2b28661 100644 --- a/vr-configurator/Assets/Scripts/Models/ModelManager.cs +++ b/vr-configurator/Assets/Scripts/Models/ModelManager.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using UnityEngine.Serialization; -public class ModelManager : MonoBehaviour +public class ModelManager : MonoBehaviour, IResettable { private Dictionary> _portDict; //port mapped on private Dictionary _childModelDict; //childModels by their ID @@ -164,5 +164,10 @@ public class ModelManager : MonoBehaviour return null; } - + + public void ResetThis() + { + OpenSelector(); + BaseModelBehaviour.ClearChildren(); + } } diff --git a/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs b/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs index 4a86431..77a7982 100644 --- a/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs +++ b/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs @@ -6,14 +6,12 @@ using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; -public class ExplodeModel : MonoBehaviour +public class ExplodeModel : MonoBehaviour, IResettable { - public ModelManager mm; public GameObject baseModel; public TextMeshProUGUI text; public GameObject cms; - List goalPos = new List(); List initialPos = new List(); @@ -35,7 +33,6 @@ public class ExplodeModel : MonoBehaviour if(explode) for (int i = 0; i < baseModel.transform.childCount; i++) { - Debug.Log($"Child {baseModel.transform.GetChild(i).transform.name} : {baseModel.transform.GetChild(i).transform.localPosition} : {goalPos[i]} : {initialPos[i]}"); baseModel.transform.GetChild(i).transform.localPosition = MathUtil.EaseBoth(initialPos[i], goalPos[i], (tick + 0f) / finalTick); //0f for floating point div @@ -47,7 +44,6 @@ public class ExplodeModel : MonoBehaviour MathUtil.EaseBoth(goalPos[i], initialPos[i], (tick + 0f) / finalTick); //0f for floating point div } - tick++; } } @@ -76,4 +72,27 @@ public class ExplodeModel : MonoBehaviour explode = !explode; tick = 0; } + + public void ResetThis() + { + if (explode) + { + for (int i = 0; i < baseModel.transform.childCount; i++) + { + var tf = baseModel.transform.GetChild(i); + if (tf == null) + { + Debug.LogWarning($"Skipping ChildModel {i}"); + continue; + } + tf.transform.localPosition = initialPos[i]; //reset all + } + } + pressed = false; + explode = false; + text.text = explode ? "Explode" : "Unexplode"; + tick = finalTick + 1; + initialPos.Clear(); + goalPos.Clear(); + } } diff --git a/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs b/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs new file mode 100644 index 0000000..a69bfed --- /dev/null +++ b/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +//this disables buttonCanvas and CMS Canvas +public class CanvasBehaviour : MonoBehaviour, IResettable +{ + public void ResetThis() + { + Debug.Log($"Disabling {this.name}"); + gameObject.SetActive(false); + } +} diff --git a/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs.meta b/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs.meta new file mode 100644 index 0000000..54400c2 --- /dev/null +++ b/vr-configurator/Assets/Scripts/UI/CanvasBehaviour.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aa9b103044004bcea119061f22ab49fa +timeCreated: 1751918415 \ No newline at end of file diff --git a/vr-configurator/Assets/Scripts/UI/ChildModelSelector.cs b/vr-configurator/Assets/Scripts/UI/ChildModelSelector.cs index 91c1098..3fbe40c 100644 --- a/vr-configurator/Assets/Scripts/UI/ChildModelSelector.cs +++ b/vr-configurator/Assets/Scripts/UI/ChildModelSelector.cs @@ -7,7 +7,7 @@ using Unity.XR.CoreUtils; using UnityEngine.UI; using Button = UnityEngine.UI.Button; -public class ChildModelSelector : MonoBehaviour +public class ChildModelSelector : MonoBehaviour, IResettable { private List Models = new List(); public ModelManager modelManager; @@ -28,25 +28,10 @@ public class ChildModelSelector : MonoBehaviour } } public int PortIndex { set; get; } - - void Start() - { - - } public void AssignButtons() { - Debug.Log($"Destroying Old CMS Pickers: {Models.Count}"); - foreach (var go in Models) - { - if (go == null) - { - continue; - } - Debug.Log($"Destroying {go.name}"); - Destroy(go); - } - Models.Clear(); + ResetThis(); var childModels = modelManager.GetChildModelsForPort(PortID); foreach (var childModel in childModels) @@ -72,5 +57,20 @@ public class ChildModelSelector : MonoBehaviour colorSelector.GenerateButtons(model, PortIndex); } + + public void ResetThis() + { + Debug.Log($"Destroying Old CMS Pickers: {Models.Count}"); + foreach (var go in Models) + { + if (go == null) + { + continue; + } + Debug.Log($"Destroying {go.name}"); + Destroy(go); + } + Models.Clear(); + } } diff --git a/vr-configurator/Assets/Scripts/UI/ColorSelector.cs b/vr-configurator/Assets/Scripts/UI/ColorSelector.cs index a16b83c..bdad0eb 100644 --- a/vr-configurator/Assets/Scripts/UI/ColorSelector.cs +++ b/vr-configurator/Assets/Scripts/UI/ColorSelector.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; -public class ColorSelector : MonoBehaviour +public class ColorSelector : MonoBehaviour, IResettable { public GameObject prefab; readonly Vector3 offset = new Vector3(0, 45, 0); @@ -12,13 +12,9 @@ public class ColorSelector : MonoBehaviour get { return gameObject.transform.parent.gameObject; } } - public void GenerateButtons(ChildModel model , int portIndex) + public void GenerateButtons(ChildModel model, int portIndex) { - foreach (var color in buttons) - { - Destroy(color); - } - buttons.Clear(); + ResetThis(); if (!model.HasColor()) { @@ -40,4 +36,20 @@ public class ColorSelector : MonoBehaviour i++; } } + + public void ResetThis() + { + Parent.SetActive(false); + + Debug.Log($"Destroying Old Color Buttons: {buttons.Count}"); + foreach (var go in buttons) + { + if (go == null) + { + continue; + } + Destroy(go); + } + buttons.Clear(); + } } diff --git a/vr-configurator/Assets/Scripts/UI/PortSelector.cs b/vr-configurator/Assets/Scripts/UI/PortSelector.cs index a5c0315..54e0d32 100644 --- a/vr-configurator/Assets/Scripts/UI/PortSelector.cs +++ b/vr-configurator/Assets/Scripts/UI/PortSelector.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine.UI; using Util; -public class PortSelector : MonoBehaviour +public class PortSelector : MonoBehaviour, IResettable { public ModelManager modelManager; @@ -16,16 +16,8 @@ public class PortSelector : MonoBehaviour //Gets called from BaseModelSelector public void GenerateButtons() { - foreach (var port in portGOs) - { - Debug.Log($"Destroying {port}"); - Destroy(port); - } - foreach (var psb in listPSB) - { - Debug.Log($"Destroying {psb}"); - Destroy(psb); - } + ResetThis(); + int i = 0; int index = 0; foreach (Port port in modelManager.BaseModel.Ports) @@ -52,18 +44,36 @@ public class PortSelector : MonoBehaviour psb.PortID = port.PortID; psb.PortIndex = index; psb.marker = go.GetComponentInChildren(true).gameObject; - psb.ResetOtherButtons = ResetOtherButtons; + psb.RemoveOtherMarkers = RemoveOtherMarkers; listPSB.Add(psb); index++; i++; } } - - private void ResetOtherButtons() + + private void RemoveOtherMarkers() { foreach (var psb in listPSB) { psb.marker.SetActive(false); } } + + + public void ResetThis() + { + Debug.Log($"Resetting {this.name}"); + foreach (var port in portGOs) + { + Debug.Log($"Destroying {port}"); + Destroy(port); + } + portGOs.Clear(); + foreach (var psb in listPSB) + { + Debug.Log($"Destroying {psb}"); + Destroy(psb); + } + listPSB.Clear(); + } } diff --git a/vr-configurator/Assets/Scripts/UI/PortSelectorButton.cs b/vr-configurator/Assets/Scripts/UI/PortSelectorButton.cs index 35e07d5..0629c07 100644 --- a/vr-configurator/Assets/Scripts/UI/PortSelectorButton.cs +++ b/vr-configurator/Assets/Scripts/UI/PortSelectorButton.cs @@ -7,7 +7,7 @@ public class PortSelectorButton : MonoBehaviour { public ChildModelSelector cms; public GameObject marker; - public Action ResetOtherButtons; + public Action RemoveOtherMarkers; public string PortID { get; set; } public int PortIndex { set; get; } @@ -22,7 +22,7 @@ public class PortSelectorButton : MonoBehaviour cms.PortIndex = PortIndex; cms.AssignButtons(); // rebuilds GUI cms.gameObject.SetActive(true); - ResetOtherButtons(); + RemoveOtherMarkers(); marker.SetActive(true); } } diff --git a/vr-configurator/Assets/Scripts/UI/ReturnButtonBehaviour.cs b/vr-configurator/Assets/Scripts/UI/ReturnButtonBehaviour.cs index a7602c3..c37adb2 100644 --- a/vr-configurator/Assets/Scripts/UI/ReturnButtonBehaviour.cs +++ b/vr-configurator/Assets/Scripts/UI/ReturnButtonBehaviour.cs @@ -1,13 +1,10 @@ +using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ReturnButtonBehaviour : MonoBehaviour { - public BaseModelSelector bms; - public ModelManager mm; - public GameObject buttonCanvas; - public GameObject explodeButton; - public GameObject cmsCanvas; + public StateManager StateManager; void Start() { @@ -17,11 +14,7 @@ public class ReturnButtonBehaviour : MonoBehaviour void OnClick() { Debug.Log("Return to Menu clicked"); - mm.OpenSelector(); - mm.BaseModelBehaviour.ClearChildren(); - explodeButton.SetActive(true); - buttonCanvas.SetActive(false); - cmsCanvas.SetActive(false); + StateManager.ResetAll(); } }