/// <summary> /// Computes the trees to be cut. /// </summary> /// <param name='frequencyDistribution'> /// Frequency distribution. /// </param> /// <param name='diameterLimit'> /// Diameter limit. /// </param> /// <param name='direction'> /// Direction of the diameter limit cut. /// </param> /// <param name='treesToCut'> /// Trees to cut. /// </param> /// <param name='treesToKeep'> /// Trees to keep. /// </param> public static void ComputeTreesToBeCut( int[] frequencyDistribution, int diameterLimit, DiameterLimitCutDirection direction, out int[] treesToCut, out int[] treesToKeep ) { treesToCut = new int[frequencyDistribution.Length]; treesToKeep = new int[frequencyDistribution.Length]; int limit = diameterLimit/ResourceTile.treeSizeClassInterval-1; switch (direction) { case DiameterLimitCutDirection.Greater: // cut all trees greater than limit for (int i=0; i<frequencyDistribution.Length; ++i) { if (i <= limit) { treesToKeep[i] = frequencyDistribution[i]; } else { treesToCut[i] = frequencyDistribution[i]; } } break; case DiameterLimitCutDirection.Less: // cut all trees less than limit for (int i=0; i<frequencyDistribution.Length; ++i) { if (i >= limit) { treesToKeep[i] = frequencyDistribution[i]; } else { treesToCut[i] = frequencyDistribution[i]; } } break; } }
/// <summary> /// Initializes a new instance of the <see cref="Harvest"/> struct for a diameter limit cut. /// </summary> /// <param name='ids'> /// Identifiers. /// </param> /// <param name='duration'> /// Duration. /// </param> /// <param name='diameterLimit'> /// Diameter limit. /// </param> /// <param name='cutDirection'> /// Cut direction. /// </param> public Harvest(int[] ids, int duration, int diameterLimit, DiameterLimitCutDirection cutDirection) { this.ids = ids; this.duration = duration; this.cutType = CutType.DiameterLimitCut; this.diameterLimit = diameterLimit; this.diameterLimitCutDirection = cutDirection; }