Update minigame switcher to only unlock when all puzzles completed
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user