Refaktro funguje lol

This commit is contained in:
Dominik G.
2025-11-01 18:15:05 +01:00
parent bec90a20a0
commit 76a513b577
13 changed files with 18197 additions and 856 deletions

200
Editor/LobbyPanelBuilder.cs Normal file
View File

@@ -0,0 +1,200 @@
#if UNITY_EDITOR
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace MegaKoop.EditorTools
{
internal sealed class LobbyPanelBuilder
{
private readonly Transform _parent;
internal LobbyPanelBuilder(Transform parent)
{
_parent = parent;
}
internal GameObject Build()
{
var panelLobby = UGUIBuilderUtils.CreatePanel(_parent, "Panel_Lobby", new Vector2(1100, 820));
panelLobby.SetActive(false);
var lobbyContainer = UGUIBuilderUtils.CreateVerticalGroup(
panelLobby.transform,
"Lobby_VLayout",
16f,
TextAnchor.UpperCenter,
new RectOffset(24, 24, 24, 24));
var lobbyHeader = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Header",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 10));
UGUIBuilderUtils.CreateText(lobbyHeader.transform, "Text_LobbyTitle", "MULTIPLAYER LOBBY", 36, TextAnchor.MiddleLeft, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
UGUIBuilderUtils.CreateText(lobbyHeader.transform, "Text_Status", "OFFLINE", 18, TextAnchor.MiddleRight, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
var codeGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Lobby_CodeGroup",
8f,
TextAnchor.MiddleCenter,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateText(codeGroup.transform, "Text_LobbyCodeLabel", "LOBBY CODE", 16, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
var codeRow = UGUIBuilderUtils.CreateHorizontalGroup(
codeGroup.transform,
"Lobby_CodeRow",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateText(codeRow.transform, "Text_LobbyCodeValue", "------", 44, TextAnchor.MiddleCenter, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
UGUIBuilderUtils.CreateMenuButton(codeRow.transform, "Button_CopyCode", "COPY");
UGUIBuilderUtils.CreateText(codeGroup.transform, "Text_LobbyCodeHint", "Share this code with friends to invite them", 12, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Normal);
var tabs = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Tabs",
0f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(tabs.transform, "Button_HostTab", "HOST LOBBY");
UGUIBuilderUtils.CreateMenuButton(tabs.transform, "Button_JoinTab", "JOIN LOBBY");
var joinGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Group_Join",
10f,
TextAnchor.UpperCenter,
new RectOffset(10, 10, 10, 10));
var joinRow = UGUIBuilderUtils.CreateHorizontalGroup(
joinGroup.transform,
"Join_Row",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateInputField(joinRow.transform, "Input_LobbyCode", "Enter 6-digit code...");
UGUIBuilderUtils.CreateMenuButton(joinGroup.transform, "Button_Connect", "CONNECT");
var hostGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Group_Host",
10f,
TextAnchor.UpperCenter,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateDropdown(hostGroup.transform, "Dropdown_MaxPlayers", new[] { "2", "3", "4", "8" });
UGUIBuilderUtils.CreateToggle(hostGroup.transform, "Toggle_PublicLobby", "Public", true);
UGUIBuilderUtils.CreateMenuButton(hostGroup.transform, "Button_CreateLobby", "CREATE LOBBY");
var playersHeader = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Players_Header",
10f,
TextAnchor.MiddleLeft,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateText(playersHeader.transform, "Text_PlayersTitle", "PLAYERS", 20, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateText(playersHeader.transform, "Text_PlayerCount", "0/4", 18, TextAnchor.MiddleRight, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
var scroll = UGUIBuilderUtils.CreateScrollList(
lobbyContainer.transform,
out var playersContent,
"Scroll_Players",
"Viewport",
"Content_PlayersList");
UGUIBuilderUtils.CreateText(lobbyContainer.transform, "Empty_Players", "Waiting for players...", 16, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Italic);
var template = new GameObject("PlayerItemTemplate", typeof(RectTransform), typeof(HorizontalLayoutGroup));
template.transform.SetParent(playersContent, false);
var hlg = template.GetComponent<HorizontalLayoutGroup>();
hlg.childAlignment = TextAnchor.MiddleLeft;
hlg.spacing = 12;
hlg.childControlWidth = false;
hlg.childForceExpandWidth = true;
var avatar = UGUIBuilderUtils.CreateImage(template.transform, "Image_Avatar", new Color(0.3f, 0.6f, 0.3f));
var name = UGUIBuilderUtils.CreateText(template.transform, "Text_PlayerName", "Player", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
var status = UGUIBuilderUtils.CreateText(template.transform, "Text_PlayerStatus", "NOT READY", 14, TextAnchor.MiddleRight, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
((RectTransform)avatar.transform).sizeDelta = new Vector2(40, 40);
template.SetActive(false);
var hostControls = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Host_Controls",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(hostControls.transform, "Button_InviteFriends", "INVITE FRIENDS");
UGUIBuilderUtils.CreateMenuButton(hostControls.transform, "Button_KickSelected", "KICK SELECTED");
var friendsOverlay = new GameObject("Panel_Friends", typeof(RectTransform), typeof(Image));
friendsOverlay.transform.SetParent(panelLobby.transform, false);
var ovRT = (RectTransform)friendsOverlay.transform;
ovRT.anchorMin = Vector2.zero;
ovRT.anchorMax = Vector2.one;
ovRT.offsetMin = Vector2.zero;
ovRT.offsetMax = Vector2.zero;
var ovImg = friendsOverlay.GetComponent<Image>();
ovImg.color = new Color(0, 0, 0, 0.55f);
friendsOverlay.SetActive(false);
var closeBg = new GameObject("Button_CloseFriendsOverlay", typeof(RectTransform), typeof(Image), typeof(Button));
closeBg.transform.SetParent(friendsOverlay.transform, false);
var closeBgRT = (RectTransform)closeBg.transform;
closeBgRT.anchorMin = Vector2.zero;
closeBgRT.anchorMax = Vector2.one;
closeBgRT.offsetMin = Vector2.zero;
closeBgRT.offsetMax = Vector2.zero;
var closeBgImg = closeBg.GetComponent<Image>();
closeBgImg.color = new Color(0, 0, 0, 0);
var friendsWindow = UGUIBuilderUtils.CreatePanel(friendsOverlay.transform, "Friends_Window", new Vector2(900, 420));
var friendsV = UGUIBuilderUtils.CreateVerticalGroup(
friendsWindow.transform,
"Friends_VLayout",
8f,
TextAnchor.UpperCenter,
new RectOffset(16, 16, 16, 16));
UGUIBuilderUtils.CreateText(friendsV.transform, "Text_FriendsTitle", "INVITE FRIENDS", 24, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateText(friendsV.transform, "Text_FriendsHint", "Select a friend to send a Steam invite.", 12, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Normal);
UGUIBuilderUtils.CreateScrollList(friendsV.transform, out var friendsContent, "Scroll_Friends", "Viewport", "Content_FriendsList");
var vlgFriends = friendsContent.GetComponent<VerticalLayoutGroup>();
if (vlgFriends)
{
Object.DestroyImmediate(vlgFriends);
}
var gridFriends = friendsContent.gameObject.AddComponent<GridLayoutGroup>();
gridFriends.cellSize = new Vector2(72, 72);
gridFriends.spacing = new Vector2(10, 10);
gridFriends.startAxis = GridLayoutGroup.Axis.Horizontal;
var csfFriends = friendsContent.GetComponent<ContentSizeFitter>();
if (csfFriends == null)
{
csfFriends = friendsContent.gameObject.AddComponent<ContentSizeFitter>();
}
csfFriends.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
UGUIBuilderUtils.CreateText(friendsV.transform, "Empty_Friends", "No friends found.", 14, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Italic);
var friendsFooter = UGUIBuilderUtils.CreateHorizontalGroup(
friendsV.transform,
"Friends_Footer",
8f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(friendsFooter.transform, "Button_BackFromFriends", "BACK");
UGUIBuilderUtils.CreateMenuButton(lobbyContainer.transform, "Button_ToggleReady", "TOGGLE READY");
var footer = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Footer",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_StartGame", "START GAME");
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_LeaveLobby", "LEAVE LOBBY");
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_BackFromLobby", "BACK TO MENU");
return panelLobby;
}
}
}
#endif