Exemple #1
0
    protected IEnumerator SmoothMovement(GameObject obj, Vector3 pos)
    {
        float moveTime        = 0.20f;
        float inverseMoveTime = 1f / moveTime;

        //Calculate the remaining distance to move based on the square magnitude of the difference between current position and end parameter.
        //Square magnitude is used instead of magnitude because it's computationally cheaper.
        float sqrRemainingDistance = (obj.transform.position - pos).sqrMagnitude;

        //While that distance is greater than a very small amount (Epsilon, almost zero):
        while (sqrRemainingDistance > float.Epsilon)
        {
            //Find a new position proportionally closer to the end, based on the moveTime
            Vector3 newPostion = Vector3.MoveTowards(obj.transform.position, pos, inverseMoveTime * Time.deltaTime);

            /*
             * GameObject ParticleTempObj = (GameObject)Instantiate(mainProjectile);
             * ParticleTempObj.transform.position = newPostion;
             * Destroy(ParticleTempObj, 4f);
             */

            //Call MovePosition on attached Rigidbody2D and move it to the calculated position.
            obj.transform.position = newPostion;

            //Recalculate the remaining distance after moving.
            sqrRemainingDistance = (obj.transform.position - pos).sqrMagnitude;

            //Return and loop until sqrRemainingDistance is close enough to zero to end the function
            //yield return null;
            yield return(null);
        }

        List <ElementBoundDescription> bounds = mCompoundDescription.GetNewBounds();

        foreach (ElementBoundDescription bound in bounds)
        {
            var p1 = mCompoundDescription.mElements[bound.mElement1].mPosition;
            var p2 = mCompoundDescription.mElements[bound.mElement2].mPosition;

            p1   += podium.transform.position;
            p1.y += 1.5f;

            p2   += podium.transform.position;
            p2.y += 1.5f;

            GameObject boundObject = (GameObject)Instantiate(connectorTemplate, sceneContent.transform);
            boundObject.transform.position = (p1 + p2) / 2;
            //boundObject.transform.position = p1;
            boundObject.transform.LookAt(p2);
            boundObject.transform.Rotate(new Vector3(1, 0, 0), 90);
            elementsObjects.Add(boundObject);
        }

        if (mCompoundDescription.IsCompletted())
        {
            StartCoroutine(UpdatePodiumTitle(mCompoundDescription.mName + " is combined.\n Use air tap for next component."));
        }
    }