protected override void UnloadData()
        {
            base.UnloadData();

            Static = null;
            m_aabbTree.Clear();
            foreach (var item in m_envItems)
            {
                item.Value.ItemAdded -= item_ItemAdded;
                item.Value.ItemRemoved -= item_ItemRemoved;
            }

            MyEntities.OnEntityAdd -= MyEntities_OnEntityAdd;
            MyEntities.OnEntityRemove -= MyEntities_OnEntityRemove;
        }
        public override void LoadData()
        {
            base.LoadData();

            m_updateCounter = 0;

            m_envItems = new Dictionary<long, MyEnvironmentItems>(10);
            m_forestAreas = new List<Area>(100);
            m_highLevelBoxes = new List<BoundingBoxD>();
            m_tmpItemInfos = new List<ItemInfo>(500);
            m_tmpAreas = new List<Area>();
            m_tmpAreas2 = new List<Area>();
            m_checkedSectors = new HashSet<Vector3I>();
            m_checkQueue = new Queue<long>();
            m_initialForestLocations = new Queue<Vector3D>();
            m_tmpSectors = new List<Vector3I>();

            m_aabbTree = new MyDynamicAABBTreeD(Vector3D.Zero);

            // MW:TODO growing items on allowed materials
            m_allowedMaterials = new HashSet<MyStringHash>();

            m_loadPhase = true;
            m_findValidForestPhase = false;

            MyEntities.OnEntityAdd += MyEntities_OnEntityAdd;
            MyEntities.OnEntityRemove += MyEntities_OnEntityRemove;
            Static = this;
        }