Refaktro funguje lol
This commit is contained in:
200
Editor/LobbyPanelBuilder.cs
Normal file
200
Editor/LobbyPanelBuilder.cs
Normal 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
|
||||
Reference in New Issue
Block a user