public override void UpdateBeforeSimulation()
        {
            if (!Enabled)
            {
                return;
            }

            if (!Sync.IsServer || !SettingsSession.Static.Settings.Enable || MySession.Static.Settings.WorldSizeKm > 0)
            {
                return;
            }

            if (SettingsSession.Static.Settings.GeneratorSettings.AsteroidGenerator == AsteroidGenerator.PLUGIN)
            {
                MySession.Static.Settings.ProceduralDensity = 0;
            }

            planetModule.GeneratePlanets();

            foreach (var entity in m_toTrackedEntities)
            {
                if (m_trackedEntities.ContainsKey(entity.Key))
                {
                    m_trackedEntities[entity.Key] = entity.Value;
                }
                else
                {
                    m_trackedEntities.Add(entity.Key, entity.Value);
                }
            }
            foreach (MyEntityTracker tracker in m_trackedEntities.Values)
            {
                if (tracker.ShouldGenerate())
                {
                    List <MyObjectSeed> cellObjects = new List <MyObjectSeed>();

                    var oldBounding = tracker.BoundingVolume;
                    tracker.UpdateLastPosition();

                    if (asteroidModule == null)
                    {
                        continue;
                    }

                    asteroidModule.GetObjectsInSphere(tracker.BoundingVolume, cellObjects);
                    asteroidModule.GenerateObjects(cellObjects, m_existingObjectSeeds);

                    asteroidModule.MarkToUnloadCells(oldBounding, tracker.BoundingVolume);
                }
            }
            if (asteroidModule == null)
            {
                return;
            }

            asteroidModule.UnloadCells(m_trackedEntities);

            asteroidModule.UpdateObjects();
        }