Tanoda
ColorPickerPresets.cs
Go to the documentation of this file.
1
3using System.Collections.Generic;
4
6{
7 public class ColorPickerPresets : MonoBehaviour
8 {
10
11 [SerializeField]
12 protected GameObject presetPrefab;
13
14 [SerializeField]
15 protected int maxPresets = 16;
16
17 [SerializeField]
19
20 protected List<Color> presets = new List<Color>();
22 public Transform createButton;
23
24 public enum SaveType { None, PlayerPrefs, JsonFile }
25 [SerializeField]
26 public SaveType saveMode = SaveType.None;
27
28 [SerializeField]
29 protected string playerPrefsKey;
30
31 public virtual string JsonFilePath
32 {
33 get { return Application.persistentDataPath + "/" + playerPrefsKey + ".json"; }
34 }
35
36 protected virtual void Reset()
37 {
38 playerPrefsKey = "colorpicker_" + GetInstanceID().ToString();
39 }
40
41 protected virtual void Awake()
42 {
43 picker.onHSVChanged.AddListener(HSVChanged);
46 presetPrefab.SetActive(false);
47
48 presets.AddRange(predefinedPresets);
50 }
51
52 public virtual void CreatePresetButton()
53 {
55 }
56
57 public virtual void LoadPresets(SaveType saveType)
58 {
59 string jsonData = "";
60 switch (saveType)
61 {
62 case SaveType.None:
63 break;
64 case SaveType.PlayerPrefs:
65 if (PlayerPrefs.HasKey(playerPrefsKey))
66 {
67 jsonData = PlayerPrefs.GetString(playerPrefsKey);
68 }
69 break;
70 case SaveType.JsonFile:
71 if (System.IO.File.Exists(JsonFilePath))
72 {
73 jsonData = System.IO.File.ReadAllText(JsonFilePath);
74 }
75 break;
76 default:
77 throw new System.NotImplementedException(saveType.ToString());
78 }
79
80 if (!string.IsNullOrEmpty(jsonData))
81 {
82 try
83 {
84 var jsonColors = JsonUtility.FromJson<JsonColor>(jsonData);
85 presets.AddRange(jsonColors.GetColors());
86 }
87 catch (System.Exception e)
88 {
89 Debug.LogException(e);
90 }
91 }
92
93 foreach (var item in presets)
94 {
95 CreatePreset(item, true);
96 }
97 }
98
99 public virtual void SavePresets(SaveType saveType)
100 {
101 if (presets == null || presets.Count <= 0)
102 {
103 Debug.LogError(
104 "presets cannot be null or empty: " + (presets == null ? "NULL" : "EMPTY"));
105 return;
106 }
107
108 var jsonColor = new JsonColor();
109 jsonColor.SetColors(presets.ToArray());
110
111
112 string jsonData = JsonUtility.ToJson(jsonColor);
113
114 switch (saveType)
115 {
116 case SaveType.None:
117 Debug.LogWarning("Called SavePresets with SaveType = None...");
118 break;
119 case SaveType.PlayerPrefs:
120 PlayerPrefs.SetString(playerPrefsKey, jsonData);
121 break;
122 case SaveType.JsonFile:
123 System.IO.File.WriteAllText(JsonFilePath, jsonData);
124 //Application.OpenURL(JsonFilePath);
125 break;
126 default:
127 throw new System.NotImplementedException(saveType.ToString());
128 }
129 }
130
131 protected class JsonColor
132 {
133 public Color32[] colors;
134 public void SetColors(Color[] colorsIn)
135 {
136 this.colors = new Color32[colorsIn.Length];
137 for (int i = 0; i < colorsIn.Length; i++)
138 {
139 this.colors[i] = colorsIn[i];
140 }
141 }
142
143 public Color[] GetColors()
144 {
145 Color[] colorsOut = new Color[colors.Length];
146 for (int i = 0; i < colors.Length; i++)
147 {
148 colorsOut[i] = colors[i];
149 }
150 return colorsOut;
151 }
152 }
153
154 public virtual void CreatePreset(Color color, bool loading)
155 {
156 createButton.gameObject.SetActive(presets.Count < maxPresets);
157
158 var newPresetButton = Instantiate(presetPrefab, presetPrefab.transform.parent);
159 newPresetButton.transform.SetAsLastSibling();
160 newPresetButton.SetActive(true);
161 newPresetButton.GetComponent<Image>().color = color;
162
163 createPresetImage.color = Color.white;
164
165 if (!loading)
166 {
167 presets.Add(color);
169 }
170 }
171
172 public virtual void CreatePreset(Color color)
173 {
174 CreatePreset(color, false);
175 }
176
177 public virtual void PresetSelect(Image sender)
178 {
179 picker.CurrentColor = sender.color;
180 }
181
182 protected virtual void HSVChanged(float h, float s, float v)
183 {
184 createPresetImage.color = HSVUtil.ConvertHsvToRgb(h * 360, s, v, 1);
185 //Debug.Log("hsv util color: " + createPresetImage.color);
186 }
187
188 protected virtual void ColorChanged(Color color)
189 {
190 createPresetImage.color = color;
191 //Debug.Log("color changed: " + color);
192 }
193 }
194}
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
System.Drawing.Image Image
Definition: TestScript.cs:37
UnityEngine.Color Color
Definition: TestScript.cs:32
virtual void CreatePreset(Color color, bool loading)
virtual void HSVChanged(float h, float s, float v)