From 5853d74435f68aab15fc29a69525111bf8e26466 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 9 Jul 2025 01:20:59 +0200 Subject: [PATCH] Improve Explode --- .../Assets/Scripts/Transform/ExplodeModel.cs | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs b/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs index 01789ee..ba03793 100644 --- a/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs +++ b/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs @@ -1,11 +1,7 @@ -using System; using System.Collections.Generic; using TMPro; -using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; -using UnityEngine.Serialization; -using UnityEngine.UI; public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler { @@ -16,20 +12,19 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler List goalPos = new List(); List initialPos = new List(); + List transforms = new List(); static readonly int finalTick = 60 * 2; // 60fps * 2sek bool explode = false; int tick = finalTick + 1; - float lastClickTime = -1f; - const float debounceTime = 0.3f; // 300ms Sperre public void OnPointerDown(PointerEventData eventData) { - if (Time.time - lastClickTime < debounceTime) - return; // Ignoriere doppeltes Event - - lastClickTime = Time.time; - Explode(); + //ignore clicks inbetween + if (tick > finalTick) + { + Explode(); + } } void Update() @@ -37,16 +32,16 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler if (tick <= finalTick) { if(explode) - for (int i = 0; i < baseModel.transform.childCount; i++) + for (int i = 0; i < transforms.Count; i++) { - baseModel.transform.GetChild(i).transform.localPosition = + transforms[i].localPosition = MathUtil.EaseBoth(initialPos[i], goalPos[i], (tick + 0f) / finalTick); //0f for floating point div } else - for (int i = 0; i < baseModel.transform.childCount; i++) + for (int i = 0; i < transforms.Count; i++) { - baseModel.transform.GetChild(i).transform.localPosition = + transforms[i].localPosition = MathUtil.EaseBoth(goalPos[i], initialPos[i], (tick + 0f) / finalTick); //0f for floating point div } @@ -60,12 +55,19 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler { initialPos.Clear(); goalPos.Clear(); - foreach (Transform child in baseModel.transform) + transforms.Clear(); + foreach (Transform child in baseModel.GetComponentsInChildren()) { - ChildModel cm = child.GetComponent().ChildModel; - Port port = mm.GetPortForChildModel(cm); + var cmb = child.GetComponent(); + if (cmb == null) + { + continue; //only for basemodel + } + Port port = cmb.GetParentPort(); initialPos.Add(child.localPosition); goalPos.Add(child.localPosition + port.ExplodeDirection); + transforms.Add(child); + Debug.LogWarning($"moving: {cmb.name} - {port.PortID} InitPos: {child.localPosition} -> goal {child.localPosition + port.ExplodeDirection}"); } } text.text = explode ? "Explode" : "Unexplode"; @@ -78,15 +80,14 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler { if (explode) { - for (int i = 0; i < baseModel.transform.childCount; i++) + for (int i = 0; i < transforms.Count; i++) { - var tf = baseModel.transform.GetChild(i); - if (tf == null) + if (transforms[i] == null) { Debug.LogWarning($"Skipping ChildModel {i}"); continue; } - tf.transform.localPosition = initialPos[i]; //reset all + transforms[i].localPosition = initialPos[i]; //reset all } } explode = false; @@ -94,5 +95,6 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler tick = finalTick + 1; initialPos.Clear(); goalPos.Clear(); + transforms.Clear(); } }