//----------------------------------------------------------------------------

    public void DrawCube(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling)
    {
        PKFxFX fx = (PKFxFX)target;

        Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform;

        if (!worldSpaceSampling)
        {
            shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform;
        }

        Vector3    position = shapeTransform.GetColumn(3);
        Quaternion rotation = shapeTransform.rotation;

        Vector3 size = sampler.m_Dimensions;
        Vector3 A    = position + rotation * new Vector3(-size.x / 2, size.y / 2, size.z / 2);
        Vector3 B    = position + rotation * new Vector3(size.x / 2, size.y / 2, size.z / 2);
        Vector3 C    = position + rotation * new Vector3(size.x / 2, -size.y / 2, size.z / 2);
        Vector3 D    = position + rotation * new Vector3(-size.x / 2, -size.y / 2, size.z / 2);
        Vector3 E    = position + rotation * new Vector3(-size.x / 2, size.y / 2, -size.z / 2);
        Vector3 F    = position + rotation * new Vector3(size.x / 2, size.y / 2, -size.z / 2);
        Vector3 G    = position + rotation * new Vector3(size.x / 2, -size.y / 2, -size.z / 2);
        Vector3 H    = position + rotation * new Vector3(-size.x / 2, -size.y / 2, -size.z / 2);

        Vector3[] face = new Vector3[5];

        Handles.color = Color.cyan;
        face[0]       = A;
        face[1]       = B;
        face[2]       = C;
        face[3]       = D;
        face[4]       = A;
        Handles.DrawPolyLine(face);
        face[0] = A;
        face[1] = E;
        face[2] = H;
        face[3] = D;
        face[4] = A;
        Handles.DrawPolyLine(face);
        face[0] = B;
        face[1] = F;
        face[2] = G;
        face[3] = C;
        face[4] = B;
        Handles.DrawPolyLine(face);
        face[0] = E;
        face[1] = F;
        face[2] = G;
        face[3] = H;
        face[4] = E;
        Handles.DrawPolyLine(face);
    }
    //----------------------------------------------------------------------------

    public void DrawSphere(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling)
    {
        PKFxFX    fx             = (PKFxFX)target;
        float     radius         = sampler.m_Dimensions.x;
        float     innerRadius    = sampler.m_Dimensions.y;
        Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform;

        if (!worldSpaceSampling)
        {
            shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform;
        }

        Vector3    position = shapeTransform.GetColumn(3);
        Quaternion rotation = shapeTransform.rotation;
        Vector3    scale    = shapeTransform.lossyScale;

        Handles.color = Color.blue;
        innerRadius   = Handles.RadiusHandle(rotation, position, Mathf.Min(radius, innerRadius));
        Handles.color = Color.cyan;
        radius        = Handles.RadiusHandle(rotation, position, Mathf.Max(radius, innerRadius));
    }
    public void DrawCylinder(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling)
    {
        PKFxFX    fx             = (PKFxFX)target;
        float     radius         = sampler.m_Dimensions.x;
        float     innerRadius    = sampler.m_Dimensions.y;
        float     height         = sampler.m_Dimensions.z;
        Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform;

        if (!worldSpaceSampling)
        {
            shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform;
        }

        Vector3    position = shapeTransform.GetColumn(3);
        Quaternion rotation = shapeTransform.rotation;

        Handles.color = Color.blue;
        _PrimitiveCylinder(innerRadius, height, position, rotation);

        Handles.color = Color.cyan;
        _PrimitiveCylinder(radius, height, position, rotation);
    }
    //----------------------------------------------------------------------------

    public void OnSceneGUI()
    {
        if (target != null)
        {
            PKFxFX fx = target as PKFxFX;

            if (fx != null && fx.m_FxSamplersList != null)
            {
                for (int i = 0; i < fx.m_FxSamplersList.Count; i++)
                {
                    PKFxFX.Sampler sampler = fx.m_FxSamplersList[i];
                    if (sampler != null && sampler.m_Descriptor.m_Type == (int)PKFxFxAsset.SamplerDesc.ESamplerType.SamplerShape)
                    {
                        // Show the shapes in world space instead of local space (just for the editor workflow, does not change the actual sampling)
                        bool worldSpaceSampling = sampler.m_WorldSpaceSampling;

                        if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.BoxShape)
                        {
                            DrawCube(i, sampler, worldSpaceSampling);
                        }
                        else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.SphereShape)
                        {
                            DrawSphere(i, sampler, worldSpaceSampling);
                        }
                        else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.CylinderShape)
                        {
                            DrawCylinder(i, sampler, worldSpaceSampling);
                        }
                        else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.CapsuleShape)
                        {
                            DrawCapsule(i, sampler, worldSpaceSampling);
                        }
                    }
                }
            }
        }
    }