80 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|