Entry 6381
BirdEye.js
Submitted by anonymous
on Aug. 27, 2010 at 12:09 p.m.
Language: JavaScript. Code size: 4.2 KB.
var maxAngleInDegree : float = 70.0; var minAngleInDegree : float = 30.0; var maxZoomIn : float = 5.0; var maxZoomOut : float = -5.0; var panSensitivity : float = 1.0; var zoomFactor : float = 1.0; var invertMouse : boolean = true; private var g_prevMousePos : Vector3; private var g_camStartHeight : float; private var g_zoomValue : float = 0.0; private var g_leftMouseDown : boolean = false; private var g_rightMouseDown : boolean = false; function Start() : void { g_camStartHeight = camera.transform.position.y; } function FixedUpdate () : void { // Must track down button pressure manually because Input.GetMouseButtonDown() isn't reliable. // Sometimes, the event isn't fired in the update. if( Input.GetMouseButton(0) && false == g_leftMouseDown ) { // Left button down g_leftMouseDown = true; g_prevMousePos = Input.mousePosition; } else if( false == Input.GetMouseButton(0) && g_leftMouseDown ) { // Left button up g_leftMouseDown = false; } if( Input.GetMouseButton(1) && false == g_rightMouseDown ) { // Right button down g_rightMouseDown = true; g_prevMousePos = Input.mousePosition; } else if( false == Input.GetMouseButton(1) && g_rightMouseDown ) { // Right button up g_rightMouseDown = false; } var delta : Vector3; if( Input.GetMouseButton(0) || Input.GetMouseButton(1) ) { var curMousePos : Vector3 = Input.mousePosition; delta = curMousePos - g_prevMousePos; if( invertMouse ) { delta = -delta; } g_prevMousePos = curMousePos; } if( Input.GetMouseButton(0) ) { // PAN if( Vector3.zero != delta ) { // Get the camera direction var rightDir : Vector3 = camera.transform.right; var frontDir : Vector3 = Vector3.Cross( rightDir, Vector3.up ); var direction : Vector3 = frontDir * delta.y + rightDir * delta.x; // Compute the speed ratio (slower if near the ground) var speedRatio : float = camera.transform.position.y / g_camStartHeight; speedRatio *= speedRatio; // Move the camera camera.transform.Translate( direction * panSensitivity * speedRatio, Space.World ); } } else if( Input.GetMouseButton(1) ) { // ROTATION if( Vector3.zero != delta ) { var prevCamTrans : Transform = camera.transform; // Compute the point to rotate around var worldForward = Vector3.Cross( camera.transform.right, Vector3.up ); var alphaDeg = Vector3.Angle( -(camera.transform.forward), -worldForward ); var alpha = alphaDeg * Mathf.Deg2Rad; var hypo : float = 1 / ( Mathf.Tan(alpha) / camera.transform.position.y ); var p : Vector3 = camera.transform.position + camera.transform.forward * hypo; var rotAnglesDeg : Vector2; rotAnglesDeg.x = delta.x; var totalAngleDeg : float = alphaDeg + delta.y; if( totalAngleDeg > maxAngleInDegree ) { rotAnglesDeg.y = delta.y - ( totalAngleDeg - maxAngleInDegree ); } else if( totalAngleDeg < minAngleInDegree ) { rotAnglesDeg.y = delta.y - ( totalAngleDeg - minAngleInDegree ); } else { rotAnglesDeg.y = delta.y; } camera.transform.RotateAround( p, Vector3.up, -rotAnglesDeg.x ); camera.transform.RotateAround( p, camera.transform.right, rotAnglesDeg.y ); } } else { // ZOOM var zoomValue : float = Input.GetAxis( "Mouse ScrollWheel" ); if( false == Mathf.Approximately(0.0, zoomValue) ) { var dir : Vector3 = camera.transform.forward; if( zoomValue > 0.0 ) { if( g_zoomValue < maxZoomIn ) { g_zoomValue += zoomValue; if( g_zoomValue > maxZoomIn ) { // Recalibrate zoomValue = zoomValue - (g_zoomValue - maxZoomIn); g_zoomValue = maxZoomIn; } camera.transform.Translate( dir * zoomValue * zoomFactor, Space.World ); } } else { if( g_zoomValue > maxZoomOut ) { g_zoomValue += zoomValue; if( g_zoomValue < maxZoomOut ) { // Recalibrate zoomValue = zoomValue - (g_zoomValue - maxZoomOut); g_zoomValue = maxZoomOut; } camera.transform.Translate( dir * zoomValue * zoomFactor, Space.World ); } } } } }
This snippet took 0.02 seconds to highlight.
Back to the Entry List or Home.