Files
industrialize-unity/Assets/Scripts/Player/CameraMovement.cs
2022-05-29 16:10:42 +02:00

100 lines
2.2 KiB
C#

using UnityEngine;
public class CameraMovement : MonoBehaviour
{
[Header("Speed")]
[SerializeField]
float speed = 100f;
[SerializeField]
float fastSpeed = 200f;
[SerializeField]
float slowSpeed = 30f;
[Header("Zoom")]
[SerializeField]
float maxCameraSize = 100f;
[SerializeField]
float minCameraSize = 3f;
[SerializeField]
float cameraSizeSteps = 3f;
Vector2 cameraMovement;
float currentSpeed = 0.0f;
bool drag = false;
Vector3 origin;
Vector3 difference;
Camera cam;
Rigidbody2D rb;
void Start()
{
cam = GetComponent<Camera>();
rb = GetComponent<Rigidbody2D>();
}
void LateUpdate()
{
if (Input.GetMouseButton(2))
{
difference = (cam.ScreenToWorldPoint(Input.mousePosition) - cam.transform.position);
if (!drag)
{
drag = true;
origin = cam.ScreenToWorldPoint(Input.mousePosition);
}
}
else
{
drag = false;
}
if (drag)
{
cam.transform.position = origin - difference;
}
}
void Update()
{
currentSpeed = speed;
cameraMovement.x = Input.GetAxis("Horizontal");
cameraMovement.y = Input.GetAxis("Vertical");
if (Input.GetButton("CameraFast"))
currentSpeed = fastSpeed;
else if (Input.GetButton("CameraSlow"))
currentSpeed = slowSpeed;
if (Input.GetAxis("Mouse ScrollWheel") > 0f)
ZoomCameraToPoint(cam.ScreenToWorldPoint(Input.mousePosition), cameraSizeSteps);
else if (Input.GetAxis("Mouse ScrollWheel") < 0f)
ZoomCameraToPoint(cam.ScreenToWorldPoint(Input.mousePosition), -cameraSizeSteps);
}
void FixedUpdate()
{
rb.MovePosition(rb.position + cameraMovement * currentSpeed * Time.fixedDeltaTime);
}
void ZoomCameraToPoint(Vector3 point, float amount)
{
float multiplier = (1.0f / cam.orthographicSize * amount);
transform.position += (point - transform.position) * multiplier;
cam.orthographicSize -= amount;
cam.orthographicSize = Mathf.Clamp(cam.orthographicSize, minCameraSize, maxCameraSize);
}
}