From 5f9e8f979deb94e9219113ed09b49142c040cb57 Mon Sep 17 00:00:00 2001 From: Simon O'Shea Date: Mon, 31 Jul 2023 18:45:01 -0400 Subject: import successful, grid has visuals cell values and grid lines are displayed. no interaction available yet. --- .../CodeMonkey/MonoBehaviours/CameraFollow.cs | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs (limited to 'Pathfinding Visualizer/Assets/CodeMonkey/MonoBehaviours/CameraFollow.cs') 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 GetCameraFollowPositionFunc; + private Func GetCameraZoomFunc; + + public void Setup(Func GetCameraFollowPositionFunc, Func 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(); + } + + public void SetCameraFollowPosition(Vector3 cameraFollowPosition) { + SetGetCameraFollowPositionFunc(() => cameraFollowPosition); + } + + public void SetGetCameraFollowPositionFunc(Func GetCameraFollowPositionFunc) { + this.GetCameraFollowPositionFunc = GetCameraFollowPositionFunc; + } + + public void SetCameraZoom(float cameraZoom) { + SetGetCameraZoomFunc(() => cameraZoom); + } + + public void SetGetCameraZoomFunc(Func 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 -- cgit v1.3.1-4-g156e