IEnumerator LevelCompositionCoroutine()
    {
        int iCurrentObjectLeft = vObjects.Count;


        GLOBALS.Player1.Hide();
        GLOBALS.Player2.Hide();


        UnityEditor.Selection.activeObject = GLOBALS.Player2.transform.GetChild(0).gameObject;

        while (iCurrentObjectLeft > 0)
        {
            for (int i = 0; i < vObjects.Count; i++)
            {
                GO_Position p = vObjects[i];

                if (p.Done)
                {
                    continue;
                }

                p.Interpolant += Time.unscaledDeltaTime / p.Distance * 50f;

                if (p.Interpolant > 1.0f)
                {
                    p.Done = true;
                    iCurrentObjectLeft--;
                    print(iCurrentObjectLeft);
                }

                p.obj.transform.position = Vector3.Lerp(p.Decom_Position, p.Original_Position, p.Interpolant);
            }

            yield return(null);
        }

        for (int i = 0; i < vObjects.Count; i++)
        {
            vObjects[i].Done = false;
        }

        GLOBALS.Player1.Show();
        GLOBALS.Player2.Show();

        GLOBALS.Player1.Spawn();
        GLOBALS.Player2.Spawn();

        bInLevelTransition = false;
    }
    IEnumerator LevelDecompositionCoroutine()
    {
        bInLevelTransition = true;

        int iCurrentObjectLeft = vObjects.Count;

        yield return(new WaitForSecondsRealtime(1.0f));

        while (iCurrentObjectLeft > 0)
        {
            for (int i = 0; i < vObjects.Count; i++)
            {
                GO_Position p = vObjects[i];

                if (p.Done)
                {
                    continue;
                }

                p.Interpolant += Time.unscaledDeltaTime / p.Distance * 200f;

                if (p.Interpolant > 1.0f)
                {
                    p.Done        = true;
                    p.Interpolant = 0.0f;
                    iCurrentObjectLeft--;
                    print(iCurrentObjectLeft);
                }

                p.obj.transform.position = Vector3.Lerp(p.Original_Position, p.Decom_Position, p.Interpolant);
            }

            yield return(null);
        }

        GLOBALS.Player1.Hide();
        GLOBALS.Player2.Hide();
    }
    private void AddObj(GameObject o)
    {
        Vector3 vDecom_Position = Camera.main.ViewportToWorldPoint(
            new Vector3(
                Random.Range(1.1f, 3.5f) * (Random.Range(0, 100) > 50 ? 1 : -1),
                Random.Range(1.1f, 3.5f) * (Random.Range(0, 100) > 50 ? 1 : -1),
                Random.Range(1.1f, 3.5f) * (Random.Range(0, 100) > 50 ? 1 : -1)
                )
            );

        /*
         * Vector3 vDecom_Position = new Vector3 (
         *      Random.Range( -0.2f, 0.3f ) * vObjects.Count + Random.Range( -20, 21 ),
         *      0.0f,
         *      Random.Range( -0.2f, 0.3f ) * vObjects.Count + Random.Range( -20, 21 )
         * );
         */
        GO_Position p = new GO_Position(o, o.transform.position, vDecom_Position);

        p.Distance = Vector3.Distance(o.transform.position, vDecom_Position);
        vObjects.Add(p);

        o.transform.position = vDecom_Position;
    }