public TimeOfDayPalette Copy() { TimeOfDayPalette p = new TimeOfDayPalette(); p.time = time; p.c0 = c0; p.c1 = c1; p.c2 = c2; p.c3 = c3; p.c4 = c4; p.c5 = c5; p.c6 = c6; p.c7 = c7; p.c8 = c8; p.c9 = c9; return(p); }
void PaintTexture(Texture2D tex) { List <TimeOfDayPalette> ps = new List <TimeOfDayPalette>(data.palettes); TimeOfDayPalette early = data.palettes[0]; TimeOfDayPalette late = data.palettes[0]; for (int k = 1; k < data.palettes.Length; k++) { if (early.time > data.palettes[k].time) { early = data.palettes[k]; } if (late.time < data.palettes[k].time) { late = data.palettes[k]; } } early = early.Copy(); early.time += 24f; ps.Add(early); late = late.Copy(); late.time -= 24f; ps.Add(late); for (int j = 0; j < 256; j++) { float t = j / 256f; t *= 24f; t += 0.0314159f; TimeOfDayPalette under = late; TimeOfDayPalette over = early; for (int k = 0; k < ps.Count; k++) { if (ps[k].time <= t && ps[k].time > under.time) { under = ps[k]; } if (ps[k].time >= t && ps[k].time < over.time) { over = ps[k]; } } float f = (t - under.time) / (over.time - under.time); for (int i = 0; i < 10; i++) { Color c = Color.Lerp(under.Colors[i], over.Colors[i], f); for (int k = 0; k < 26; k++) { if (i * 26 + k < 256) { tex.SetPixel(i * 26 + k, j, c); } } } } tex.Apply(); }
void OnGUI() { data = (TimeOfDayData)EditorGUI.ObjectField(new Rect(10f, 10f, 100f, 15f), data, typeof(TimeOfDayData), false); if (GUI.Button(new Rect(120f, 10f, 100f, 15f), "Generate Tex")) { Texture2D tex = new Texture2D(256, 256, TextureFormat.RGB24, false); PaintTexture(tex); var bytes = tex.EncodeToPNG(); DestroyImmediate(tex); File.WriteAllBytes(Application.dataPath + "/_Textures/todGradient.png", bytes); } if (data != null) { bool isDirty = false; float cpwidth = 40f; float cpheight = 17f; for (int i = 0; i < data.palettes.Length; i++) { TimeOfDayPalette pal = data.palettes[i]; float t = Mathf.Clamp01(pal.time / 24f); float h = 50f + Mathf.Floor(t * 600f); float cw = 10f; float c = pal.time; pal.time = EditorGUI.FloatField(new Rect(cw, h, cpwidth, cpheight), pal.time); if (c != pal.time) { isDirty = true; } cw += cpwidth; Color cache = pal.c0; pal.c0 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c0); if (pal.c0 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c1; pal.c1 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c1); if (pal.c1 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c2; pal.c2 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c2); if (pal.c2 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c3; pal.c3 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c3); if (pal.c3 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c4; pal.c4 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c4); if (pal.c4 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c5; pal.c5 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c5); if (pal.c5 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c6; pal.c6 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c6); if (pal.c6 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c7; pal.c7 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c7); if (pal.c7 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c8; pal.c8 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c8); if (pal.c8 != cache) { isDirty = true; } cw += cpwidth; cache = pal.c9; pal.c9 = EditorGUI.ColorField(new Rect(cw, h, cpwidth, cpheight), pal.c9); if (pal.c9 != cache) { isDirty = true; } cw += cpwidth; } if (isDirty) { EditorUtility.SetDirty(data); } } }
public TimeOfDayPalette Copy() { TimeOfDayPalette p = new TimeOfDayPalette(); p.time = time; p.c0 = c0; p.c1 = c1; p.c2 = c2; p.c3 = c3; p.c4 = c4; p.c5 = c5; p.c6 = c6; p.c7 = c7; p.c8 = c8; p.c9 = c9; return p; }