Improve Explode

This commit is contained in:
Tim
2025-07-09 01:20:59 +02:00
parent c68a105fea
commit 5853d74435

View File

@@ -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,37 +12,36 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler
List<Vector3> goalPos = new List<Vector3>();
List<Vector3> initialPos = new List<Vector3>();
List<Transform> transforms = new List<Transform>();
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;
//ignore clicks inbetween
if (tick > finalTick)
{
Explode();
}
}
void Update()
{
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<Transform>())
{
ChildModel cm = child.GetComponent<ChildModelBehaviour>().ChildModel;
Port port = mm.GetPortForChildModel(cm);
var cmb = child.GetComponent<ChildModelBehaviour>();
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();
}
}