Update Pause menu and MinigameSelection menu to icon-based with no text

This commit is contained in:
Michal Pikulski
2025-10-30 10:15:53 +01:00
parent eeca4973ae
commit f6ebadf21e
8 changed files with 1228 additions and 2486 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@@ -6,7 +7,7 @@ using UnityEngine.UI;
namespace Levels
{
/// <summary>
/// UI overlay for confirming a level switch. Displays level info and handles confirm/cancel actions, and supports leaderboard view.
/// UI overlay for confirming a level switch. Displays level info and handles confirm/cancel actions, and supports scrolling between level info and leaderboard.
/// </summary>
public class MinigameSwitchMenu : MonoBehaviour
{
@@ -15,14 +16,15 @@ namespace Levels
public TMP_Text levelNameText;
public Button confirmButton;
public Button cancelButton;
public Button leaderboardButton;
public GameObject levelInfoContainer;
public GameObject leaderboardContainer;
public Button leaderboardDismissButton;
public Button toLeaderboardButton;
public Button toLevelSelectButton;
public ScrollRect scrollView;
public float scrollDuration = 1f;
private Action _onLevelConfirm;
private Action _onCancel;
private LevelSwitchData _switchData;
private Coroutine _activeScrollCoroutine;
/// <summary>
/// Initialize the menu with data and callbacks.
@@ -36,18 +38,26 @@ namespace Levels
if (levelNameText) levelNameText.text = switchData?.targetLevelSceneName ?? "";
if (confirmButton) confirmButton.onClick.AddListener(OnConfirmClicked);
if (cancelButton) cancelButton.onClick.AddListener(OnCancelClicked);
if (leaderboardButton) leaderboardButton.onClick.AddListener(OnLeaderboardClicked);
if (leaderboardDismissButton) leaderboardDismissButton.onClick.AddListener(OnLeaderboardDismissClicked);
if (levelInfoContainer) levelInfoContainer.SetActive(true);
if (leaderboardContainer) leaderboardContainer.SetActive(false);
if (toLeaderboardButton) toLeaderboardButton.onClick.AddListener(OnToLeaderboardClicked);
if (toLevelSelectButton) toLevelSelectButton.onClick.AddListener(OnToLevelSelectClicked);
// Show only the toLeaderboardButton at start
if (toLeaderboardButton) toLeaderboardButton.gameObject.SetActive(true);
if (toLevelSelectButton) toLevelSelectButton.gameObject.SetActive(false);
// Initialize scroll view to start at left (level info view)
if (scrollView) scrollView.horizontalNormalizedPosition = 0f;
}
private void OnDestroy()
{
if (confirmButton) confirmButton.onClick.RemoveListener(OnConfirmClicked);
if (cancelButton) cancelButton.onClick.RemoveListener(OnCancelClicked);
if (leaderboardButton) leaderboardButton.onClick.RemoveListener(OnLeaderboardClicked);
if (leaderboardDismissButton) leaderboardDismissButton.onClick.RemoveListener(OnLeaderboardDismissClicked);
if (toLeaderboardButton) toLeaderboardButton.onClick.RemoveListener(OnToLeaderboardClicked);
if (toLevelSelectButton) toLevelSelectButton.onClick.RemoveListener(OnToLevelSelectClicked);
if (_activeScrollCoroutine != null)
{
StopCoroutine(_activeScrollCoroutine);
_activeScrollCoroutine = null;
}
}
private void OnConfirmClicked()
@@ -62,16 +72,60 @@ namespace Levels
Destroy(gameObject);
}
private void OnLeaderboardClicked()
private void OnToLeaderboardClicked()
{
if (levelInfoContainer) levelInfoContainer.SetActive(false);
if (leaderboardContainer) leaderboardContainer.SetActive(true);
if (_activeScrollCoroutine != null)
{
StopCoroutine(_activeScrollCoroutine);
}
_activeScrollCoroutine = StartCoroutine(ScrollToLeaderboardCoroutine());
}
private void OnLeaderboardDismissClicked()
private void OnToLevelSelectClicked()
{
if (levelInfoContainer) levelInfoContainer.SetActive(true);
if (leaderboardContainer) leaderboardContainer.SetActive(false);
if (_activeScrollCoroutine != null)
{
StopCoroutine(_activeScrollCoroutine);
}
_activeScrollCoroutine = StartCoroutine(ScrollToLevelSelectCoroutine());
}
private IEnumerator ScrollToLeaderboardCoroutine()
{
if (toLeaderboardButton) toLeaderboardButton.gameObject.SetActive(false);
float elapsed = 0f;
float startPos = scrollView.horizontalNormalizedPosition;
float targetPos = 0.95f;
while (elapsed < scrollDuration)
{
elapsed += Time.deltaTime;
float t = Mathf.Clamp01(elapsed / scrollDuration);
float smoothT = Mathf.SmoothStep(0f, 1f, t);
scrollView.horizontalNormalizedPosition = Mathf.Lerp(startPos, targetPos, smoothT);
yield return null;
}
scrollView.horizontalNormalizedPosition = targetPos;
if (toLevelSelectButton) toLevelSelectButton.gameObject.SetActive(true);
_activeScrollCoroutine = null;
}
private IEnumerator ScrollToLevelSelectCoroutine()
{
if (toLevelSelectButton) toLevelSelectButton.gameObject.SetActive(false);
float elapsed = 0f;
float startPos = scrollView.horizontalNormalizedPosition;
float targetPos = 0f;
while (elapsed < scrollDuration)
{
elapsed += Time.deltaTime;
float t = Mathf.Clamp01(elapsed / scrollDuration);
float smoothT = Mathf.SmoothStep(0f, 1f, t);
scrollView.horizontalNormalizedPosition = Mathf.Lerp(startPos, targetPos, smoothT);
yield return null;
}
scrollView.horizontalNormalizedPosition = targetPos;
if (toLeaderboardButton) toLeaderboardButton.gameObject.SetActive(true);
_activeScrollCoroutine = null;
}
}
}