private void CreateClouds()
    {
        if (hasCumulusClouds)
        {
            cumulusClouds = new SilverLiningCumulusCloudLayer(cumulusDimensions, cumulusPosition, cumulusCoverage);
        }

        if (hasCirrusClouds)
        {
            cirrusCloud = new SilverLiningCirrusCloud(cirrusPosition, cirrusSize);
        }

        if (hasStratusClouds)
        {
            stratusCloud        = new SilverLiningStratusCloud(stratusPosition, stratusSize, stratusThickness);
            stratusWindPosition = stratusPosition;
        }

        lastHasCumulusClouds  = hasCumulusClouds;
        lastCumulusDimensions = cumulusDimensions;
        lastCumulusPosition   = cumulusPosition;
        lastCumulusCoverage   = cumulusCoverage;
        lastHasCirrusClouds   = hasCirrusClouds;
        lastCirrusPosition    = cirrusPosition;
        lastCirrusSize        = cirrusSize;
        lastHasStratusClouds  = hasStratusClouds;
        lastStratusPosition   = stratusPosition;
        lastStratusSize       = stratusSize;
        lastStratusThickness  = stratusThickness;
        lastApplyFogToClouds  = applyFogToClouds;
    }
    private void CreateClouds ()
    {
        if (hasCumulusClouds) {
            cumulusClouds = new SilverLiningCumulusCloudLayer (cumulusDimensions, cumulusPosition, cumulusCoverage);
        }

        if (hasCirrusClouds) {
            cirrusCloud = new SilverLiningCirrusCloud (cirrusPosition, cirrusSize);
        }

        if (hasStratusClouds) {
            stratusCloud = new SilverLiningStratusCloud (stratusPosition, stratusSize, stratusThickness);
            stratusWindPosition = stratusPosition;
        }

        lastHasCumulusClouds = hasCumulusClouds;
        lastCumulusDimensions = cumulusDimensions;
        lastCumulusPosition = cumulusPosition;
        lastCumulusCoverage = cumulusCoverage;
        lastHasCirrusClouds = hasCirrusClouds;
        lastCirrusPosition = cirrusPosition;
        lastCirrusSize = cirrusSize;
        lastHasStratusClouds = hasStratusClouds;
        lastStratusPosition = stratusPosition;
        lastStratusSize = stratusSize;
        lastStratusThickness = stratusThickness;
        lastApplyFogToClouds = applyFogToClouds;
    }
    private void CheckRecreateClouds()
    {
        if (hasCumulusClouds != lastHasCumulusClouds || cumulusDimensions != lastCumulusDimensions ||
            cumulusPosition != lastCumulusPosition || cumulusCoverage != lastCumulusCoverage ||
            applyFogToClouds != lastApplyFogToClouds)
        {
            if (cumulusClouds != null) {
                cumulusClouds.DestroyClouds();
            }

            cumulusClouds = null;

            if (hasCumulusClouds) {
                cumulusClouds = new SilverLiningCumulusCloudLayer (cumulusDimensions, cumulusPosition, cumulusCoverage);
                cumulusClouds.UpdateLighting (sky.GetSunOrMoonColor (), sky.GetSunOrMoonPosition ());
				cumulusClouds.UpdateAllClouds (sky.GetSunOrMoonColor (), sky.GetSunOrMoonPosition());
                cumulusClouds.UpdateFog(applyFogToClouds);
                cumulusClouds.Update();
            }

            lastHasCumulusClouds = hasCumulusClouds;
            lastCumulusDimensions = cumulusDimensions;
            lastCumulusPosition = cumulusPosition;
            lastCumulusCoverage = cumulusCoverage;
            lastApplyFogToClouds = applyFogToClouds;
        }

        if (hasStratusClouds != lastHasStratusClouds || stratusPosition != lastStratusPosition ||
            stratusSize != lastStratusSize || stratusThickness != lastStratusThickness)
        {
            if (stratusCloud != null) {
                stratusCloud.Destroy();
            }

            stratusCloud = null;

            if (hasStratusClouds) {
                stratusCloud = new SilverLiningStratusCloud(stratusPosition, stratusSize, stratusThickness);
                stratusWindPosition = stratusPosition;
            }

            lastHasStratusClouds = hasStratusClouds;
            lastStratusPosition = stratusPosition;
            lastStratusSize = stratusSize;
            lastStratusThickness = stratusThickness;
        }

        if (hasCirrusClouds != lastHasCirrusClouds || cirrusPosition != lastCirrusPosition ||
            cirrusSize != lastCirrusSize)
        {
            if (cirrusCloud != null) {
                cirrusCloud.Destroy();
            }

            cirrusCloud = null;

            if (hasCirrusClouds) {
                cirrusCloud = new SilverLiningCirrusCloud(cirrusPosition, cirrusSize);
            }

            lastHasCirrusClouds = hasCirrusClouds;
            lastCirrusPosition = cirrusPosition;
            lastCirrusSize = cirrusSize;
        }

    }
    private void CheckRecreateClouds()
    {
        if (hasCumulusClouds != lastHasCumulusClouds || cumulusDimensions != lastCumulusDimensions ||
            cumulusPosition != lastCumulusPosition || cumulusCoverage != lastCumulusCoverage ||
            applyFogToClouds != lastApplyFogToClouds)
        {
            if (cumulusClouds != null)
            {
                cumulusClouds.DestroyClouds();
            }

            cumulusClouds = null;

            if (hasCumulusClouds)
            {
                cumulusClouds = new SilverLiningCumulusCloudLayer(cumulusDimensions, cumulusPosition, cumulusCoverage);
                cumulusClouds.UpdateLighting(sky.GetSunOrMoonColor(), sky.GetSunOrMoonPosition());
                cumulusClouds.UpdateAllClouds(sky.GetSunOrMoonColor(), sky.GetSunOrMoonPosition());
                cumulusClouds.UpdateFog(applyFogToClouds);
                cumulusClouds.Update();
            }

            lastHasCumulusClouds  = hasCumulusClouds;
            lastCumulusDimensions = cumulusDimensions;
            lastCumulusPosition   = cumulusPosition;
            lastCumulusCoverage   = cumulusCoverage;
            lastApplyFogToClouds  = applyFogToClouds;
        }

        if (hasStratusClouds != lastHasStratusClouds || stratusPosition != lastStratusPosition ||
            stratusSize != lastStratusSize || stratusThickness != lastStratusThickness)
        {
            if (stratusCloud != null)
            {
                stratusCloud.Destroy();
            }

            stratusCloud = null;

            if (hasStratusClouds)
            {
                stratusCloud        = new SilverLiningStratusCloud(stratusPosition, stratusSize, stratusThickness);
                stratusWindPosition = stratusPosition;
            }

            lastHasStratusClouds = hasStratusClouds;
            lastStratusPosition  = stratusPosition;
            lastStratusSize      = stratusSize;
            lastStratusThickness = stratusThickness;
        }

        if (hasCirrusClouds != lastHasCirrusClouds || cirrusPosition != lastCirrusPosition ||
            cirrusSize != lastCirrusSize)
        {
            if (cirrusCloud != null)
            {
                cirrusCloud.Destroy();
            }

            cirrusCloud = null;

            if (hasCirrusClouds)
            {
                cirrusCloud = new SilverLiningCirrusCloud(cirrusPosition, cirrusSize);
            }

            lastHasCirrusClouds = hasCirrusClouds;
            lastCirrusPosition  = cirrusPosition;
            lastCirrusSize      = cirrusSize;
        }
    }