private bool OrganTableItemGUI(Core_CharacterGeneration.OrganData organ, string name, GUIStyle labelStyle)
        {
            bool changed = false;

            const int HEIGHT      = 18;
            const int LABEL_WIDTH = 80;
            const int ITEM_WIDTH  = 32;
            const int TABLE_GAP   = 14;

            Space(TABLE_GAP);

            // Name
            var oldC = GUI.color;

            GUI.color = new Color(0.8f, 0.85f, 0.8f);
            EditorGUI.LabelField(GUIRect(LABEL_WIDTH, HEIGHT), name, labelStyle);
            GUI.color = oldC;

            // Size
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.SizeX, true, labelStyle) || changed;
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.SizeY, true, labelStyle) || changed;
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.SizeZ, true, labelStyle) || changed;

            // Pos
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.X, true, labelStyle) || changed;
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.Y, true, labelStyle) || changed;
            changed = IntField(ITEM_WIDTH, HEIGHT, "", ref organ.Z, true, labelStyle) || changed;

            // Skin
            var color = ColorField(0, HEIGHT, "", organ.SkinColor);

            if (color != organ.SkinColor)
            {
                organ.SkinColor = color;
                changed         = true;
            }


            return(changed);
        }
        private bool OrganControllerItemGUI(Core_CharacterGeneration.OrganData organ, string name, Core_CharacterGeneration.OrganData2 organ2 = null)
        {
            bool changed = false;

            const int HEIGHT          = 22;
            const int LABEL_WIDTH     = 52;
            const int LABEL_WIDTH_ALT = 24;
            const int BUTTON_WIDTH    = 24;
            const int GAP_HEIGHT      = 4;
            const int GAP_WIDTH_ALT   = 4;

            LayoutV(() => {
                // Name
                GUI.Label(GUIRect(0, HEIGHT), name);

                // Size
                LayoutH(() => {
                    GUI.Label(GUIRect(LABEL_WIDTH, HEIGHT), "Size");
                    // X
                    changed = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.SizeX) || changed;
                    changed = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.SizeX) || changed;
                    Space(GAP_WIDTH_ALT);
                    // Y
                    changed = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.SizeY) || changed;
                    changed = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.SizeY) || changed;
                    Space(GAP_WIDTH_ALT);
                    // Z
                    changed = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.SizeZ) || changed;
                    changed = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.SizeZ) || changed;
                });

                Space(GAP_HEIGHT);

                // Position
                LayoutH(() => {
                    GUI.Label(GUIRect(LABEL_WIDTH, HEIGHT), "Position");
                    var oldE      = GUI.enabled;
                    var oldC      = GUI.color;
                    var tintColor = new Color(1, 1, 1, 0.618f);

                    // X
                    GUI.enabled = organ.EnableX;
                    GUI.color   = GUI.enabled ? oldC : tintColor;
                    changed     = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.X, GUI.enabled) || changed;
                    changed     = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.X) || changed;
                    Space(GAP_WIDTH_ALT);

                    // Y
                    GUI.enabled = organ.EnableY;
                    GUI.color   = GUI.enabled ? oldC : tintColor;
                    changed     = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.Y, GUI.enabled) || changed;
                    changed     = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.Y) || changed;
                    Space(GAP_WIDTH_ALT);

                    // Z
                    GUI.enabled = organ.EnableZ;
                    GUI.color   = GUI.enabled ? oldC : tintColor;
                    changed     = IntField(LABEL_WIDTH_ALT, HEIGHT, "", ref organ.Z, GUI.enabled) || changed;
                    changed     = AddReduceButtons(BUTTON_WIDTH, HEIGHT, ref organ.Z) || changed;

                    GUI.enabled = oldE;
                    GUI.color   = oldC;
                });

                Space(GAP_HEIGHT);

                LayoutH(() => {
                    // Skin Color
                    GUI.Label(GUIRect(LABEL_WIDTH, HEIGHT), "Skin");
                    var color = ColorField(0, HEIGHT, "", organ.SkinColor);
                    if (color != organ.SkinColor)
                    {
                        organ.SkinColor = color;
                        changed         = true;
                    }

                    // Mirror
                    if (organ2 != null)
                    {
                        GUIRect(24, HEIGHT);
                        var newMirror = EditorGUI.ToggleLeft(GUIRect(LABEL_WIDTH + 8, HEIGHT), " Mirror", organ2.Mirrored);
                        if (newMirror != organ2.Mirrored)
                        {
                            organ2.Mirrored = newMirror;
                            changed         = true;
                        }
                    }
                });

                if (changed && organ2 != null && organ2.Mirrored)
                {
                    // Mirror to another
                    var otherOrgan = organ == organ2.Left ? organ2.Right : organ2.Left;
                    otherOrgan.CopyFrom(organ, true);
                }
            }, false, new GUIStyle(GUI.skin.box)
            {
                fixedWidth = LABEL_WIDTH + LABEL_WIDTH_ALT * 3f + BUTTON_WIDTH * 3f + GAP_WIDTH_ALT * 2f + 12,
            });

            return(changed);
        }