using UnityEngine;
using UnityEngine.EventSystems;
public class CameraController : MonoBehaviour
{
public float moveSpeed = 10f;
public float rotationSpeed = 100f;
public float zoomSpeed = 10f;
public float minZoom = 5f;
public float maxZoom = 50f;
private Transform cam;
void Start()
{
cam = Camera.main.transform;
}
void Update()
{
// Only handle camera input if mouse is within the map area
if (IsMouseInMapArea())
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
transform.Translate(new Vector3(h, 0, v) * moveSpeed * Time.unscaledDeltaTime, Space.World);
float moveX = 0, moveZ = 0;
if (Input.GetKey(KeyCode.W)) moveZ += 1;
if (Input.GetKey(KeyCode.S)) moveZ -= 1;
if (Input.GetKey(KeyCode.A)) moveX -= 1;
if (Input.GetKey(KeyCode.D)) moveX += 1;
transform.Translate(new Vector3(moveX, 0, moveZ) * moveSpeed * Time.unscaledDeltaTime, Space.World);
if (Input.GetKey(KeyCode.Q))
{
transform.Rotate(Vector3.up, -rotationSpeed * Time.unscaledDeltaTime);
}
if (Input.GetKey(KeyCode.E))
{
transform.Rotate(Vector3.up, rotationSpeed * Time.unscaledDeltaTime);
}
float scroll = Input.GetAxis("Mouse ScrollWheel");
if (scroll != 0f)
{
Vector3 pos = cam.localPosition;
pos += cam.forward * scroll * zoomSpeed;
pos = Vector3.ClampMagnitude(pos, maxZoom);
pos.y = Mathf.Clamp(pos.y, minZoom, maxZoom);
cam.localPosition = pos;
}
}
}
///
/// Check if the mouse is currently within the map area (not in UI panels)
///
/// True if mouse is in the map area, false if in UI areas
private bool IsMouseInMapArea()
{
Vector2 mousePosition = Input.mousePosition;
// Define the map area bounds (adjust these values based on your UI layout)
// These values represent the approximate red square area from your image
float leftUIWidth = 150f; // Map Legend panel width
float rightUIWidth = 300f; // Your Team panel width
float topUIHeight = 0f; // No top UI currently
float bottomUIHeight = 0f; // No bottom UI currently
// Calculate the actual map area
float mapLeft = leftUIWidth;
float mapRight = Screen.width - rightUIWidth;
float mapTop = Screen.height - topUIHeight;
float mapBottom = bottomUIHeight;
// Check if mouse is within the map area
bool inMapArea = mousePosition.x >= mapLeft &&
mousePosition.x <= mapRight &&
mousePosition.y >= mapBottom &&
mousePosition.y <= mapTop;
return inMapArea;
}
}