private static void DrawIntAttribute(SerializedProperty attrDesc, ref float valueX)
    {
        GUIContent content = CreateGUIContentFromAttribute(attrDesc);

        SerializedProperty m_MinMaxFlag = attrDesc.FindPropertyRelative("m_MinMaxFlag");
        SerializedProperty m_MinValue0  = attrDesc.FindPropertyRelative("m_MinValue0");
        SerializedProperty m_MaxValue0  = attrDesc.FindPropertyRelative("m_MaxValue0");

        if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue) && PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
        {
            valueX = PKFxEditorTools.IntSlider(valueX, m_MinValue0, m_MaxValue0, content);
        }
        else if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue))
        {
            valueX = PKFxEditorTools.MinIntField(valueX, m_MinValue0, content);
        }
        else if (PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
        {
            valueX = PKFxEditorTools.MaxIntField(valueX, m_MaxValue0, content);
        }
        else
        {
            valueX = PKFxManagerImpl.Int2Float(EditorGUILayout.IntField(content, PKFxManagerImpl.Float2Int(valueX)));
        }
    }
    //----------------------------------------------------------------------------

    private static void DrawInt4Attribute(SerializedProperty attrDesc, ref float valueX, ref float valueY, ref float valueZ, ref float valueW)
    {
        SerializedProperty m_MinMaxFlag = attrDesc.FindPropertyRelative("m_MinMaxFlag");
        SerializedProperty m_MinValue0  = attrDesc.FindPropertyRelative("m_MinValue0");
        SerializedProperty m_MaxValue0  = attrDesc.FindPropertyRelative("m_MaxValue0");
        SerializedProperty m_MinValue1  = attrDesc.FindPropertyRelative("m_MinValue1");
        SerializedProperty m_MaxValue1  = attrDesc.FindPropertyRelative("m_MaxValue1");
        SerializedProperty m_MinValue2  = attrDesc.FindPropertyRelative("m_MinValue2");
        SerializedProperty m_MaxValue2  = attrDesc.FindPropertyRelative("m_MaxValue2");
        SerializedProperty m_MinValue3  = attrDesc.FindPropertyRelative("m_MinValue3");
        SerializedProperty m_MaxValue3  = attrDesc.FindPropertyRelative("m_MaxValue3");

        if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue) && PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
        {
            DrawAttributeName(attrDesc, true);

            if (attrDesc.isExpanded)
            {
                ++EditorGUI.indentLevel;
                {
                    valueX = PKFxEditorTools.IntSlider(valueX, m_MinValue0, m_MaxValue0, new GUIContent("X"));
                    valueY = PKFxEditorTools.IntSlider(valueY, m_MinValue1, m_MaxValue1, new GUIContent("Y"));
                    valueZ = PKFxEditorTools.IntSlider(valueZ, m_MinValue2, m_MaxValue2, new GUIContent("Z"));
                    valueW = PKFxEditorTools.IntSlider(valueW, m_MinValue3, m_MaxValue3, new GUIContent("W"));
                }
                --EditorGUI.indentLevel;
            }
        }
        else
        {
            DrawAttributeName(attrDesc);
            Vector4 tmp4 = new Vector4(valueX, valueY, valueZ, valueW);
            tmp4 = EditorGUILayout.Vector4Field(GUIContent.none, tmp4);

            {
                if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue))
                {
                    tmp4 = PKFxEditorTools.Maxf(tmp4, m_MinValue0, m_MinValue1, m_MinValue2, m_MinValue3);
                }
                if (PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
                {
                    tmp4 = PKFxEditorTools.Minf(tmp4, m_MaxValue0, m_MaxValue1, m_MaxValue2, m_MaxValue3);
                }

                valueX = tmp4.x;
                valueY = tmp4.y;
                valueZ = tmp4.z;
                valueW = tmp4.w;
            }
        }
    }
    //----------------------------------------------------------------------------

    private static void DrawInt2Attribute(SerializedProperty attrDesc, ref float valueX, ref float valueY)
    {
        SerializedProperty m_MinMaxFlag = attrDesc.FindPropertyRelative("m_MinMaxFlag");
        SerializedProperty m_MinValue0  = attrDesc.FindPropertyRelative("m_MinValue0");
        SerializedProperty m_MaxValue0  = attrDesc.FindPropertyRelative("m_MaxValue0");
        SerializedProperty m_MinValue1  = attrDesc.FindPropertyRelative("m_MinValue1");
        SerializedProperty m_MaxValue1  = attrDesc.FindPropertyRelative("m_MaxValue1");

        if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue) && PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
        {
            DrawAttributeName(attrDesc, true);
            if (attrDesc.isExpanded)
            {
                ++EditorGUI.indentLevel;
                {
                    valueX = PKFxEditorTools.IntSlider(valueX, m_MinValue0, m_MaxValue0, new GUIContent("X"));
                    valueY = PKFxEditorTools.IntSlider(valueY, m_MinValue1, m_MaxValue1, new GUIContent("Y"));
                }
                --EditorGUI.indentLevel;
            }
        }
        else
        {
            DrawAttributeName(attrDesc);
            Vector2 tmp2 = new Vector2(valueX, valueY);
            tmp2 = EditorGUILayout.Vector2Field(GUIContent.none, tmp2);

            if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue))
            {
                tmp2 = PKFxEditorTools.Maxf(tmp2, m_MinValue0, m_MinValue1);
            }
            if (PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
            {
                tmp2 = PKFxEditorTools.Minf(tmp2, m_MaxValue0, m_MaxValue1);
            }

            valueX = tmp2.x;
            valueY = tmp2.y;
        }
    }
    //----------------------------------------------------------------------------

    private static void DrawFloat3Attribute(SerializedProperty attrDesc, ref float valueX, ref float valueY, ref float valueZ)
    {
        SerializedProperty m_MinMaxFlag = attrDesc.FindPropertyRelative("m_MinMaxFlag");
        SerializedProperty m_MinValue0  = attrDesc.FindPropertyRelative("m_MinValue0");
        SerializedProperty m_MaxValue0  = attrDesc.FindPropertyRelative("m_MaxValue0");
        SerializedProperty m_MinValue1  = attrDesc.FindPropertyRelative("m_MinValue1");
        SerializedProperty m_MaxValue1  = attrDesc.FindPropertyRelative("m_MaxValue1");
        SerializedProperty m_MinValue2  = attrDesc.FindPropertyRelative("m_MinValue2");
        SerializedProperty m_MaxValue2  = attrDesc.FindPropertyRelative("m_MaxValue2");

        if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue) && PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
        {
            DrawAttributeName(attrDesc, true);
            PKFxEditorTools.ColorPicker(GUIContent.none, ref valueX, ref valueY, ref valueZ);

            if (attrDesc.isExpanded)
            {
                ++EditorGUI.indentLevel;
                {
                    valueX = PKFxEditorTools.FloatSlider(valueX, m_MinValue0, m_MaxValue0, new GUIContent("X"));
                    valueY = PKFxEditorTools.FloatSlider(valueY, m_MinValue1, m_MaxValue1, new GUIContent("Y"));
                    valueZ = PKFxEditorTools.FloatSlider(valueZ, m_MinValue2, m_MaxValue2, new GUIContent("Z"));
                }
                --EditorGUI.indentLevel;
            }
        }
        else
        {
            DrawAttributeName(attrDesc);
            Vector3 tmp3 = new Vector3(valueX, valueY, valueZ);
            tmp3 = EditorGUILayout.Vector3Field(GUIContent.none, tmp3);

            {
                if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue))
                {
                    tmp3 = PKFxEditorTools.Maxf(tmp3, m_MinValue0, m_MinValue1, m_MinValue2);
                }
                if (PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
                {
                    tmp3 = PKFxEditorTools.Minf(tmp3, m_MaxValue0, m_MaxValue1, m_MaxValue2);
                }

                valueX = tmp3.x;
                valueY = tmp3.y;
                valueZ = tmp3.z;
            }
            PKFxEditorTools.ColorPicker(GUIContent.none, ref valueX, ref valueY, ref valueZ);
        }

        // Re-clamp between min and max at the end:
        {
            Vector3 tmp3 = new Vector3(valueX, valueY, valueZ);

            if (PKFxEditorTools.HasMin(m_MinMaxFlag.intValue))
            {
                tmp3 = PKFxEditorTools.Maxf(tmp3, m_MinValue0, m_MinValue1, m_MinValue2);
            }
            if (PKFxEditorTools.HasMax(m_MinMaxFlag.intValue))
            {
                tmp3 = PKFxEditorTools.Minf(tmp3, m_MaxValue0, m_MaxValue1, m_MaxValue2);
            }

            valueX = tmp3.x;
            valueY = tmp3.y;
            valueZ = tmp3.z;
        }
    }