ObjectType = ParticleEmitter
{
    Vec3 ConstantForce
    {
        float X = 0;

        float Y = 0;

        float Z = 0;
    }

    float EmissionRate = 0;

    unsigned int ParticlesPerEmission = 1;

    bool UniformScaling = true;

    unsigned int ParticlesPerEmissionMod = 1;

    float Rotation = 0;

    Vec3 Position
    {
        float X = 0;

        float Y = 0;

        float Z = 0;
    }

    bool FaceEmitter = false;

    bool UseLocalTransform = true;

    bool Visible = true;

    bool RotationalVelocity = true;

    float AttrValMod = 1;

    unsigned int ParticleAmount = 500;

    unsigned int RenderingType = 4;

    std::pair<float, float> InitialLifeRange
    {
        float First = 5;

        float Second = 20;
    }

    char* ParticleTexture = "light.png";

    unsigned int EmitterType = 0;

    float Ring_InnerRadius = 0;

    float Ring_OuterRadius = 2.5;

    float Ring_StartingAngle = 0;

    float Ring_EndingAngle = 360;

    float Rectangle_InnerWidth = 0;

    float Rectangle_OuterWidth = 10;

    ParticleAttribute ParticleAttributes
    [
        Element = "ScaleX"
        {
            std::pair<float, float> StartingRange
            {
                float First = -15;

                float Second = 15;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 0;
            }

            bool EndingRangeEnabled = true;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "ScaleY"
        {
            std::pair<float, float> StartingRange
            {
                float First = -5;

                float Second = 5;
            }

            std::pair<float, float> EndingRange
            {
                float First = -5;

                float Second = 5;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "Rotation"
        {
            std::pair<float, float> StartingRange
            {
                float First = -6.28319;

                float Second = 6.28319;
            }

            std::pair<float, float> EndingRange
            {
                float First = -6.28319;

                float Second = 6.28319;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "LinVelDirX"
        {
            std::pair<float, float> StartingRange
            {
                float First = -1;

                float Second = 1;
            }

            std::pair<float, float> EndingRange
            {
                float First = -1;

                float Second = 1;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "LinVelDirY"
        {
            std::pair<float, float> StartingRange
            {
                float First = -1;

                float Second = 1;
            }

            std::pair<float, float> EndingRange
            {
                float First = -1;

                float Second = 1;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "LinVelDirZ"
        {
            std::pair<float, float> StartingRange
            {
                float First = -1;

                float Second = 1;
            }

            std::pair<float, float> EndingRange
            {
                float First = -1;

                float Second = 1;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 0;
        }

        Element = "LinVelSpeed"
        {
            std::pair<float, float> StartingRange
            {
                float First = -30;

                float Second = 30;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 0;
            }

            bool EndingRangeEnabled = true;

            float ValueModifier = 0.2;

            unsigned int m_AttributeType = 0;
        }

        Element = "ColorR"
        {
            std::pair<float, float> StartingRange
            {
                float First = 0;

                float Second = 255;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 255;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 2;
        }

        Element = "ColorG"
        {
            std::pair<float, float> StartingRange
            {
                float First = 0;

                float Second = 0;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 255;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 2;
        }

        Element = "ColorB"
        {
            std::pair<float, float> StartingRange
            {
                float First = 0;

                float Second = 0;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 255;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 2;
        }

        Element = "ColorIntensity"
        {
            std::pair<float, float> StartingRange
            {
                float First = 0.5;

                float Second = 0.5;
            }

            std::pair<float, float> EndingRange
            {
                float First = 1;

                float Second = 1;
            }

            bool EndingRangeEnabled = true;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 1;
        }

        Element = "Alpha"
        {
            std::pair<float, float> StartingRange
            {
                float First = 0;

                float Second = 1;
            }

            std::pair<float, float> EndingRange
            {
                float First = 0;

                float Second = 1;
            }

            bool EndingRangeEnabled = false;

            float ValueModifier = 1;

            unsigned int m_AttributeType = 1;
        }
    ]

    float Rectangle_InnerHeight = 0;

    float Rectangle_OuterHeight = 10;

    unsigned int RenderingLayer = 0;
}

