Update minigame switcher to only unlock when all puzzles completed

This commit is contained in:
Michal Pikulski
2025-10-29 11:19:17 +01:00
parent bda645dcc3
commit c24c5df881
7 changed files with 598 additions and 94 deletions

View File

@@ -2,6 +2,8 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Core.SaveLoad;
using Unity.Android.Gradle;
namespace Levels
{
@@ -41,23 +43,41 @@ namespace Levels
_onMinigameConfirm = onMinigameConfirm;
_onCancel = onCancel;
_onRestart = onRestart;
if (iconImage) iconImage.sprite = switchData?.menuSprite ?? switchData?.mapSprite;
if (levelNameText) levelNameText.text = switchData?.targetLevelSceneName ?? "";
if(switchData != null)
{
if (iconImage)
{
iconImage.sprite = switchData.menuSprite != null
? switchData.menuSprite
: switchData.mapSprite;
}
if (levelNameText) levelNameText.text = switchData?.targetLevelSceneName ?? "";
}
else
{
Logging.LogWarning("[LevelSwitchMenu] No level data is assigned!");
}
if (confirmButton) confirmButton.onClick.AddListener(OnConfirmClicked);
if (cancelButton) cancelButton.onClick.AddListener(OnCancelClicked);
if (minigameButton)
{
minigameButton.onClick.AddListener(OnMinigameClicked);
bool minigameUnlocked = true;
minigameButton.interactable = minigameUnlocked;
padlockIcon.SetActive(!minigameUnlocked);
}
if (minigameButton) minigameButton.onClick.AddListener(OnMinigameClicked);
if (restartButton) restartButton.onClick.AddListener(OnRestartClicked);
if (popupConfirmMenu) popupConfirmMenu.SetActive(false);
if (tintTargetImage) _originalTintColor = tintTargetImage.color;
if (popupConfirmButton) popupConfirmButton.onClick.AddListener(OnPopupConfirmClicked);
if (popupCancelButton) popupCancelButton.onClick.AddListener(OnPopupCancelClicked);
// --- Minigame unlock state logic ---
if (SaveLoadManager.Instance != null)
{
if (SaveLoadManager.Instance.IsSaveDataLoaded)
{
ApplyMinigameUnlockStateIfAvailable();
}
else
{
SaveLoadManager.Instance.OnLoadCompleted += OnSaveDataLoadedHandler;
}
}
}
private void OnDestroy()
@@ -68,6 +88,10 @@ namespace Levels
if (restartButton) restartButton.onClick.RemoveListener(OnRestartClicked);
if (popupConfirmButton) popupConfirmButton.onClick.RemoveListener(OnPopupConfirmClicked);
if (popupCancelButton) popupCancelButton.onClick.RemoveListener(OnPopupCancelClicked);
if (SaveLoadManager.Instance != null)
{
SaveLoadManager.Instance.OnLoadCompleted -= OnSaveDataLoadedHandler;
}
}
private void OnConfirmClicked()
@@ -106,5 +130,25 @@ namespace Levels
if (popupConfirmMenu) popupConfirmMenu.SetActive(false);
if (tintTargetImage) tintTargetImage.color = _originalTintColor;
}
private void ApplyMinigameUnlockStateIfAvailable()
{
if (minigameButton == null || padlockIcon == null || _switchData == null)
return;
var data = SaveLoadManager.Instance?.currentSaveData;
string minigameName = _switchData.targetMinigameSceneName;
bool unlocked = data?.unlockedMinigames != null && !string.IsNullOrEmpty(minigameName) && data.unlockedMinigames.Contains(minigameName);
minigameButton.interactable = unlocked;
padlockIcon.SetActive(!unlocked);
}
private void OnSaveDataLoadedHandler(string slot)
{
ApplyMinigameUnlockStateIfAvailable();
if (SaveLoadManager.Instance != null)
{
SaveLoadManager.Instance.OnLoadCompleted -= OnSaveDataLoadedHandler;
}
}
}
}