public void RemoveAttractor(CameraAttractor attractor) { activeAttractors.Remove(attractor); }
public void AddAttractor(CameraAttractor attractor) { activeAttractors.Add(attractor); }
public void DisableAttractor(CameraAttractor a) { m_activeAttractors.Remove(a); }
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); }
public void EnableAttractor(CameraAttractor a) { m_activeAttractors.Add(a); }