Dwarrowdelf.Server.EnvTreeHandler.OnTick C# (CSharp) Method

OnTick() private method

private OnTick ( ) : void
return void
        void OnTick()
        {
            // go through all tiles in one year
            int amount = m_env.Width * m_env.Height / World.YEAR_LENGTH;

            var woodMaterials = Materials.GetMaterials(MaterialCategory.Wood).ToArray();
            var grassMaterials = Materials.GetMaterials(MaterialCategory.Grass).ToArray();
            var r = m_env.World.Random;

            for (int i = 0; i < amount; ++i)
            {
                var idx = m_currentIdx++;

                if (m_currentIdx == m_env.Width * m_env.Height)
                    m_currentIdx = 0;

                var p = m_env.GetRandomSurfaceLocation(idx);

                var td = m_env.GetTileData(p);

                if (td.ID == TileID.Sapling)
                {
                    if (r.Next(100) < 80)
                    {
                        // any object prevents sapling from growing to tree
                        if (m_env.HasContents(p) == false)
                        {
                            // A sapling grows to a tree
                            td.ID = TileID.Tree;
                            m_env.SetTileData(p, td);
                        }
                    }
                }
                else if (td.ID == TileID.Tree)
                {
                    if (r.Next(100) < 20)
                    {
                        // A tree dies
                        td.ID = TileID.DeadTree;
                        m_env.SetTileData(p, td);
                    }
                }
                else if (td.ID == TileID.DeadTree)
                {
                    if (r.Next(100) < 60)
                    {
                        // A dead tree disappears
                        td.ID = TileID.Grass;
                        td.MaterialID = grassMaterials[r.Next(grassMaterials.Length)].ID;
                        m_env.SetTileData(p, td);
                    }
                }
                else if (m_numTrees < m_targetNumTrees && td.WaterLevel == 0 && td.IsClearFloor)
                {
                    if (r.Next(100) < 60)
                    {
                        // A new sapling is planted
                        td.ID = TileID.Sapling;
                        td.MaterialID = woodMaterials[r.Next(woodMaterials.Length)].ID;
                        m_env.SetTileData(p, td);
                    }
                }
            }
        }