summaryrefslogtreecommitdiff
path: root/GameCode/CameraController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/CameraController.cs')
-rw-r--r--GameCode/CameraController.cs96
1 files changed, 96 insertions, 0 deletions
diff --git a/GameCode/CameraController.cs b/GameCode/CameraController.cs
new file mode 100644
index 0000000..2b91184
--- /dev/null
+++ b/GameCode/CameraController.cs
@@ -0,0 +1,96 @@
+using UnityEngine;
+
+public class CameraController : MonoBehaviour
+{
+ public static CameraController instance;
+
+ [SerializeField]
+ private Vector3 velocity = Vector3.zero;
+
+ [SerializeField]
+ private float cameraSpeed = 10f;
+
+ [SerializeField]
+ private float cameraBaseZoom = 10f;
+
+ [SerializeField]
+ private GameObject cameraHolder;
+
+ [SerializeField]
+ private Transform audioListenerObject;
+
+ [SerializeField]
+ private LayerMask zeroMask;
+
+ private Vector3 clickMoveOrigin;
+
+ private Vector3 cameraOrigin;
+
+ private void Awake()
+ {
+ instance = this;
+ }
+
+ private void Start()
+ {
+ Camera.main.orthographicSize = cameraBaseZoom;
+ if (audioListenerObject != null)
+ {
+ audioListenerObject.position = new Vector3(audioListenerObject.position.x, cameraBaseZoom, audioListenerObject.position.z);
+ }
+ }
+
+ private void Update()
+ {
+ UpdateMovement();
+ UpdateZoom();
+ }
+
+ private void UpdateMovement()
+ {
+ if (Input.GetKeyDown(KeyCode.C))
+ {
+ base.transform.position = Vector3.zero;
+ }
+ if (Input.GetMouseButtonDown(1) && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo, 2000f, zeroMask, QueryTriggerInteraction.Collide))
+ {
+ clickMoveOrigin = hitInfo.point;
+ cameraOrigin = base.transform.position;
+ }
+ if (Input.GetMouseButton(1))
+ {
+ if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo2, 2000f, zeroMask, QueryTriggerInteraction.Collide))
+ {
+ Vector3 vector = cameraOrigin - 2f * (hitInfo2.point - clickMoveOrigin);
+ base.transform.position = (base.transform.position + vector) / 2f;
+ }
+ return;
+ }
+ if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
+ {
+ velocity *= 1f - Time.deltaTime;
+ velocity += new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * Time.deltaTime * 2f;
+ float num = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f);
+ base.transform.Translate(velocity * Time.deltaTime * cameraSpeed * num);
+ return;
+ }
+ velocity = Vector3.zero;
+ Vector3 vector2 = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
+ if (vector2.sqrMagnitude > 0.1f)
+ {
+ float num2 = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f);
+ base.transform.Translate(vector2.normalized * Time.deltaTime * cameraSpeed * num2);
+ }
+ }
+
+ private void UpdateZoom()
+ {
+ float num = Mathf.Clamp(Camera.main.orthographicSize - Input.mouseScrollDelta.y, 1f, 50f);
+ Camera.main.orthographicSize = num;
+ cameraHolder.transform.localPosition = new Vector3(0f, 5f + 2f * num, -2f * num - 5f);
+ if (audioListenerObject != null)
+ {
+ audioListenerObject.position = new Vector3(audioListenerObject.position.x, (num + 10f) / 2f, audioListenerObject.position.z);
+ }
+ }
+}