Files
vr-configurator/vr-configurator/Assets/Scripts/Transform/ExplodeModel.cs
2025-07-01 22:19:33 +02:00

80 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
public class ExplodeModel : MonoBehaviour
{
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;
static readonly int finalTick = 60 * 2; // 60fps * 2sek
bool explode = false;
int tick = finalTick + 1;
void Start()
{
GetComponent<Button>().onClick.AddListener(Explode);
}
void Update()
{
if (tick <= finalTick)
{
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
}
else
for (int i = 0; i < baseModel.transform.childCount; i++)
{
baseModel.transform.GetChild(i).transform.localPosition =
MathUtil.EaseBoth(goalPos[i], initialPos[i],
(tick + 0f) / finalTick); //0f for floating point div
}
tick++;
}
}
void Explode()
{
pressed = !pressed;
if (!pressed)
{
return;
}
if (!explode) // before switching to true
{
initialPos.Clear();
goalPos.Clear();
foreach (Transform child in baseModel.transform)
{
ChildModel cm = child.GetComponent<ChildModelBehaviour>().ChildModel;
Port port = mm.GetPortForChildModel(cm);
initialPos.Add(child.localPosition);
goalPos.Add(child.localPosition + port.ExplodeDirection);
}
}
text.text = explode ? "Explode" : "Unexplode";
cms.SetActive(explode);
explode = !explode;
tick = 0;
}
}