/// <summary> /// Setup constructor /// </summary> /// <param name="view">View to control</param> /// <param name="template">Template to control</param> /// <param name="model">Model to control</param> /// <exception cref="System.ArgumentNullException">Thrown if any argument is null</exception> public CloudModelTemplateViewController( ICloudModelTemplateView view, IPlanetSimpleCloudTemplate template, IPlanetSimpleCloudModel model ) { Arguments.CheckNotNull( view, "view" ); Arguments.CheckNotNull( template, "template" ); m_Model = model; m_Template = template; view.TemplateCloudLayerHeightChanged += OnTemplateCloudLayerHeightChanged; view.TemplateLowCoverageChanged += OnTemplateLowCoverageChanged; view.TemplateHighCoverageChanged += OnTemplateHighCoverageChanged; view.ModelCloudLayerHeightChanged += OnModelCloudLayerHeightChanged; view.ModelLowCoverageChanged += OnModelLowCoverageChanged; view.ModelHighCoverageChanged += OnModelHighCoverageChanged; view.EnableModelChanges = ( model != null ); }
/// <summary> /// Creates a cloud shell renderable from a cloud model /// </summary> private void BuildCloudShell( IPlanetSimpleCloudModel simpleCloudModel ) { DestroyCloudShell( ); m_BuildRadius = ( simpleCloudModel.CloudLayerHeight + Planet.Model.Radius ); Graphics.Draw.StartCache( ); Graphics.Draw.Sphere( null, Point3.Origin, m_BuildRadius.ToRenderUnits, 50, 50 ); m_CloudShell = Graphics.Draw.StopCache( ); }
/// <summary> /// Returns true if the cloud model parameters differ from those used to create the cloud shell renderable object /// </summary> private bool DoesCloudShellRequireRebuild( IPlanetSimpleCloudModel simpleCloudModel ) { if ( m_CloudShell == null ) { return true; } return m_BuildRadius != ( simpleCloudModel.CloudLayerHeight + Planet.Model.Radius ); }
/// <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> /// Creates a view used to edit flat cloud model templates /// </summary> public IFlatCloudModelTemplateView CreateCloudTemplateView( IPlanetSimpleCloudTemplate template, IPlanetSimpleCloudModel model ) { FlatCloudModelTemplateControl view = new FlatCloudModelTemplateControl( ); new CloudModelTemplateViewController( view, template, model ); return view; }