summaryrefslogtreecommitdiff
path: root/Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs
diff options
context:
space:
mode:
authorSimon O'Shea <osheas1@wit.edu>2023-07-31 18:45:01 -0400
committerSimon O'Shea <osheas1@wit.edu>2023-07-31 18:45:01 -0400
commit5f9e8f979deb94e9219113ed09b49142c040cb57 (patch)
treea67bd606205f7fb28e48d351028b3478bc49145b /Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs
parent4699ce72871eaa6ee27c01971383b9d1fced1946 (diff)
import successful, grid has visuals
cell values and grid lines are displayed. no interaction available yet.
Diffstat (limited to 'Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs')
-rw-r--r--Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs117
1 files changed, 117 insertions, 0 deletions
diff --git a/Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs b/Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs
new file mode 100644
index 0000000..b52597d
--- /dev/null
+++ b/Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs
@@ -0,0 +1,117 @@
+/*
+ ------------------- Code Monkey -------------------
+
+ Thank you for downloading the Code Monkey Utilities
+ I hope you find them useful in your projects
+ If you have any questions use the contact form
+ Cheers!
+
+ unitycodemonkey.com
+ --------------------------------------------------
+ */
+
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace CodeMonkey.MonoBehaviours {
+
+ /*
+ * Script to handle Camera Movement and Zoom
+ * Place on Camera GameObject
+ * */
+ public class CameraFollow : MonoBehaviour {
+
+ public static CameraFollow Instance { get; private set; }
+
+ private Camera myCamera;
+ private Func<Vector3> GetCameraFollowPositionFunc;
+ private Func<float> GetCameraZoomFunc;
+
+ public void Setup(Func<Vector3> GetCameraFollowPositionFunc, Func<float> GetCameraZoomFunc, bool teleportToFollowPosition, bool instantZoom) {
+ this.GetCameraFollowPositionFunc = GetCameraFollowPositionFunc;
+ this.GetCameraZoomFunc = GetCameraZoomFunc;
+
+ if (teleportToFollowPosition) {
+ Vector3 cameraFollowPosition = GetCameraFollowPositionFunc();
+ cameraFollowPosition.z = transform.position.z;
+ transform.position = cameraFollowPosition;
+ }
+
+ if (instantZoom) {
+ myCamera.orthographicSize = GetCameraZoomFunc();
+ }
+ }
+
+ private void Awake() {
+ Instance = this;
+ myCamera = transform.GetComponent<Camera>();
+ }
+
+ public void SetCameraFollowPosition(Vector3 cameraFollowPosition) {
+ SetGetCameraFollowPositionFunc(() => cameraFollowPosition);
+ }
+
+ public void SetGetCameraFollowPositionFunc(Func<Vector3> GetCameraFollowPositionFunc) {
+ this.GetCameraFollowPositionFunc = GetCameraFollowPositionFunc;
+ }
+
+ public void SetCameraZoom(float cameraZoom) {
+ SetGetCameraZoomFunc(() => cameraZoom);
+ }
+
+ public void SetGetCameraZoomFunc(Func<float> GetCameraZoomFunc) {
+ this.GetCameraZoomFunc = GetCameraZoomFunc;
+ }
+
+
+ private void Update() {
+ HandleMovement();
+ HandleZoom();
+ }
+
+ private void HandleMovement() {
+ if (GetCameraFollowPositionFunc == null) return;
+ Vector3 cameraFollowPosition = GetCameraFollowPositionFunc();
+ cameraFollowPosition.z = transform.position.z;
+
+ Vector3 cameraMoveDir = (cameraFollowPosition - transform.position).normalized;
+ float distance = Vector3.Distance(cameraFollowPosition, transform.position);
+ float cameraMoveSpeed = 3f;
+
+ if (distance > 0) {
+ Vector3 newCameraPosition = transform.position + cameraMoveDir * distance * cameraMoveSpeed * Time.deltaTime;
+
+ float distanceAfterMoving = Vector3.Distance(newCameraPosition, cameraFollowPosition);
+
+ if (distanceAfterMoving > distance) {
+ // Overshot the target
+ newCameraPosition = cameraFollowPosition;
+ }
+
+ transform.position = newCameraPosition;
+ }
+ }
+
+ private void HandleZoom() {
+ if (GetCameraZoomFunc == null) return;
+ float cameraZoom = GetCameraZoomFunc();
+
+ float cameraZoomDifference = cameraZoom - myCamera.orthographicSize;
+ float cameraZoomSpeed = 1f;
+
+ myCamera.orthographicSize += cameraZoomDifference * cameraZoomSpeed * Time.deltaTime;
+
+ if (cameraZoomDifference > 0) {
+ if (myCamera.orthographicSize > cameraZoom) {
+ myCamera.orthographicSize = cameraZoom;
+ }
+ } else {
+ if (myCamera.orthographicSize < cameraZoom) {
+ myCamera.orthographicSize = cameraZoom;
+ }
+ }
+ }
+ }
+
+} \ No newline at end of file