Improve Explode
This commit is contained in:
@@ -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<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;
|
||||
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<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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user