using System; using UnityEngine; public enum GameState { Map, Minigame, DuckCollectedScreen, StickerOverview } public class BadeendGoGameManager : MonoBehaviour { public DuckStickerData simpleDuckSticker; public GameObject profileButton; public GameObject mainMap; public CollectedStickersUI stickerDisplay; public GameObject miniGame; public GameObject minigameOverlay; public DuckCollectedScreen duckCollectedScreen; private GameState _gameState; private CollectableDuckData _minigamePlayingForDuck; public GameState GameState { get => _gameState; set { _gameState = value; profileButton.SetActive(value == GameState.Map); minigameOverlay.SetActive(value == GameState.Minigame); mainMap.SetActive(value == GameState.Map || value == GameState.DuckCollectedScreen); stickerDisplay.gameObject.SetActive(value == GameState.StickerOverview); miniGame.SetActive(value == GameState.Minigame); duckCollectedScreen.gameObject.SetActive(value == GameState.DuckCollectedScreen); } } private static BadeendGoGameManager _instance; public static BadeendGoGameManager Instance { get { return _instance; } private set { _instance = value; } } public BadeendGoGameManager() { if (Instance != null) { throw new Exception("An instance of BadeendGoGameManager already exists"); } Instance = this; } private void Awake() { GameState = GameState.Map; CollectableDuckManager.Instance.DuckClicked += OnDuckClicked; CatchMinigameManager.Instance.MinigameFinished += OnMinigameFinished; duckCollectedScreen.screenCloseClicked += DuckCollectedScreenOnScreenCloseClicked; duckCollectedScreen.retryClicked += DuckCollectedScreenOnRetryClicked; } private void DuckCollectedScreenOnRetryClicked(object sender, EventArgs e) { GameState = GameState.Minigame; CatchMinigameManager.Instance.ResetMinigame(); } private void DuckCollectedScreenOnScreenCloseClicked(object sender, EventArgs e) { GameState = GameState.Map; } private void OnDuckClicked(object sender, CollectableDuckData duck) { GameState = GameState.Minigame; CatchMinigameManager.Instance.ResetMinigame(); _minigamePlayingForDuck = duck; } private void OnMinigameFinished(object sender, MiniGameResult miniGameResult) { GameState = GameState.DuckCollectedScreen; duckCollectedScreen.MiniGameResult = miniGameResult; if (_minigamePlayingForDuck) { duckCollectedScreen.CollectedSticker = _minigamePlayingForDuck.StickerData; } else { duckCollectedScreen.CollectedSticker = simpleDuckSticker; } if (miniGameResult == MiniGameResult.Success) { // Duck collected if (_minigamePlayingForDuck != null) { DuckStickerManager.Instance.OnStickerCollected(_minigamePlayingForDuck.StickerData); CollectableDuckManager.Instance.OnDuckCollected(_minigamePlayingForDuck); } else { DuckStickerManager.Instance.OnStickerCollected(simpleDuckSticker); } } } }