/// <summary>
 /// Sets up a model instance from this template
 /// </summary>
 public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
 {
     base.SetupInstance( model, context );
     IPlanetHomogenousProceduralTerrainModel terrainModel = ( IPlanetHomogenousProceduralTerrainModel )model;
     terrainModel.HeightFunction = HeightFunction;
     terrainModel.GroundOffsetFunction = GroundOffsetFunction;
 }
        /// <summary>
        /// Creates an instance of this template
        /// </summary>
        /// <param name="model">Planet model to create</param>
        /// <param name="context">Instancing context</param>
        public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
        {
            Arguments.CheckNotNull( model, "planetModel" );
            Arguments.CheckNotNull( context, "context" );

            SetupCloudModel( ( IPlanetSimpleCloudModel )model, context );
        }
        /// <summary>
        /// Sets up a simple cloud model
        /// </summary>
        protected virtual void SetupCloudModel( IPlanetSimpleCloudModel model, ModelTemplateInstanceContext context )
        {
            model.CloudLayerHeight = Range.Mid( CloudLayerHeightRange, context.Random.NextDouble( ) );

            float min = Range.Mid( LowCoverageRange, ( float )context.Random.NextDouble( ) );
            float max = Range.Mid( HighCoverageRange, ( float )context.Random.NextDouble( ) );
            model.CloudCoverRange = new Range<float>( Utils.Min( min, max ), Utils.Max( min, max ) );
        }
 /// <summary>
 /// Builds a planet model
 /// </summary>
 protected override void BuildPlanetModel( IPlanetModel planetModel, IPlanetEnvironmentModelFactory modelFactory, ModelTemplateInstanceContext context )
 {
     Units.Metres radius = Range.Mid( m_Radius, context.Random.NextDouble( ) );
     ( ( ISpherePlanetModel )planetModel ).Radius = radius;
     base.BuildPlanetModel( planetModel, modelFactory, context );
 }
 /// <summary>
 /// Atmosphere model creation
 /// </summary>
 public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
 {
     IPlanetAtmosphereScatteringModel atmosphereModel = ( IPlanetAtmosphereScatteringModel )model;
     double thicknessRatio = AtmosphereModel.AtmosphereThicknessMetres / AtmosphereModel.InnerRadiusMetres;
     atmosphereModel.Thickness = ( ( SpherePlanetModel )model.PlanetModel ).Radius * thicknessRatio;
 }
 /// <summary>
 /// Atmosphere model creation
 /// </summary>
 public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
 {
     IPlanetAtmosphereScatteringModel atmosphereModel = ( IPlanetAtmosphereScatteringModel )model;
     atmosphereModel.Thickness = Range.Mid( m_Thickness, ( float )context.Random.NextDouble( ) );
     //	IPlanetAtmosphereModel atmosphereModel = ( IPlanetAtmosphereModel )model;
 }
 /// <summary>
 /// Sets up a ring model instance
 /// </summary>
 public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
 {
     IPlanetRingModel ringModel = ( IPlanetRingModel )model;
     double width = RingWidth.Minimum + ( RingWidth.Maximum - RingWidth.Minimum ) * context.Random.NextDouble( );
     ringModel.Width = new Units.Metres( width );
 }
 /// <summary>
 /// Creates an instance of this template
 /// </summary>
 public override void SetupInstance( IPlanetEnvironmentModel model, ModelTemplateInstanceContext context )
 {
     ( ( IPlanetTerrainModel )model ).MaximumHeight = Range.Mid( MaximumHeightRange, context.Random.NextDouble( ) );
 }