using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Events; [Serializable] public class DuckStickerEvent : UnityEvent { } public class DuckStickerManager : MonoBehaviour { public List duckStickers; public DuckStickerEvent stickerCollected; private readonly Dictionary _collectedStickers = new Dictionary(); private static DuckStickerManager _instance; public static DuckStickerManager Instance { get { return _instance; } private set { _instance = value; } } public IEnumerable CollectedStickers { get { return duckStickers.Where(d => GetStickerCollectedCount(d) > 0); } } public DuckStickerManager() { Instance = this; } private void Awake() { CheckDuckStickers(); foreach (var sticker in duckStickers) { _collectedStickers.Add(sticker, PlayerPrefs.GetInt("sticker." + sticker.Id)); } } private void CheckDuckStickers() { var duckIds = new HashSet(); foreach (var duck in duckStickers) { if (duckIds.Contains(duck.Id)) { Debug.LogError("Duplicate duck ID: '" + duck.Id + "' for duck '" + duck.name + "'"); } duckIds.Add(duck.Id); } } public void OnStickerCollected(DuckStickerData sticker) { _collectedStickers[sticker]++; PlayerPrefs.SetInt("sticker." + sticker.Id, _collectedStickers[sticker]); stickerCollected.Invoke(sticker); } public int GetStickerCollectedCount(DuckStickerData sticker) { return _collectedStickers.ContainsKey(sticker) ? _collectedStickers[sticker] : 0; } }