public override int GetHashCode()
 {
     return(WaterPropertiesSunPower.GetHashCode());
 }
        protected override void WriteDataXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            ele.TryPathTo("Unknown", true, out subEle);
            subEle.Value = Unknown.ToHex();

            ele.TryPathTo("WaterProperties/SunPower", true, out subEle);
            subEle.Value = WaterPropertiesSunPower.ToString("G15");

            ele.TryPathTo("WaterProperties/ReflectivityAmount", true, out subEle);
            subEle.Value = WaterPropertiesReflectivityAmount.ToString("G15");

            ele.TryPathTo("WaterProperties/FresnelAmount", true, out subEle);
            subEle.Value = WaterPropertiesFresnelAmount.ToString("G15");

            WriteUnused1XML(ele, master);

            ele.TryPathTo("FogProperties/AboveWater/FogNearPlaneDistance", true, out subEle);
            subEle.Value = FogPropertiesAboveWaterFogNearPlaneDistance.ToString("G15");

            ele.TryPathTo("FogProperties/AboveWater/FogFarPlaneDistance", true, out subEle);
            subEle.Value = FogPropertiesAboveWaterFogFarPlaneDistance.ToString("G15");

            ele.TryPathTo("Color/Shallow", true, out subEle);
            ColorShallow.WriteXML(subEle, master);

            ele.TryPathTo("Color/Deep", true, out subEle);
            ColorDeep.WriteXML(subEle, master);

            ele.TryPathTo("Color/Reflection", true, out subEle);
            ColorReflection.WriteXML(subEle, master);

            WriteUnused2XML(ele, master);

            ele.TryPathTo("RainSimulator/Force", true, out subEle);
            subEle.Value = RainSimulatorForce.ToString("G15");

            ele.TryPathTo("RainSimulator/Velocity", true, out subEle);
            subEle.Value = RainSimulatorVelocity.ToString("G15");

            ele.TryPathTo("RainSimulator/Falloff", true, out subEle);
            subEle.Value = RainSimulatorFalloff.ToString("G15");

            ele.TryPathTo("RainSimulator/Dampener", true, out subEle);
            subEle.Value = RainSimulatorDampener.ToString("G15");

            ele.TryPathTo("DisplacementSimulator/StartingSize", true, out subEle);
            subEle.Value = DisplacementSimulatorStartingSize.ToString("G15");

            ele.TryPathTo("DisplacementSimulator/Force", true, out subEle);
            subEle.Value = DisplacementSimulatorForce.ToString("G15");

            ele.TryPathTo("DisplacementSimulator/Velocity", true, out subEle);
            subEle.Value = DisplacementSimulatorVelocity.ToString("G15");

            ele.TryPathTo("DisplacementSimulator/Falloff", true, out subEle);
            subEle.Value = DisplacementSimulatorFalloff.ToString("G15");

            ele.TryPathTo("DisplacementSimulator/Dampener", true, out subEle);
            subEle.Value = DisplacementSimulatorDampener.ToString("G15");

            ele.TryPathTo("RainSimulator/StartingSize", true, out subEle);
            subEle.Value = RainSimulatorStartingSize.ToString("G15");

            ele.TryPathTo("NoiseProperties/Normals/NoiseScale", true, out subEle);
            subEle.Value = NoisePropertiesNormalsNoiseScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerOne/WindDirection", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerOneWindDirection.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerTwo/WindDirection", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerTwoWindDirection.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerThree/WindDirection", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerThreeWindDirection.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerOne/WindSpeed", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerOneWindSpeed.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerTwo/WindSpeed", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerTwoWindSpeed.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerThree/WindSpeed", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerThreeWindSpeed.ToString("G15");

            ele.TryPathTo("NoiseProperties/Normals/DepthFalloff/Start", true, out subEle);
            subEle.Value = NoisePropertiesNormalsDepthFalloffStart.ToString("G15");

            ele.TryPathTo("NoiseProperties/Normals/DepthFalloff/End", true, out subEle);
            subEle.Value = NoisePropertiesNormalsDepthFalloffEnd.ToString("G15");

            ele.TryPathTo("FogProperties/AboveWater/FogAmount", true, out subEle);
            subEle.Value = FogPropertiesAboveWaterFogAmount.ToString("G15");

            ele.TryPathTo("NoiseProperties/Normals/UVScale", true, out subEle);
            subEle.Value = NoisePropertiesNormalsUVScale.ToString("G15");

            ele.TryPathTo("FogProperties/UnderWater/FogAmount", true, out subEle);
            subEle.Value = FogPropertiesUnderWaterFogAmount.ToString("G15");

            ele.TryPathTo("FogProperties/UnderWater/FogNearPlaneDistance", true, out subEle);
            subEle.Value = FogPropertiesUnderWaterFogNearPlaneDistance.ToString("G15");

            ele.TryPathTo("FogProperties/UnderWater/FogFarPlaneDistance", true, out subEle);
            subEle.Value = FogPropertiesUnderWaterFogFarPlaneDistance.ToString("G15");

            ele.TryPathTo("WaterProperties/DistortionAmount", true, out subEle);
            subEle.Value = WaterPropertiesDistortionAmount.ToString("G15");

            ele.TryPathTo("WaterProperties/Shininess", true, out subEle);
            subEle.Value = WaterPropertiesShininess.ToString("G15");

            ele.TryPathTo("WaterProperties/ReflectionHDRMult", true, out subEle);
            subEle.Value = WaterPropertiesReflectionHDRMult.ToString("G15");

            ele.TryPathTo("WaterProperties/LightRadius", true, out subEle);
            subEle.Value = WaterPropertiesLightRadius.ToString("G15");

            ele.TryPathTo("WaterProperties/LightBrightness", true, out subEle);
            subEle.Value = WaterPropertiesLightBrightness.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerOne/UVScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerOneUVScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerTwo/UVScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerTwoUVScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerThree/UVScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerThreeUVScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerOne/AmplitudeScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerOneAmplitudeScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerTwo/AmplitudeScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerTwoAmplitudeScale.ToString("G15");

            ele.TryPathTo("NoiseProperties/NoiseLayerThree/AmplitudeScale", true, out subEle);
            subEle.Value = NoisePropertiesNoiseLayerThreeAmplitudeScale.ToString("G15");

            ele.TryPathTo("Damage", true, out subEle);
            subEle.Value = Damage.ToString();
        }