PageRenderTime 42ms CodeModel.GetById 20ms app.highlight 18ms RepoModel.GetById 1ms app.codeStats 0ms

/New Unity Project/Assets/Javascript Scripts/CameraControl.js

https://github.com/TacticsMMO/Tactics
JavaScript | 169 lines | 134 code | 30 blank | 5 comment | 29 complexity | 8c735547fe725dd7c09daee82685bc6a MD5 | raw file
  1#pragma strict
  2 
  3public var TargetLookAt : Transform;
  4 
  5public var Distance : float = 330.0;
  6public var DistanceMin : float = 10.0;
  7public var DistanceMax : float = 1000.0;  
  8private var mouseX : float = 0.0;
  9private var mouseY : float = 0.0;
 10private var startingDistance : float = 330.0; 
 11private var desiredDistance : float = 330.0;  
 12public var X_MouseSensitivity : float = 5.0;
 13public var Y_MouseSensitivity : float = 5.0;
 14public var MouseWheelSensitivity : float = 100.0;
 15public var Y_MinLimit : float = 0.0;
 16public var Y_MaxLimit : float = 330.0;   
 17public var DistanceSmooth : float = 0.05;   
 18private var velocityDistance : float = 0.0; 
 19private var desiredPosition : Vector3 = Vector3.zero;   
 20public var X_Smooth : float = 0.05;
 21public var Y_Smooth : float = 0.1;
 22private var velX : float = 0.0;
 23private var velY : float = 0.0;
 24private var velZ : float = 0.0;
 25private var position : Vector3 = Vector3.zero;
 26
 27// map limits for wasd
 28public var map_minX : float = 20;
 29public var map_maxX : float = 284;
 30public var map_minZ : float = 10;
 31public var map_maxZ : float = 280;
 32public var cur_X : float;
 33public var cur_Z : float;
 34public var moveSpeed : float = 10;
 35public var FocusPoint : GameObject;
 36public var cameraVector : Vector3;
 37
 38 
 39 
 40function Start() 
 41{
 42	    
 43    FocusPoint = GameObject.FindWithTag("Focus");
 44    cur_X = FocusPoint.transform.position.x;
 45    cur_Z = FocusPoint.transform.position.z;
 46    Distance = Mathf.Clamp(Distance, DistanceMin, DistanceMax);
 47    startingDistance = Distance;
 48    Reset();
 49}
 50 
 51function LateUpdate()
 52{
 53    if (TargetLookAt == null)
 54       return;
 55 
 56    HandlePlayerInput();
 57 
 58    CalculateDesiredPosition();
 59 
 60    UpdatePosition();
 61}
 62 
 63function HandlePlayerInput()
 64{
 65    var deadZone = 0.01; // mousewheel deadZone
 66 
 67    if (Input.GetMouseButton(1))
 68    {
 69       mouseX += Input.GetAxis("Mouse X") * X_MouseSensitivity;
 70       mouseY -= Input.GetAxis("Mouse Y") * Y_MouseSensitivity;
 71    }
 72 
 73    // this is where the mouseY is limited - Helper script
 74    mouseY = ClampAngle(mouseY, Y_MinLimit, Y_MaxLimit);
 75 
 76    // get Mouse Wheel Input
 77    if (Input.GetAxis("Mouse ScrollWheel") < -deadZone || Input.GetAxis("Mouse ScrollWheel") > deadZone)
 78    {
 79       desiredDistance = Mathf.Clamp(Distance - (Input.GetAxis("Mouse ScrollWheel") * MouseWheelSensitivity), 
 80                                                 DistanceMin, DistanceMax);
 81    }
 82    
 83    
 84    
 85    if (Input.GetKey(KeyCode.W)){
 86    	cameraVector = FocusPoint.transform.position + Camera.mainCamera.transform.forward;
 87    	if (cameraVector.x > map_minX && cameraVector.x < map_maxX && cameraVector.z > map_minZ && cameraVector.z < map_maxZ){
 88    		FocusPoint.transform.position += Camera.mainCamera.transform.forward;
 89    		cur_X = FocusPoint.transform.position.x;
 90    		cur_Z = FocusPoint.transform.position.z;
 91    		}
 92    } 
 93    
 94    if (Input.GetKey(KeyCode.S)){
 95    	cameraVector = FocusPoint.transform.position - Camera.mainCamera.transform.forward;
 96    	if (cameraVector.x > map_minX && cameraVector.x < map_maxX && cameraVector.z > map_minZ && cameraVector.z < map_maxZ){
 97    		FocusPoint.transform.position -= Camera.mainCamera.transform.forward;
 98    		cur_X = FocusPoint.transform.position.x;
 99    		cur_Z = FocusPoint.transform.position.z;
100    		}
101    }
102    
103    if (Input.GetKey(KeyCode.A)){
104    	cameraVector = FocusPoint.transform.position - Camera.mainCamera.transform.right;
105    	if (cameraVector.x > map_minX && cameraVector.x < map_maxX && cameraVector.z > map_minZ && cameraVector.z < map_maxZ){
106    		FocusPoint.transform.position -= Camera.mainCamera.transform.right;
107    		cur_Z = FocusPoint.transform.position.z;
108    		cur_X = FocusPoint.transform.position.x;
109    		}
110    }
111    
112    if (Input.GetKey(KeyCode.D)){
113    	cameraVector = FocusPoint.transform.position + Camera.mainCamera.transform.right;
114    	if (cameraVector.x > map_minX && cameraVector.x < map_maxX && cameraVector.z > map_minZ && cameraVector.z < map_maxZ){
115    		FocusPoint.transform.position += Camera.mainCamera.transform.right;
116    		cur_Z = FocusPoint.transform.position.z;
117    		cur_X = FocusPoint.transform.position.x;
118    		}
119    }
120}
121 
122function CalculateDesiredPosition()
123{
124    // Evaluate distance
125    Distance = Mathf.SmoothDamp(Distance, desiredDistance, velocityDistance, DistanceSmooth);
126 
127    // Calculate desired position -> Note : mouse inputs reversed to align to WorldSpace Axis
128    desiredPosition = CalculatePosition(mouseY, mouseX, Distance);
129}
130 
131function CalculatePosition(rotationX : float, rotationY : float, distance : float)
132{
133    var direction : Vector3 = Vector3(0, 0, -distance);
134    var rotation : Quaternion = Quaternion.Euler(rotationX, rotationY, 0);
135    return TargetLookAt.position + (rotation * direction);
136}
137 
138function UpdatePosition()
139{
140    var posX = Mathf.SmoothDamp(position.x, desiredPosition.x, velX, X_Smooth);
141    var posY = Mathf.SmoothDamp(position.y, desiredPosition.y, velY, Y_Smooth);
142    var posZ = Mathf.SmoothDamp(position.z, desiredPosition.z, velZ, X_Smooth);
143    position = Vector3(posX, posY, posZ);
144 
145    transform.position = position;
146 
147    transform.LookAt(TargetLookAt);
148}
149 
150function Reset() 
151{
152    mouseX = 0;
153    mouseY = 10;
154    Distance = startingDistance;
155    desiredDistance = Distance;
156}
157 
158function ClampAngle(angle : float, min : float, max : float)
159{
160    while (angle < -360 || angle > 360)
161    {
162       if (angle < -360)
163         angle += 360;
164       if (angle > 360)
165         angle -= 360;
166    }
167 
168    return Mathf.Clamp(angle, min, max);
169}