/// <summary>
        /// Setup constructor
        /// </summary>
        /// <param name="biomes">Biome list</param>
        public BiomeListLatitudeDistributionModel( BiomeListModel biomes )
        {
            Arguments.CheckNotNull( biomes, "biomes" );
            m_Biomes = biomes;
            m_Biomes.Models.ListChanged += Models_ListChanged;

            float latitudeStep = 1.0f / biomes.Models.Count;
            for ( int biomeIndex = 0; biomeIndex < biomes.Models.Count; ++biomeIndex )
            {
                BiomeModel biome = biomes.Models[ biomeIndex ];
                float minLatitude = biomeIndex * latitudeStep;
                float maxLatitude = ( biomeIndex + 1 ) * latitudeStep;
                BiomeLatitudeRangeDistribution distribution = new BiomeLatitudeRangeDistribution( biome, minLatitude, maxLatitude );
                distribution.DistributionChanged += OnDistributionChanged;
                m_Distributions.Add( distribution );
            }
        }
 /// <summary>
 /// Called when a distribution changes
 /// </summary>
 private void OnDistributionChanged( BiomeLatitudeRangeDistribution distribution )
 {
     if ( DistributionChanged != null )
     {
         DistributionChanged( distribution );
     }
 }
 /// <summary>
 /// Adds a distribution of the model
 /// </summary>
 private void AddDistribution( int insertAt, BiomeLatitudeRangeDistribution distribution )
 {
     m_Distributions.Insert( insertAt, distribution );
     if ( DistributionAdded != null )
     {
         DistributionAdded( distribution );
     }
     distribution.DistributionChanged += OnDistributionChanged;
 }
        /// <summary>
        /// Splits this distribution in two, changing this distribution in place and returning
        /// a new distribution representing the other area
        /// </summary>
        public IBiomeDistribution Split( BiomeModel model )
        {
            float midLatitude = ( m_MinLatitude + m_MaxLatitude ) / 2;

            BiomeLatitudeRangeDistribution distribution = new BiomeLatitudeRangeDistribution( model, midLatitude, m_MaxLatitude );
            m_MaxLatitude = midLatitude;

            OnDistributionChanged( );

            return distribution;
        }
 private void OnDistributionRemoved( BiomeLatitudeRangeDistribution distribution )
 {
     m_View.RemoveDistribution( distribution );
 }
 private void OnDistributionChanged( BiomeLatitudeRangeDistribution distribution )
 {
     m_View.RefreshDistribution( distribution );
 }
 private void OnDistributionAdded( BiomeLatitudeRangeDistribution distribution )
 {
     m_View.AddDistribution( distribution );
 }