Public metody pro vlastní Menu.

This commit is contained in:
Dominik G.
2025-11-01 16:32:34 +01:00
parent fbe588c854
commit bec90a20a0
21 changed files with 14289 additions and 30450 deletions

View File

@@ -25,24 +25,24 @@ namespace MegaKoop.UI
private GameObject panelSettings;
private GameObject panelLobby;
// Main buttons
private Button btnNewGame;
private Button btnContinue;
private Button btnMultiplayer;
private Button btnSettings;
private Button btnQuit;
[Header("Manual Wiring - Main Menu Buttons")]
[SerializeField] private Button btnNewGame;
[SerializeField] private Button btnContinue;
[SerializeField] private Button btnMultiplayer;
[SerializeField] private Button btnSettings;
[SerializeField] private Button btnQuit;
// Settings controls
private TMP_Dropdown ddQuality;
private Toggle tgFullscreen;
private TMP_Dropdown ddResolution;
private Button btnApplySettings;
private Button btnBackFromSettings;
private Slider slMaster;
private Slider slMusic;
private Slider slSFX;
private Dropdown ddQualityUI;
private Dropdown ddResolutionUI;
[Header("Manual Wiring - Settings Controls")]
[SerializeField] private TMP_Dropdown ddQuality;
[SerializeField] private Toggle tgFullscreen;
[SerializeField] private TMP_Dropdown ddResolution;
[SerializeField] private Button btnApplySettings;
[SerializeField] private Button btnBackFromSettings;
[SerializeField] private Slider slMaster;
[SerializeField] private Slider slMusic;
[SerializeField] private Slider slSFX;
[SerializeField] private Dropdown ddQualityUI;
[SerializeField] private Dropdown ddResolutionUI;
private void Awake()
{
@@ -50,23 +50,23 @@ namespace MegaKoop.UI
RefreshPanelReferences();
// Buttons
btnNewGame = FindButton("Button_NewGame", panelMain ? panelMain.transform : this.transform);
btnContinue = FindButton("Button_Continue", panelMain ? panelMain.transform : this.transform);
btnMultiplayer = FindButton("Button_Multiplayer", panelMain ? panelMain.transform : this.transform);
btnSettings = FindButton("Button_Settings", panelMain ? panelMain.transform : this.transform);
btnQuit = FindButton("Button_Quit", panelMain ? panelMain.transform : this.transform);
btnNewGame = EnsureButton(btnNewGame, "Button_NewGame", panelMain ? panelMain.transform : this.transform);
btnContinue = EnsureButton(btnContinue, "Button_Continue", panelMain ? panelMain.transform : this.transform);
btnMultiplayer = EnsureButton(btnMultiplayer, "Button_Multiplayer", panelMain ? panelMain.transform : this.transform);
btnSettings = EnsureButton(btnSettings, "Button_Settings", panelMain ? panelMain.transform : this.transform);
btnQuit = EnsureButton(btnQuit, "Button_Quit", panelMain ? panelMain.transform : this.transform);
// Settings
ddQuality = FindDropdown("Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform);
if (!ddQuality) ddQualityUI = FindUIDropdown("Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform);
tgFullscreen = FindToggle("Toggle_Fullscreen", panelSettings ? panelSettings.transform : this.transform);
ddResolution = FindDropdown("Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform);
if (!ddResolution) ddResolutionUI = FindUIDropdown("Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform);
btnApplySettings = FindButton("Button_ApplySettings", panelSettings ? panelSettings.transform : this.transform);
btnBackFromSettings = FindButton("Button_BackFromSettings", panelSettings ? panelSettings.transform : this.transform);
slMaster = FindSlider("Slider_MasterVolume", panelSettings ? panelSettings.transform : this.transform);
slMusic = FindSlider("Slider_MusicVolume", panelSettings ? panelSettings.transform : this.transform);
slSFX = FindSlider("Slider_SFXVolume", panelSettings ? panelSettings.transform : this.transform);
ddQuality = EnsureDropdown(ddQuality, "Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform);
ddQualityUI = EnsureUIDropdown(ddQualityUI, "Dropdown_Quality", panelSettings ? panelSettings.transform : this.transform);
tgFullscreen = EnsureToggle(tgFullscreen, "Toggle_Fullscreen", panelSettings ? panelSettings.transform : this.transform);
ddResolution = EnsureDropdown(ddResolution, "Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform);
ddResolutionUI = EnsureUIDropdown(ddResolutionUI, "Dropdown_Resolution", panelSettings ? panelSettings.transform : this.transform);
btnApplySettings = EnsureButton(btnApplySettings, "Button_ApplySettings", panelSettings ? panelSettings.transform : this.transform);
btnBackFromSettings = EnsureButton(btnBackFromSettings, "Button_BackFromSettings", panelSettings ? panelSettings.transform : this.transform);
slMaster = EnsureSlider(slMaster, "Slider_MasterVolume", panelSettings ? panelSettings.transform : this.transform);
slMusic = EnsureSlider(slMusic, "Slider_MusicVolume", panelSettings ? panelSettings.transform : this.transform);
slSFX = EnsureSlider(slSFX, "Slider_SFXVolume", panelSettings ? panelSettings.transform : this.transform);
if (!btnApplySettings && panelSettings) btnApplySettings = FindButtonByLabel("APPLY", panelSettings.transform);
if (!btnBackFromSettings && panelSettings) btnBackFromSettings = FindButtonByLabel("BACK", panelSettings.transform);
@@ -79,6 +79,12 @@ namespace MegaKoop.UI
ShowMainMenu();
}
private Dropdown EnsureUIDropdown(Dropdown existing, string name, Transform scope)
{
if (existing) return existing;
return FindUIDropdown(name, scope);
}
private Dropdown FindUIDropdown(string name, Transform scope = null)
{
if (scope != null)
@@ -107,6 +113,31 @@ namespace MegaKoop.UI
RefreshPanelReferences();
}
public void SetMainMenuButtons(Button newGame, Button continueButton, Button multiplayerButton, Button settingsButton, Button quitButton)
{
btnNewGame = newGame;
btnContinue = continueButton;
btnMultiplayer = multiplayerButton;
btnSettings = settingsButton;
btnQuit = quitButton;
}
public void SetSettingsControls(TMP_Dropdown qualityDropdown, Dropdown legacyQualityDropdown, Toggle fullscreenToggle,
TMP_Dropdown resolutionDropdown, Dropdown legacyResolutionDropdown, Slider masterVolume, Slider musicVolume, Slider sfxVolume,
Button applyButton, Button backButton)
{
ddQuality = qualityDropdown;
ddQualityUI = legacyQualityDropdown;
tgFullscreen = fullscreenToggle;
ddResolution = resolutionDropdown;
ddResolutionUI = legacyResolutionDropdown;
slMaster = masterVolume;
slMusic = musicVolume;
slSFX = sfxVolume;
btnApplySettings = applyButton;
btnBackFromSettings = backButton;
}
private void RefreshPanelReferences()
{
panelMain = panelMainRef ? panelMainRef : (FindAnyInScene("Panel_MainMenu") ?? panelMain);
@@ -114,6 +145,30 @@ namespace MegaKoop.UI
panelLobby = panelLobbyRef ? panelLobbyRef : (FindAnyInScene("Panel_Lobby") ?? panelLobby);
}
private Button EnsureButton(Button existing, string name, Transform scope)
{
if (existing) return existing;
return FindButton(name, scope);
}
private TMP_Dropdown EnsureDropdown(TMP_Dropdown existing, string name, Transform scope)
{
if (existing) return existing;
return FindDropdown(name, scope);
}
private Toggle EnsureToggle(Toggle existing, string name, Transform scope)
{
if (existing) return existing;
return FindToggle(name, scope);
}
private Slider EnsureSlider(Slider existing, string name, Transform scope)
{
if (existing) return existing;
return FindSlider(name, scope);
}
private GameObject FindAnyInScene(string name)
{
// Najde i neaktivní objekty

View File

@@ -23,47 +23,47 @@ namespace MegaKoop.UI
private GameObject groupJoin;
private GameObject groupHost;
// Header & Code
private TMP_Text textStatus;
private TMP_Text textLobbyCodeValue;
private Button btnCopyCode;
[Header("Manual Wiring - Header & Code")]
[SerializeField] private TMP_Text textStatus;
[SerializeField] private TMP_Text textLobbyCodeValue;
[SerializeField] private Button btnCopyCode;
// Tabs
private Button btnHostTab;
private Button btnJoinTab;
[Header("Manual Wiring - Tabs")]
[SerializeField] private Button btnHostTab;
[SerializeField] private Button btnJoinTab;
// Join
private TMP_InputField inputLobbyCode;
private Button btnConnect;
[Header("Manual Wiring - Join Section")]
[SerializeField] private TMP_InputField inputLobbyCode;
[SerializeField] private Button btnConnect;
// Host
private TMP_Dropdown ddMaxPlayers;
private Toggle tgPublicLobby;
private Button btnCreateLobby;
[Header("Manual Wiring - Host Section")]
[SerializeField] private TMP_Dropdown ddMaxPlayers;
[SerializeField] private Toggle tgPublicLobby;
[SerializeField] private Button btnCreateLobby;
// Players
private TMP_Text textPlayerCount;
private ScrollRect scrollPlayers;
private Transform contentPlayers;
private GameObject playerItemTemplate;
private GameObject emptyPlayers;
[Header("Manual Wiring - Players List")]
[SerializeField] private TMP_Text textPlayerCount;
[SerializeField] private ScrollRect scrollPlayers;
[SerializeField] private Transform contentPlayers;
[SerializeField] private GameObject playerItemTemplate;
[SerializeField] private GameObject emptyPlayers;
// Friends picker (fallback when overlay unavailable)
private GameObject panelFriends;
private Transform contentFriends;
private GameObject emptyFriends;
private Button btnBackFromFriends;
private Button btnCloseFriendsOverlay;
[Header("Manual Wiring - Friends Picker")]
[SerializeField] private GameObject panelFriends;
[SerializeField] private Transform contentFriends;
[SerializeField] private GameObject emptyFriends;
[SerializeField] private Button btnBackFromFriends;
[SerializeField] private Button btnCloseFriendsOverlay;
// Host controls
private Button btnInviteFriends;
private Button btnKickSelected;
[Header("Manual Wiring - Host Controls")]
[SerializeField] private Button btnInviteFriends;
[SerializeField] private Button btnKickSelected;
// Ready & footer
private Button btnToggleReady;
private Button btnStartGame;
private Button btnLeaveLobby;
private Button btnBackFromLobby;
[Header("Manual Wiring - Footer")]
[SerializeField] private Button btnToggleReady;
[SerializeField] private Button btnStartGame;
[SerializeField] private Button btnLeaveLobby;
[SerializeField] private Button btnBackFromLobby;
[Header("Player Ready Styling")]
[SerializeField] private Color readyBorderColor = new Color(0.2f, 0.82f, 0.35f, 1f);
@@ -92,44 +92,44 @@ namespace MegaKoop.UI
private void Awake()
{
// Find UI (including inactive)
panelLobby = FindAnyGO("Panel_Lobby");
groupJoin = FindAnyGO("Group_Join");
groupHost = FindAnyGO("Group_Host");
panelLobby = EnsureGO(panelLobby, "Panel_Lobby");
groupJoin = EnsureGO(groupJoin, "Group_Join");
groupHost = EnsureGO(groupHost, "Group_Host");
textStatus = FindText("Text_Status");
textLobbyCodeValue = FindText("Text_LobbyCodeValue");
btnCopyCode = FindButton("Button_CopyCode");
textStatus = EnsureText(textStatus, "Text_Status");
textLobbyCodeValue = EnsureText(textLobbyCodeValue, "Text_LobbyCodeValue");
btnCopyCode = EnsureButton(btnCopyCode, "Button_CopyCode");
btnHostTab = FindButton("Button_HostTab");
btnJoinTab = FindButton("Button_JoinTab");
btnHostTab = EnsureButton(btnHostTab, "Button_HostTab");
btnJoinTab = EnsureButton(btnJoinTab, "Button_JoinTab");
inputLobbyCode = FindInput("Input_LobbyCode");
btnConnect = FindButton("Button_Connect");
inputLobbyCode = EnsureInput(inputLobbyCode, "Input_LobbyCode");
btnConnect = EnsureButton(btnConnect, "Button_Connect");
ddMaxPlayers = FindDropdown("Dropdown_MaxPlayers");
tgPublicLobby = FindToggle("Toggle_PublicLobby");
btnCreateLobby = FindButton("Button_CreateLobby");
ddMaxPlayers = EnsureDropdown(ddMaxPlayers, "Dropdown_MaxPlayers");
tgPublicLobby = EnsureToggle(tgPublicLobby, "Toggle_PublicLobby");
btnCreateLobby = EnsureButton(btnCreateLobby, "Button_CreateLobby");
textPlayerCount = FindText("Text_PlayerCount");
scrollPlayers = FindScroll("Scroll_Players");
contentPlayers = FindAnyGO("Content_PlayersList")?.transform;
emptyPlayers = FindAnyGO("Empty_Players");
playerItemTemplate = FindAnyGO("PlayerItemTemplate");
textPlayerCount = EnsureText(textPlayerCount, "Text_PlayerCount");
scrollPlayers = EnsureScroll(scrollPlayers, "Scroll_Players");
contentPlayers = EnsureTransform(contentPlayers, "Content_PlayersList");
emptyPlayers = EnsureGO(emptyPlayers, "Empty_Players");
playerItemTemplate = EnsureGO(playerItemTemplate, "PlayerItemTemplate");
btnInviteFriends = FindButton("Button_InviteFriends");
btnKickSelected = FindButton("Button_KickSelected");
btnInviteFriends = EnsureButton(btnInviteFriends, "Button_InviteFriends");
btnKickSelected = EnsureButton(btnKickSelected, "Button_KickSelected");
btnToggleReady = FindButton("Button_ToggleReady");
btnStartGame = FindButton("Button_StartGame");
btnLeaveLobby = FindButton("Button_LeaveLobby");
btnBackFromLobby = FindButton("Button_BackFromLobby");
btnToggleReady = EnsureButton(btnToggleReady, "Button_ToggleReady");
btnStartGame = EnsureButton(btnStartGame, "Button_StartGame");
btnLeaveLobby = EnsureButton(btnLeaveLobby, "Button_LeaveLobby");
btnBackFromLobby = EnsureButton(btnBackFromLobby, "Button_BackFromLobby");
// Friends picker
panelFriends = FindAnyGO("Panel_Friends");
contentFriends = FindAnyGO("Content_FriendsList")?.transform;
emptyFriends = FindAnyGO("Empty_Friends");
btnBackFromFriends = FindButton("Button_BackFromFriends");
btnCloseFriendsOverlay = FindButton("Button_CloseFriendsOverlay");
panelFriends = EnsureGO(panelFriends, "Panel_Friends");
contentFriends = EnsureTransform(contentFriends, "Content_FriendsList");
emptyFriends = EnsureGO(emptyFriends, "Empty_Friends");
btnBackFromFriends = EnsureButton(btnBackFromFriends, "Button_BackFromFriends");
btnCloseFriendsOverlay = EnsureButton(btnCloseFriendsOverlay, "Button_CloseFriendsOverlay");
EnsureSteamServices();
RegisterSteamEvents();
@@ -322,12 +322,78 @@ namespace MegaKoop.UI
panelLobbyRef = root;
}
private TMP_Text FindText(string name) => FindAnyComponent<TMP_Text>(name);
private Button FindButton(string name) => FindAnyComponent<Button>(name);
private Toggle FindToggle(string name) => FindAnyComponent<Toggle>(name);
private TMP_Dropdown FindDropdown(string name) => FindAnyComponent<TMP_Dropdown>(name);
private TMP_InputField FindInput(string name) => FindAnyComponent<TMP_InputField>(name);
private ScrollRect FindScroll(string name) => FindAnyComponent<ScrollRect>(name);
public void SetHostJoinGroups(GameObject hostGroup, GameObject joinGroup)
{
groupHost = hostGroup;
groupJoin = joinGroup;
}
public void SetHeaderControls(TMP_Text status, TMP_Text lobbyCode, Button copyCode)
{
textStatus = status;
textLobbyCodeValue = lobbyCode;
btnCopyCode = copyCode;
}
public void SetTabButtons(Button hostTab, Button joinTab)
{
btnHostTab = hostTab;
btnJoinTab = joinTab;
}
public void SetJoinSection(TMP_InputField lobbyCodeInput, Button connectButton)
{
inputLobbyCode = lobbyCodeInput;
btnConnect = connectButton;
}
public void SetHostSection(TMP_Dropdown maxPlayersDropdown, Toggle publicToggle, Button createLobbyButton)
{
ddMaxPlayers = maxPlayersDropdown;
tgPublicLobby = publicToggle;
btnCreateLobby = createLobbyButton;
}
public void SetPlayersList(TMP_Text playerCountText, ScrollRect playersScroll, Transform playersContent, GameObject itemTemplate, GameObject emptyState)
{
textPlayerCount = playerCountText;
scrollPlayers = playersScroll;
contentPlayers = playersContent;
playerItemTemplate = itemTemplate;
emptyPlayers = emptyState;
}
public void SetFriendsPicker(GameObject friendsPanel, Transform friendsContent, GameObject friendsEmpty, Button backButton, Button closeOverlayButton)
{
panelFriends = friendsPanel;
contentFriends = friendsContent;
emptyFriends = friendsEmpty;
btnBackFromFriends = backButton;
btnCloseFriendsOverlay = closeOverlayButton;
}
public void SetHostControls(Button inviteFriendsButton, Button kickSelectedButton)
{
btnInviteFriends = inviteFriendsButton;
btnKickSelected = kickSelectedButton;
}
public void SetFooterControls(Button toggleReadyButton, Button startGameButton, Button leaveLobbyButton, Button backButton)
{
btnToggleReady = toggleReadyButton;
btnStartGame = startGameButton;
btnLeaveLobby = leaveLobbyButton;
btnBackFromLobby = backButton;
}
private TMP_Text EnsureText(TMP_Text existing, string name) => existing ? existing : FindAnyComponent<TMP_Text>(name);
private Button EnsureButton(Button existing, string name) => existing ? existing : FindAnyComponent<Button>(name);
private Toggle EnsureToggle(Toggle existing, string name) => existing ? existing : FindAnyComponent<Toggle>(name);
private TMP_Dropdown EnsureDropdown(TMP_Dropdown existing, string name) => existing ? existing : FindAnyComponent<TMP_Dropdown>(name);
private TMP_InputField EnsureInput(TMP_InputField existing, string name) => existing ? existing : FindAnyComponent<TMP_InputField>(name);
private ScrollRect EnsureScroll(ScrollRect existing, string name) => existing ? existing : FindAnyComponent<ScrollRect>(name);
private Transform EnsureTransform(Transform existing, string name) => existing ? existing : FindAnyGO(name)?.transform;
private GameObject EnsureGO(GameObject existing, string name) => existing ? existing : FindAnyGO(name);
#region Steam
private void EnsureSteamServices()

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5d7cbc36e4a870b4a8f9960c98e02388
guid: fd82d2a29e7d6074384455d591a597e8
PrefabImporter:
externalObjects: {}
userData:

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 88f6755465395d64bb0448b5605efff0
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: