Add IResettable, fix ReturnButtonBehaviour logic

This commit is contained in:
Tim
2025-07-07 23:02:39 +02:00
parent e0204f6e7e
commit 0a2d780693
15 changed files with 234 additions and 64 deletions

View File

@@ -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}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c746a9ffc9ef4ec899ec5d95b8bbb1eb
timeCreated: 1751913636

View File

@@ -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();
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5cc676a40183456aa13e1a8d7acf805f
timeCreated: 1751913656

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
public class StateManager : MonoBehaviour
{
public List<IResettable> Resettables;
private void populateResettables()
{
Resettables ??= new List<IResettable>();
Resettables.Clear();
foreach (var goot in SceneManager.GetActiveScene().GetRootGameObjects())
{
Resettables.AddRange(goot.GetComponentsInChildren<IResettable>());
}
}
void Start()
{
populateResettables();
}
public void ResetAll()
{
foreach (var resettable in Resettables)
{
resettable.ResetThis();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 35b25439a4a74eaa92122e7fae78561b
timeCreated: 1751914506

View File

@@ -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<string, HashSet<ChildModel>> _portDict; //port mapped on
private Dictionary<string, ChildModel> _childModelDict; //childModels by their ID
@@ -165,4 +165,9 @@ public class ModelManager : MonoBehaviour
}
public void ResetThis()
{
OpenSelector();
BaseModelBehaviour.ClearChildren();
}
}

View File

@@ -6,15 +6,13 @@ 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<Vector3> goalPos = new List<Vector3>();
List<Vector3> initialPos = new List<Vector3>();
private bool pressed = false;
@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aa9b103044004bcea119061f22ab49fa
timeCreated: 1751918415

View File

@@ -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<GameObject> Models = new List<GameObject>();
public ModelManager modelManager;
@@ -29,24 +29,9 @@ 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();
}
}

View File

@@ -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();
}
}

View File

@@ -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<Marker>(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();
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}