unify exploder for later

This commit is contained in:
Tim
2025-07-12 14:11:08 +02:00
parent ff4771a7b3
commit 3a7b99a92c
4 changed files with 39 additions and 23 deletions

View File

@@ -3,16 +3,15 @@ using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler public class Exploder : MonoBehaviour, IResettable, IPointerDownHandler
{ {
public ModelManager mm; public ModelManager mm;
public GameObject baseModel; public GameObject baseModel;
public TextMeshProUGUI text; public TextMeshProUGUI text;
public GameObject cms; public GameObject cms;
List<Vector3> goalPos = new List<Vector3>();
List<Vector3> initialPos = new List<Vector3>(); List<ExploderModel> models = new List<ExploderModel>();
List<Transform> transforms = new List<Transform>();
static readonly int finalTick = 60 * 2; // 60fps * 2sek static readonly int finalTick = 60 * 2; // 60fps * 2sek
bool explode = false; bool explode = false;
@@ -32,17 +31,17 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler
if (tick <= finalTick) if (tick <= finalTick)
{ {
if(explode) if(explode)
for (int i = 0; i < transforms.Count; i++) for (int i = 0; i < models.Count; i++)
{ {
transforms[i].localPosition = models[i].tf.localPosition =
MathUtil.EaseBoth(initialPos[i], goalPos[i], MathUtil.EaseBoth(models[i].initPos, models[i].goalPos,
(tick + 0f) / finalTick); //0f for floating point div (tick + 0f) / finalTick); //0f for floating point div
} }
else else
for (int i = 0; i < transforms.Count; i++) for (int i = 0; i < models.Count; i++)
{ {
transforms[i].localPosition = models[i].tf.localPosition =
MathUtil.EaseBoth(goalPos[i], initialPos[i], MathUtil.EaseBoth(models[i].goalPos, models[i].initPos,
(tick + 0f) / finalTick); //0f for floating point div (tick + 0f) / finalTick); //0f for floating point div
} }
tick++; tick++;
@@ -53,9 +52,7 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler
{ {
if (!explode) // before switching to true if (!explode) // before switching to true
{ {
initialPos.Clear(); models.Clear();
goalPos.Clear();
transforms.Clear();
foreach (Transform child in baseModel.GetComponentsInChildren<Transform>()) foreach (Transform child in baseModel.GetComponentsInChildren<Transform>())
{ {
var cmb = child.GetComponent<ChildModelBehaviour>(); var cmb = child.GetComponent<ChildModelBehaviour>();
@@ -64,13 +61,11 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler
continue; //only for basemodel continue; //only for basemodel
} }
Port port = cmb.GetParentPort(); Port port = cmb.GetParentPort();
initialPos.Add(child.localPosition); models.Add(new ExploderModel(port, cmb.ChildModel, child));
goalPos.Add(child.localPosition + port.ExplodeDirection);
transforms.Add(child);
} }
} }
text.text = explode ? "Explode" : "Unexplode"; text.text = explode ? "Explode" : "Unexplode";
cms.SetActive(explode); //cms.SetActive(explode);
explode = !explode; explode = !explode;
tick = 0; tick = 0;
} }
@@ -79,21 +74,19 @@ public class ExplodeModel : MonoBehaviour, IResettable, IPointerDownHandler
{ {
if (explode) if (explode)
{ {
for (int i = 0; i < transforms.Count; i++) for (int i = 0; i < models.Count; i++)
{ {
if (transforms[i] == null) if (models[i].tf == null)
{ {
Debug.LogWarning($"Skipping ChildModel {i}"); Debug.LogWarning($"Skipping ChildModel {i}");
continue; continue;
} }
transforms[i].localPosition = initialPos[i]; //reset all models[i].tf.localPosition = models[i].initPos; //reset all
} }
} }
explode = false; explode = false;
text.text = "Explode"; text.text = "Explode";
tick = finalTick + 1; tick = finalTick + 1;
initialPos.Clear(); models.Clear();
goalPos.Clear();
transforms.Clear();
} }
} }

View File

@@ -0,0 +1,20 @@
using UnityEngine;
public class ExploderModel
{
public Port port;
public ChildModel model;
public Transform tf; //pointer to cmb pos
public Vector3 initPos;
public Vector3 goalPos;
public ExploderModel(Port port, ChildModel model, Transform tf)
{
this.port = port;
this.model = model;
this.tf = tf;
initPos = tf.localPosition;
goalPos = tf.localPosition + port.ExplodeDirection;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 63d5a13bc20e4c76a19bcfa5ccc2afa7
timeCreated: 1752321245