Esempio n. 1
0
    private IEnumerator AnimateCorner(int point)
    {
        ResetParts(Points[point].transform, false, false, true);

        GameObject torus = MakeTorus.GenerateTube(HeadSize, 1, true, 0, 0.1f);

        Vector3 origin = Points[point].transform.position;

        origin.x -= HeadSize;
        torus.transform.position = origin;

        torus.transform.rotation = Points[point].transform.rotation;

        MeshFilter filter = torus.GetComponent <MeshFilter>();

        float   angle = 0;
        float   t     = 0;
        Vector3 pivot = origin;

        pivot.y += HeadSize;

        Vector3 rotationOffset = new Vector3(0, -HeadSize, 0);
        float   cornerSpeed    = MoveSpeed * Mathf.PI * HeadSize * 0.5f;

        while (t < cornerSpeed)
        {
            angle = 90 * (t / cornerSpeed);
            MakeTorus.GenerateMesh(filter, HeadSize, 1, true, 0, angle);

            endCap.transform.rotation = Points[point].transform.rotation * Quaternion.Euler(angle, 0, 0);
            endCap.transform.position = pivot + (Quaternion.Euler(0, 0, angle) * rotationOffset);

            yield return(null);

            t += Time.deltaTime;
        }

        MakeTorus.GenerateMesh(filter, HeadSize, 1, true, 0, 90);
        StartCoroutine(AnimateEnd(point));
    }
Esempio n. 2
0
    private IEnumerator AnimateCorner(Vector3 position, Quaternion rotation)
    {
        ResetParts(position, rotation, false, false, true);

        GameObject torus = MakeTorus.GenerateTube(Size, 1, true, 0, 0.1f);

        torus.GetComponent <MeshRenderer>().material = Material;
        torus.transform.parent = PipeParent.transform;

        Vector3 origin = position - (rotation * (Vector3.left * Size));

        torus.transform.localPosition = origin;
        torus.transform.localRotation = rotation * Quaternion.Euler(0, 0, 90) * Quaternion.Euler(-90, 0, 0);

        MeshFilter filter = torus.GetComponent <MeshFilter>();

        float   angle = 0;
        float   t     = 0;
        Vector3 pivot = origin + (rotation * (Vector3.forward * Size));

        float cornerSpeed = Speed * Mathf.PI * Size * 0.5f;

        while (t < cornerSpeed)
        {
            angle = 90 * (t / cornerSpeed);
            MakeTorus.GenerateMesh(filter, Size, 1, true, 0, angle);

            endCap.transform.localRotation = torus.transform.localRotation * Quaternion.Euler(angle, 0, 0);
            endCap.transform.localPosition = pivot + (endCap.transform.localRotation * Vector3.up * Size);

            yield return(null);

            t += Time.deltaTime;
        }

        MakeTorus.GenerateMesh(filter, Size, 1, true, 0, 90);
    }