public void SetPropertyByName(string name, IParticleProperty <float> property)
        {
            switch (name)
            {
            case "Angle":
                Angle = property;
                break;

            case "AngularVelocity":
                Angle = property;
                break;

            case "Size":
                Size = property;
                break;

            case "Life":
                Life = property;
                break;

            case "SpawnFrequency":
                SpawnFrequency = property;
                break;
            }
        }
 public void SetPropertyByName(string name, IParticleProperty <int> property)
 {
     switch (name)
     {
     case "Alpha":
         Alpha = property;
         break;
     }
 }
        public void SetPropertyByName(string name, IParticleProperty <Color> property)
        {
            switch (name)
            {
            case "StartColor":
                StartColor = property;
                break;

            case "EndColor":
                EndColor = property;
                break;
            }
        }
        public void SetPropertyByName(string name, IParticleProperty <Vector2> property)
        {
            switch (name)
            {
            case "StartVelocity":
                StartVelocity = property;
                break;

            case "EndVelocity":
                EndVelocity = property;
                break;
            }
        }
        public IParticleProperty <TValue> LoadProperty(XElement node)
        {
            string propType  = node.Attribute("PropertyType").Value;
            string constType = typeof(Constant <TValue>).GetGenericTypeDefinition().FullName;
            string rangeType = typeof(Range <TValue>).GetGenericTypeDefinition().FullName;
            string randType  = typeof(RandomNumber <TValue>).GetGenericTypeDefinition().FullName;

            IParticleProperty <TValue> property = null;

            if (propType.Equals(constType))
            {
                property = new Constant <TValue>();

                if (typeof(TValue) == typeof(float))
                {
                    (property as Constant <TValue>).ConstantValue = (TValue)Convert.ChangeType(
                        XmlConvert.ToSingle(node.Element("ConstantValue").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(double))
                {
                    (property as Constant <TValue>).ConstantValue = (TValue)Convert.ChangeType(
                        XmlConvert.ToDouble(node.Element("ConstantValue").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(int))
                {
                    (property as Constant <TValue>).ConstantValue = (TValue)Convert.ChangeType(
                        XmlConvert.ToInt32(node.Element("ConstantValue").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(Vector2))
                {
                    (property as Constant <TValue>).ConstantValue = (TValue)Convert.ChangeType(
                        ParseVectorNode(node.Element("ConstantValue").Element("Vector")), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(Color))
                {
                    (property as Constant <TValue>).ConstantValue = (TValue)Convert.ChangeType(
                        ParseColorNode(node.Element("ConstantValue").Element("Color")), typeof(TValue)
                        );
                }
            }
            else if (propType.Equals(rangeType))
            {
                property = new Range <TValue>(_randomizer);

                if (typeof(TValue) == typeof(float))
                {
                    (property as Range <TValue>).LowerBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToSingle(node.Element("LowerBound").Value), typeof(TValue)
                        );
                    (property as Range <TValue>).UpperBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToSingle(node.Element("UpperBound").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(double))
                {
                    (property as Range <TValue>).LowerBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToDouble(node.Element("LowerBound").Value), typeof(TValue)
                        );
                    (property as Range <TValue>).UpperBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToDouble(node.Element("UpperBound").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(int))
                {
                    (property as Range <TValue>).LowerBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToInt32(node.Element("LowerBound").Value), typeof(TValue)
                        );
                    (property as Range <TValue>).UpperBound = (TValue)Convert.ChangeType(
                        XmlConvert.ToInt32(node.Element("UpperBound").Value), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(Vector2))
                {
                    (property as Range <TValue>).LowerBound = (TValue)Convert.ChangeType(
                        ParseVectorNode(node.Element("LowerBound").Element("Vector")), typeof(TValue)
                        );
                    (property as Range <TValue>).UpperBound = (TValue)Convert.ChangeType(
                        ParseVectorNode(node.Element("UpperBound").Element("Vector")), typeof(TValue)
                        );
                }
                else if (typeof(TValue) == typeof(Color))
                {
                    (property as Range <TValue>).LowerBound = (TValue)Convert.ChangeType(
                        ParseColorNode(node.Element("LowerBound").Element("Color")), typeof(TValue)
                        );
                    (property as Range <TValue>).UpperBound = (TValue)Convert.ChangeType(
                        ParseColorNode(node.Element("UpperBound").Element("Color")), typeof(TValue)
                        );
                }
            }
            else if (propType.Equals(rangeType))
            {
                property = new RandomNumber <TValue>(_randomizer);
                (property as RandomNumber <TValue>).Scalar = XmlConvert.ToSingle(node.Element("Scalar").Value);
            }

            return(property);
        }
 public void SetPropertyByName(string name, IParticleProperty <double> property)
 {
 }