Files
JuegoSim/Assets/_Project/Scripts/Code/VirtualPlatform/CanvasPlatformUI.cs
T
2026-07-21 08:56:10 +03:00

217 lines
6.7 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class CanvasPlatformUI : MonoBehaviour
{
private CanvasVirtualPlatformManager platformManager;
[Header("Plane Selection")]
[SerializeField] private TMP_Dropdown planeDropdown;
[Header("Canvas Size Controls")]
[SerializeField] private Slider canvasSizeSlider;
[SerializeField] private float minCanvasSize = 1000f;
[SerializeField] private float maxCanvasSize = 10000f;
[Header("Visibility Toggles")]
[SerializeField] private Toggle platformToggle;
[SerializeField] private Toggle gridToggle;
[Header("Display Info (Optional)")]
[SerializeField] private TextMeshProUGUI infoText;
private void Start()
{
platformManager = CanvasVirtualPlatformManager.getInstance();
if (platformManager == null)
{
Debug.LogError("CanvasVirtualPlatformManager not found in scene!");
return;
}
SetupUI();
UpdateInfoDisplay();
}
private void SetupUI()
{
// Setup Plane Dropdown
if (planeDropdown != null)
{
planeDropdown.ClearOptions();
planeDropdown.AddOptions(new System.Collections.Generic.List<string>
{
"XZ",
"XY",
"YZ"
});
planeDropdown.value = (int)platformManager.GetCurrentPlane();
planeDropdown.onValueChanged.AddListener(OnPlaneChanged);
}
// Setup Canvas Size Slider (for uniform sizing)
if (canvasSizeSlider != null)
{
canvasSizeSlider.minValue = minCanvasSize;
canvasSizeSlider.maxValue = maxCanvasSize;
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
canvasSizeSlider.value = currentSize.x; // Use width as default
canvasSizeSlider.onValueChanged.AddListener(OnCanvasSizeSliderChanged);
}
// Setup Platform Toggle
if (platformToggle != null)
{
platformToggle.isOn = platformManager.IsPlatformVisible();
platformToggle.onValueChanged.AddListener(OnPlatformToggleChanged);
}
// Setup Grid Toggle
if (gridToggle != null)
{
gridToggle.isOn = true; // Grid visible by default
gridToggle.onValueChanged.AddListener(OnGridToggleChanged);
}
}
private void OnPlaneChanged(int index)
{
platformManager.SwitchToPlane((PlaneAxis)index);
UpdateCanvasSizeFields();
UpdateInfoDisplay();
}
private void OnCanvasSizeSliderChanged(float value)
{
// Set both width and height to the same value (square canvas)
platformManager.SetCurrentCanvasSize(value, value);
UpdateInfoDisplay();
}
private void OnCanvasWidthChanged(string value)
{
if (float.TryParse(value, out float width))
{
width = Mathf.Clamp(width, minCanvasSize, maxCanvasSize);
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
platformManager.SetCurrentCanvasSize(width, currentSize.y);
UpdateInfoDisplay();
}
else
{
UpdateCanvasSizeFields();
}
}
private void OnCanvasHeightChanged(string value)
{
if (float.TryParse(value, out float height))
{
height = Mathf.Clamp(height, minCanvasSize, maxCanvasSize);
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
platformManager.SetCurrentCanvasSize(currentSize.x, height);
UpdateInfoDisplay();
}
else
{
UpdateCanvasSizeFields();
}
}
private void UpdateCanvasSizeFields()
{
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
if (canvasSizeSlider != null)
canvasSizeSlider.value = currentSize.x;
}
private void OnPlatformToggleChanged(bool isOn)
{
platformManager.TogglePlatformVisibility(isOn);
UpdateInfoDisplay();
}
private void OnGridToggleChanged(bool isOn)
{
platformManager.ToggleGridVisibility(isOn);
UpdateInfoDisplay();
}
private void UpdateInfoDisplay()
{
if (infoText != null && platformManager != null)
{
string planeText = platformManager.GetCurrentPlane().ToString();
string visibilityText = platformManager.IsPlatformVisible() ? "Visible" : "Hidden";
Vector2 canvasSize = platformManager.GetCurrentCanvasSize();
infoText.text = $"Current Plane: {planeText}\n" +
$"Platform: {visibilityText}\n" +
$"Canvas Size: {canvasSize.x:F0} x {canvasSize.y:F0}";
}
}
private void Update()
{
// Keyboard shortcuts for plane selection
if (Input.GetKeyDown(KeyCode.Alpha1))
{
if (planeDropdown != null)
planeDropdown.value = 0;
else
platformManager.SwitchToPlane(PlaneAxis.XZ);
UpdateInfoDisplay();
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
if (planeDropdown != null)
planeDropdown.value = 1;
else
platformManager.SwitchToPlane(PlaneAxis.XY);
UpdateInfoDisplay();
}
if (Input.GetKeyDown(KeyCode.Alpha3))
{
if (planeDropdown != null)
planeDropdown.value = 2;
else
platformManager.SwitchToPlane(PlaneAxis.YZ);
UpdateInfoDisplay();
}
// Toggle platform visibility with V key
if (Input.GetKeyDown(KeyCode.V))
{
bool newState = !platformManager.IsPlatformVisible();
platformManager.TogglePlatformVisibility(newState);
if (platformToggle != null)
platformToggle.isOn = newState;
UpdateInfoDisplay();
}
// Adjust canvas size with bracket keys
if (Input.GetKeyDown(KeyCode.LeftBracket))
{
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
float newSize = Mathf.Max(minCanvasSize, currentSize.x - 500f);
platformManager.SetCurrentCanvasSize(newSize, newSize);
UpdateCanvasSizeFields();
UpdateInfoDisplay();
}
if (Input.GetKeyDown(KeyCode.RightBracket))
{
Vector2 currentSize = platformManager.GetCurrentCanvasSize();
float newSize = Mathf.Min(maxCanvasSize, currentSize.x + 500f);
platformManager.SetCurrentCanvasSize(newSize, newSize);
UpdateCanvasSizeFields();
UpdateInfoDisplay();
}
}
}