fCraft.Forester.ProcessTrees C# (CSharp) Method

ProcessTrees() private static method

private static ProcessTrees ( ForesterArgs args, IList treelist ) : void
args ForesterArgs
treelist IList
return void
        private static void ProcessTrees( ForesterArgs args, IList<Tree> treelist )
        {
            TreeShape[] shapeChoices;
            switch ( args.Shape ) {
                case TreeShape.Stickly:
                    shapeChoices = new[]{ TreeShape.Normal,
                                          TreeShape.Bamboo,
                                          TreeShape.Palm };
                    break;

                case TreeShape.Procedural:
                    shapeChoices = new[]{ TreeShape.Round,
                                          TreeShape.Cone };
                    break;

                default:
                    shapeChoices = new[] { args.Shape };
                    break;
            }

            for ( int i = 0; i < treelist.Count; i++ ) {
                TreeShape newshape = shapeChoices[args.Rand.Next( 0, shapeChoices.Length )];
                Tree newTree;
                switch ( newshape ) {
                    case TreeShape.Normal:
                        newTree = new NormalTree();
                        break;

                    case TreeShape.Bamboo:
                        newTree = new BambooTree();
                        break;

                    case TreeShape.Palm:
                        newTree = new PalmTree();
                        break;

                    case TreeShape.Round:
                        newTree = new RoundTree();
                        break;

                    case TreeShape.Cone:
                        newTree = new ConeTree();
                        break;

                    case TreeShape.Rainforest:
                        newTree = new RainforestTree();
                        break;

                    case TreeShape.Mangrove:
                        newTree = new MangroveTree();
                        break;

                    default:
                        throw new ArgumentException( "Unknown tree shape type" );
                }
                newTree.Copy( treelist[i] );

                if ( args.MapHeightLimit ) {
                    int height = newTree.Height;
                    int ybase = newTree.Pos[1];
                    int mapHeight = args.Map.Height;
                    int foliageHeight;
                    if ( args.Shape == TreeShape.Rainforest ) {
                        foliageHeight = 2;
                    } else {
                        foliageHeight = 4;
                    }
                    if ( ybase + height + foliageHeight > mapHeight ) {
                        newTree.Height = mapHeight - ybase - foliageHeight;
                    }
                }

                if ( newTree.Height < 1 )
                    newTree.Height = 1;
                newTree.Prepare();
                treelist[i] = newTree;
            }
        }