/// <summary> /// Save the color data to storage file. /// </summary> public void Save(ColorPanelData data) { InitializeStorageFile(); // skip if nothing saved if (data == null || data.colors == null) { return; } string txtToWrite = data.getTotColors() + "\n"; string colorsToAppend = string.Empty; for (int i = 0; i < data.colors.Length; ++i) { colorsToAppend = colorsToAppend + data.colors[i].r + ":" + data.colors[i].g + ":" + data.colors[i].b + ":" + data.colors[i].a + "\n"; } txtToWrite = txtToWrite + colorsToAppend; /* * FILE FORMAT: * * n * R:G:B:A * R:G:B:A * [...] * R:G:B:A * */ File.WriteAllText(kStorageFile, txtToWrite); }
/// <summary> /// Removes the colors from array. /// </summary> /// <param name="colorCount">Color count.</param> /// <param name="colorData">Color data.</param> public void removeColors(int colorCount, ref ColorPanelData colorData) { Color[] storedColor = colorData.colors; colorData.colors = new Color[colorCount]; for (int i = 0; i < colorCount; ++i) { colorData.colors[i].r = storedColor[i].r; colorData.colors[i].g = storedColor[i].g; colorData.colors[i].b = storedColor[i].b; colorData.colors[i].a = storedColor[i].a; } colorData.setTotColors(colorCount); }
/// <summary> /// Load the color data from storage file. /// </summary> public ColorPanelData Load() { InitializeStorageFile(); string data = File.ReadAllText(kStorageFile); // returns something empty if (data == null || data == "") { return(new ColorPanelData()); } /* * FILE FORMAT: * * n * R:G:B:A * R:G:B:A * [...] * R:G:B:A * */ ColorPanelData colorData = new ColorPanelData(); string[] cks = data.Split('\n'); colorData.setTotColors(int.Parse(cks[0])); colorData.colors = new Color[colorData.getTotColors()]; for (int i = 0; i < colorData.getTotColors(); ++i) { string[] colors = cks[i + 1].Split(':'); colorData.colors[i].r = float.Parse(colors[0]); colorData.colors[i].g = float.Parse(colors[1]); colorData.colors[i].b = float.Parse(colors[2]); colorData.colors[i].a = float.Parse(colors[3]); } return(colorData); }
/// <summary> /// Adds the colors to array. /// </summary> /// <param name="colorCount">Color count.</param> /// <param name="colorData">Color data.</param> public void addColors(int colorCount, ref ColorPanelData colorData) { Color[] storedColor = colorData.colors; // init an empty array if (storedColor == null) { colorData.colors = new Color[colorCount]; } // fill array with stored data else { colorData.colors = new Color[colorCount]; for (int i = 0; i < colorData.getTotColors(); ++i) { colorData.colors[i].r = storedColor[i].r; colorData.colors[i].g = storedColor[i].g; colorData.colors[i].b = storedColor[i].b; colorData.colors[i].a = storedColor[i].a; } } colorData.setTotColors(colorCount); }
void OnGUI() { GUI.skin.label.wordWrap = true; // // Load stored data, if exist. // ColorPanelData colorData = Load(); separators(3); GUILayout.Label("Color palette"); separators(1); line(); separators(1); // Color number input layout EditorGUILayout.BeginHorizontal(); { int colorCount = EditorGUILayout.IntField("Number of colors (max 15) : ", colorData.getTotColors()); // skip if the input field is empty if (colorCount <= 0) { return; } // add new item if (colorCount > colorData.getTotColors()) { arrayManager.addColors(colorCount, ref colorData); Save(colorData); } // remove items else if (colorCount < colorData.getTotColors()) { arrayManager.removeColors(colorCount, ref colorData); Save(colorData); } } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Reset colors")) { // all blacks! colorData.colors = new Color[colorData.getTotColors()]; Save(colorData); } separators(1); line(); separators(1); GUILayout.Label("Your colors are showed here. You can use it as you prefer or select a target and click apply to change its color."); separators(2); for (int i = 0; i < colorData.getTotColors(); ++i) { EditorGUILayout.BeginHorizontal(); try { colorData.colors[i] = EditorGUILayout.ColorField("COLOR #" + (i + 1), colorData.colors[i]); if (GUILayout.Button("Apply")) { ChangeColors(colorData.colors[i]); } } catch { } EditorGUILayout.EndHorizontal(); } Save(colorData); separators(1); GUILayout.Label("Color are automatically stored in your \"Assets/Resource\" folder of current project.\nYou can export (or backup) simply copying/pasting the file."); GUI.enabled = true; }