public static void ParentAndSimulate(TextMeshPro tm) { List <Rigidbody> rbs = new List <Rigidbody>(); AssemblyIO.Save(GlobalReferences.FrozenParts, 1, tempPath); foreach (GameObject go in GlobalReferences.FrozenParts.Values) { int?parentId = go.GetComponent <Part>().Parent; Destroy(go.GetComponent <ConstantForce>()); if (parentId != null && GlobalReferences.FrozenParts.ContainsKey((int)parentId)) { go.transform.parent = GlobalReferences.FrozenParts[(int)parentId].transform; Destroy(go.GetComponent <Rigidbody>()); } else { rbs.Add(go.GetComponent <Rigidbody>()); SimulationProcessHandler handler = go.AddComponent <SimulationProcessHandler>(); handlers.Add(handler); handler.TM = tm; handler.SimulationTerminated += new SimulationProcessHandler.SimulationHandler(AfterSimulation); } } foreach (Rigidbody rb in rbs) { rb.useGravity = true; rb.constraints = RigidbodyConstraints.None; } ChangeColliders(false); }
public static void ParentAndSimulate(TIExportAR exportItem = null, bool export = false) { //SaveTemp(); savePositions.Clear(); saveRotations.Clear(); rbs = new List <Rigidbody>(); foreach (GameObject go in GlobalReferences.FrozenParts.Values) { Part part = go.GetComponent <Part>(); int parentId = part.Parent; savePositions.Add(part.ID, go.transform.position); saveRotations.Add(part.ID, go.transform.rotation); MonoBehaviour.Destroy(go.GetComponent <ConstantForce>()); if (parentId != -1 && GlobalReferences.FrozenParts.ContainsKey(parentId)) { go.transform.parent = GlobalReferences.FrozenParts[parentId].transform; } else { Rigidbody rb = go.GetComponent <Rigidbody>(); if (rb != null) { rbs.Add(rb); } else { rbs.Add(go.AddComponent <Rigidbody>()); } if (export) { SimulationProcessHandler handler = go.AddComponent <SimulationProcessHandler>(); handlers.Add(handler); handler.ExportItem = exportItem; handler.Sim = export; handler.SimulationTerminated += new SimulationProcessHandler.SimulationHandler(AfterSimulation); } } } foreach (Rigidbody rb in rbs) { rb.useGravity = true; rb.constraints = RigidbodyConstraints.None; rb.ResetCenterOfMass(); } ChangeColliders(false); }