Exemplo n.º 1
0
 public void RemoveAttractor(CameraAttractor attractor)
 {
     activeAttractors.Remove(attractor);
 }
Exemplo n.º 2
0
 public void AddAttractor(CameraAttractor attractor)
 {
     activeAttractors.Add(attractor);
 }
Exemplo n.º 3
0
 public void DisableAttractor(CameraAttractor a)
 {
     m_activeAttractors.Remove(a);
 }
Exemplo n.º 4
0
    void FixedUpdate()
    {
        // // Resize outer ring with camera dolly out
        // Camera camera = GetComponent<Camera>();
        // worldPos = camera.ScreenToWorldPoint( new Vector3( Screen.width/2, Screen.height, transform.position.y ) );
        // cube.transform.position = worldPos;
        // float relativeToPlayer = worldPos.z - transform.position.z;
        // // print( "worldPos: " + worldPos );
        // // print( "relativeToPlayer: " + relativeToPlayer );
        // // outerRing = Mathf.Max( 13, Mathf.Abs( relativeToPlayer ) );
        // outerRing = Mathf.Abs( relativeToPlayer ) * 1f;
        // innerRing = outerRing * 0f;


        // // Lift camera vector
        // Vector3 lift = Vector3.up * Mathf.Min( maxLift - relCameraPos.y, Mathf.Max(0, snake.Size - 6) * liftStep );

        // // Move camera in front of where snake is going
        // forwardAttractor = player.position + player.forward * forward;

        // // Calculate vector for average position of snake cells
        // Vector3 sumVector = Vector3.zero;
        // int count = 0;
        // Chain chain = snake.body.chain;
        // ChainNode node = chain.head;
        // while( node != null )
        // {
        //  sumVector += node.prefab.transform.position;
        //  count++;
        //  node = node.next;
        // }
        // snakeBodyAttractor = sumVector / count;

        // // Influence...
        // float disFromCameraCenter = (transform.position - player.position - relCameraPos - lift).magnitude;
        // float influence = ( disFromCameraCenter - innerRing ) / (outerRing - innerRing);
        // influence = Mathf.Max( influence, 0 );
        // // print( "disFromCameraCenter: " + disFromCameraCenter );
        // // print( "influence: " + influence );

        // // Calculate and apply final camera position
        // // finalPosition = Vector3.Lerp( forwardAttractor, snakeBodyAttractor, 0.5f - influence/2 ) + relCameraPos + lift;
        // finalPosition = Vector3.Lerp( forwardAttractor, snakeBodyAttractor, forwardVsBody ) + relCameraPos + lift;
        // transform.position = Vector3.Lerp( transform.position, finalPosition, smooth * Time.deltaTime );

        //////////////////////////////////////////////////////////// EO  //

        // Get camera
        Camera camera = GetComponent <Camera>();

        // Get points

        // Vertical distance of camera origin to snake
        float h = camera.transform.position.y - snake.transform.position.y;

        // Get corner points of screen in world coordinates
        Vector3 TR = camera.ScreenToWorldPoint(new Vector3(
                                                   Screen.width - Screen.width * paddingHorizontal / 2,
                                                   Screen.height - Screen.height * paddingVertical / 2,
                                                   h));
        Vector3 TL = camera.ScreenToWorldPoint(new Vector3(
                                                   Screen.width * paddingHorizontal / 2,
                                                   Screen.height - Screen.height * paddingVertical / 2,
                                                   h));
        Vector3 BR = camera.ScreenToWorldPoint(new Vector3(
                                                   Screen.width - Screen.width * paddingHorizontal / 2,
                                                   Screen.height * paddingVertical / 2,
                                                   h));
        Vector3 BL = camera.ScreenToWorldPoint(new Vector3(
                                                   Screen.width * paddingHorizontal / 2,
                                                   Screen.height * paddingVertical / 2,
                                                   h));

        // Draw boundary rectangle
        if (DEBUG)
        {
            Debug.DrawLine(TR, TL);
        }
        if (DEBUG)
        {
            Debug.DrawLine(TR, BR);
        }
        if (DEBUG)
        {
            Debug.DrawLine(TL, BL);
        }
        if (DEBUG)
        {
            Debug.DrawLine(BR, BL);
        }

        // Get distances over the boundary
        float disTop    = (snake.transform.position - TR).z;
        float disBottom = (BR - snake.transform.position).z;
        float disLeft   = (TL - snake.transform.position).x;
        float disRight  = (snake.transform.position - TR).x;

        finalPosition =
            Vector3.forward * Mathf.Max(0, disTop) * boundaryPower
            - Vector3.forward * Mathf.Max(0, disBottom) * boundaryPower
            - Vector3.right * Mathf.Max(0, disLeft) * boundaryPower
            + Vector3.right * Mathf.Max(0, disRight) * boundaryPower
        ;
        // transform.position = Vector3.Lerp( transform.position, finalPosition, smooth * 2 * Time.deltaTime );



        forwardAttractor = player.position + player.forward * lookForwardDis;
        Vector3 attractors = CameraAttractor.GetAttractorsVector(player.position, forwardAttractor);

        finalPosition += attractors + relCameraPos;

        // Apply final position
        transform.position = Vector3.Lerp(transform.position, finalPosition, smooth * Time.deltaTime);
    }
Exemplo n.º 5
0
 public void EnableAttractor(CameraAttractor a)
 {
     m_activeAttractors.Add(a);
 }