Ejemplo n.º 1
0
    /// <summary>
    /// A prewritten sequence of commands to give to the camera. Looks at a given object for a given amount of time, then goes back to what it was looking at before.
    /// </summary>
    /// <param name="lookAtObject"></param>
    /// <param name="panTime"></param>
    /// <param name="lookZoom"></param>
    /// <param name="lookTime"></param>
    /// <param name="returnTime"></param>
    /// <returns></returns>
    public IEnumerator <object> LookAndReturn(GameObject lookAtObject, float panTime, float lookZoom, float lookTime, float returnTime)
    {
        CameraQueue lookAtQueue = new CameraQueue();

        GameObject originalFocus = cameraFocus;
        //float originalZoom = cameraZoom;
        float originalZoom = intendedZoom;

        lookAtQueue.AddChangeZoom(lookZoom, panTime);           // pan to given object with given zoom, in given time
        lookAtQueue.AddMoveFocus(lookAtObject, panTime);
        lookAtQueue.AddWait(panTime);

        lookAtQueue.AddFollowFocus(lookAtObject, lookTime);             // look at object for given time
        lookAtQueue.AddWait(lookTime);

        lookAtQueue.AddChangeZoom(originalZoom, returnTime);            // pan back to original object with original zoom in given time
        lookAtQueue.AddMoveFocus(originalFocus, returnTime);

        StartCoroutine(CameraSequence(lookAtQueue));
        yield break;
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Accepts a queue of commands to give to the camera
    /// </summary>
    /// <param name="queue"></param>
    /// <returns></returns>
    public IEnumerator <object> CameraSequence(CameraQueue queue)
    {
        int thisCoroutine;          // what number this sequence coroutine is since the last normal sequence coroutine end

        if (numCamSequence == 0)    // set the number of sequence coroutines since the last normal sequence coroutine end, and the number of this coroutine in particular
        {
            numCamSequence = 1;
            thisCoroutine  = 1;
        }
        else
        {
            numCamSequence++;
            thisCoroutine = numCamSequence;
        }

        //Debug.Log("Starting sequence: " + thisCoroutine);

        Stop();         // stops any existing stuff that might mess up the sequence

        sequenceMode = true;
        bool loop = true;

        while (loop && !queue.Empty())                  // only loop while other exit conditions are not met, and queue still has commands to give
        {
            if (!sequenceMode)
            {
                loop = false;
                //Debug.Log("Not sequence mode, exiting loop");
            }
            else if (thisCoroutine != numCamSequence)                 // if this is not the newest coroutine, end
            {
                loop = false;
                //Debug.Log("Not newest coroutine, exiting loop");
            }
            else
            {
                QueCard card = queue.Dequeue();         // get next command
                switch (card.type)                      // give next command
                {
                case QueType.wait:
                    yield return(new WaitForSeconds(card._float1));

                    //Debug.Log("Wait");
                    break;

                case QueType.forceFocus:
                    ForceFocus(card._object, true);
                    //Debug.Log("ForceFocus");
                    yield return(null);

                    break;

                case QueType.moveFocus:
                    StartCoroutine(MoveFocus(card._object, card._float1, true));
                    //Debug.Log("MoveFocus");
                    break;

                case QueType.followFocus:
                    StartCoroutine(FollowFocus(card._object, card._float1, true));
                    //Debug.Log("FollowFocus");
                    break;

                case QueType.forceZoom:
                    ForceZoom(card._float2, true);
                    //Debug.Log("ForceZoom");
                    yield return(null);

                    break;

                case QueType.changeZoom:
                    StartCoroutine(ChangeZoom(card._float2, card._float1, true));
                    //Debug.Log("ChangeZoom");
                    break;

                case QueType.shakeCamera:
                    StartCoroutine(CameraShake(card._float2, card._float1, true));
                    //Debug.Log("CameraShake");
                    break;

                default:
                    yield return(null);

                    break;
                }
            }
        }
        //Debug.Log("Ending sequence: " + thisCoroutine);

        if (thisCoroutine == numCamSequence)              // only change mode back to still if this is the newest coroutine ending
        {
            numCamSequence = 0;
            if (sequenceMode == true)
            {
                sequenceMode = false;
                //Debug.Log("Ending last sequence: " + thisCoroutine);
                //Debug.Log("Last MoveFocus closed");
            }
        }

        yield break;
    }