-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerData.cs
125 lines (104 loc) · 3.59 KB
/
PlayerData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
namespace Cocktailor
{
/// <summary>
/// Provides access to player-related data and functionalities.
/// </summary>
public static class PlayerData
{
private static Dictionary<int, UserCocktailData> userData = new();
public static Action<int, MemorizedState> OnuserMemorizedStatehange;
static PlayerData()
{
LoadData();
}
public static List<int> MemorizedRecipes { get; private set; }
public static List<int> NotMemorizedRecipes { get; private set; }
private static void UpdateMemorizedLists()
{
MemorizedRecipes = new List<int>();
NotMemorizedRecipes = new List<int>();
foreach (var data in userData)
if (data.Value.UserState == MemorizedState.Yes)
MemorizedRecipes.Add(data.Key);
else if (data.Value.UserState == MemorizedState.No) NotMemorizedRecipes.Add(data.Key);
}
private static UserCocktailData GetUserDataByIndex(int index)
{
if (!userData.ContainsKey(index)) userData[index] = UserCocktailData.CreateNewUser();
return userData[index];
}
public static MemorizedState GetUserState(int index)
{
return GetUserDataByIndex(index).UserState;
}
public static string GetNote(int index)
{
return GetUserDataByIndex(index).UserNote;
}
public static void SetUserState(int index, MemorizedState state)
{
var userData = GetUserDataByIndex(index);
userData.UserState = state;
SaveData();
UpdateMemorizedLists();
}
public static void SetNote(int index, string note)
{
userData[index].UserNote = note;
SaveData();
}
private static void LoadData()
{
var dataInString = PlayerPrefs.GetString("UserData");
userData = JsonConvert.DeserializeObject<Dictionary<int, UserCocktailData>>(dataInString);
userData = userData ?? new Dictionary<int, UserCocktailData>();
UpdateMemorizedLists();
}
private static void SaveData()
{
var dataInString = JsonConvert.SerializeObject(userData);
PlayerPrefs.SetString("UserData", dataInString);
}
private static void UpdateAndSaveData(int index, UserCocktailData data)
{
userData[index] = data;
SaveData();
}
public static bool HasSubscribed()
{
return PlayerPrefs.GetInt("subscribed") == 1;
}
public static void UpdateUserState(int index, bool isOMarker)
{
var currentState = GetUserState(index);
var newState = isOMarker ? MemorizedState.Yes : MemorizedState.No;
if (currentState == newState) newState = MemorizedState.Undefined;
SetUserState(index, newState);
OnuserMemorizedStatehange?.Invoke(index, newState);
}
}
public enum MemorizedState
{
Undefined,
Yes,
No
}
[Serializable]
public class UserCocktailData
{
public MemorizedState UserState { get; set; }
public string UserNote { get; set; }
public static UserCocktailData CreateNewUser()
{
return new UserCocktailData
{
UserState = MemorizedState.Undefined,
UserNote = string.Empty
};
}
}
}