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);
            }
        }
    }
    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);
            }
        }
    }