Пример #1
0
    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);
    }
Пример #2
0
    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);
    }