Skip to content
Snippets Groups Projects
Commit 11a89986 authored by mhby1g21's avatar mhby1g21
Browse files

window size is now adjustable

parent 2d1a34ee
No related branches found
No related tags found
1 merge request!16v2.2 merge
......@@ -7,9 +7,18 @@ public class SpectatorWindow : MonoBehaviour
private RenderTexture renderTexture;
private bool showWindow = true;
private Rect windowRect = new Rect(100, 100, 800, 450);
[Header("Window Settings")]
[SerializeField] private bool enableWindowDrag = true;
[SerializeField] private Vector2Int renderResolution = new Vector2Int(1920, 1080);
[SerializeField] private Vector2 minWindowSize = new Vector2(400, 225);
[SerializeField] private Vector2 maxWindowSize = new Vector2(1920, 1080);
private bool isResizing = false;
private Rect resizeHandleRect;
private Vector2 resizeStartMouse;
private Vector2 resizeStartSize;
private readonly float resizeHandleSize = 20f;
private void Awake()
{
......@@ -55,6 +64,9 @@ public class SpectatorWindow : MonoBehaviour
// Draw the window with solid background
GUI.backgroundColor = Color.black;
windowRect = GUI.Window(0, windowRect, DrawWindowContents, "Spectator View", backgroundStyle);
// Handle resizing outside of the window function
HandleResizing();
}
private void DrawWindowContents(int windowID)
......@@ -71,10 +83,68 @@ public class SpectatorWindow : MonoBehaviour
showWindow = false;
}
// Window dragging
if (enableWindowDrag)
// Draw resize handle (visual indicator)
resizeHandleRect = new Rect(windowRect.width - resizeHandleSize,
windowRect.height - resizeHandleSize,
resizeHandleSize, resizeHandleSize);
GUI.Box(resizeHandleRect, "↘");
// Window dragging (only if not resizing)
if (enableWindowDrag && !isResizing)
{
GUI.DragWindow(new Rect(0, 0, windowRect.width - resizeHandleSize, 20));
}
}
private void HandleResizing()
{
// Convert resize handle to screen coordinates
Rect screenResizeRect = new Rect(
windowRect.x + windowRect.width - resizeHandleSize,
windowRect.y + windowRect.height - resizeHandleSize,
resizeHandleSize,
resizeHandleSize
);
Event e = Event.current;
if (e.type == EventType.MouseDown && e.button == 0 && screenResizeRect.Contains(e.mousePosition))
{
isResizing = true;
resizeStartMouse = e.mousePosition;
resizeStartSize = new Vector2(windowRect.width, windowRect.height);
e.Use();
}
else if (e.type == EventType.MouseUp && e.button == 0)
{
GUI.DragWindow();
isResizing = false;
}
else if (isResizing && e.type == EventType.MouseDrag)
{
// Calculate new size
float newWidth = Mathf.Clamp(resizeStartSize.x + (e.mousePosition.x - resizeStartMouse.x),
minWindowSize.x, maxWindowSize.x);
float newHeight = Mathf.Clamp(resizeStartSize.y + (e.mousePosition.y - resizeStartMouse.y),
minWindowSize.y, maxWindowSize.y);
// Maintain aspect ratio (16:9)
float targetAspect = 16f / 9f;
float currentAspect = newWidth / newHeight;
if (currentAspect > targetAspect)
{
newWidth = newHeight * targetAspect;
}
else
{
newHeight = newWidth / targetAspect;
}
// Apply new size
windowRect.width = newWidth;
windowRect.height = newHeight;
e.Use();
}
}
......@@ -87,14 +157,14 @@ public class SpectatorWindow : MonoBehaviour
}
}
// Public methods to control the window
// Public methods
public void ShowWindow() => showWindow = true;
public void HideWindow() => showWindow = false;
public void ToggleWindow() => showWindow = !showWindow;
public void SetWindowSize(float width, float height)
{
windowRect.width = width;
windowRect.height = height;
windowRect.width = Mathf.Clamp(width, minWindowSize.x, maxWindowSize.x);
windowRect.height = Mathf.Clamp(height, minWindowSize.y, maxWindowSize.y);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment