public static void Generate([NotNull] ForesterArgs args)
{
if (args == null)
{
throw new ArgumentNullException("args");
}
args.Validate();
List <Tree> treeList = new List <Tree>();
if (args.Operation == ForesterOperation.Conserve)
{
FindTrees(args, treeList);
}
if (args.TreeCount > 0 && treeList.Count > args.TreeCount)
{
treeList = treeList.Take(args.TreeCount).ToList();
}
if (args.Operation == ForesterOperation.Replant || args.Operation == ForesterOperation.Add)
{
switch (args.Shape)
{
case TreeShape.Rainforest:
PlantRainForestTrees(args, treeList);
break;
case TreeShape.Mangrove:
PlantMangroves(args, treeList);
break;
default:
PlantTrees(args, treeList);
break;
}
}
if (args.Operation == ForesterOperation.ClearCut)
{
return;
}
ProcessTrees(args, treeList);
if (args.Foliage)
{
foreach (Tree tree in treeList)
{
tree.MakeFoliage();
}
}
if (args.Wood)
{
foreach (Tree tree in treeList)
{
tree.MakeTrunk();
}
}
}