74 lines
1.9 KiB
C#
74 lines
1.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
[Serializable]
|
|
public class DuckStickerEvent : UnityEvent<DuckStickerData>
|
|
{
|
|
}
|
|
|
|
public class DuckStickerManager : MonoBehaviour
|
|
{
|
|
public List<DuckStickerData> duckStickers;
|
|
|
|
public DuckStickerEvent stickerCollected;
|
|
|
|
private readonly Dictionary<DuckStickerData, int> _collectedStickers = new Dictionary<DuckStickerData, int>();
|
|
|
|
private static DuckStickerManager _instance;
|
|
public static DuckStickerManager Instance
|
|
{
|
|
get { return _instance; }
|
|
private set { _instance = value; }
|
|
}
|
|
|
|
public IEnumerable<DuckStickerData> 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<string>();
|
|
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;
|
|
}
|
|
}
|