summaryrefslogtreecommitdiff
path: root/GameCode/CameraController.cs
blob: 2b9118485fab1726529c363b5835c1b7332bd296 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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);
		}
	}
}