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