public override void UpdateBeforeSimulation()
        {
            if (Enabled)
            {
                ProfilerShort.Begin("Add tracked entities");
                if (m_toAddTrackedEntities.Count != 0)
                {
                    foreach (var pair in m_toAddTrackedEntities)
                    {
                        m_trackedEntities.Add(pair.Key, pair.Value);
                    }
                    m_toAddTrackedEntities.Clear();
                }

                ProfilerShort.BeginNextBlock("Update tracked entities");
                foreach (var tracker in m_trackedEntities.Values)
                {
                    if (tracker.ShouldGenerate())
                    {
                        var oldBoundingVolume = tracker.BoundingVolume;
                        tracker.UpdateLastPosition();

                        foreach (var module in m_modules)
                        {
                            ProfilerShort.Begin("GenerateObjectsInSphere");
                            module.GetObjectSeeds(tracker.BoundingVolume, m_tempObjectSeedList);
                            module.GenerateObjects(m_tempObjectSeedList, m_existingObjectsSeeds);
                            m_tempObjectSeedList.Clear();
                            ProfilerShort.End();

                            module.MarkCellsDirty(oldBoundingVolume, tracker.BoundingVolume);
                        }
                    }
                }

                ProfilerShort.BeginNextBlock("Process dirty cells");
                foreach (var module in m_modules)
                {
                    module.ProcessDirtyCells(m_trackedEntities);
                }
                ProfilerShort.End();
            }

            if (!MySandboxGame.AreClipmapsReady && MySession.Static.VoxelMaps.Instances.Count == 0)
            {
                // Render will not send any message if it has no clipmaps, so we have to specify there is nothing to wait for.
                MySandboxGame.SignalClipmapsReady();
            }
        }
Esempio n. 2
0
        public override void UpdateBeforeSimulation()
        {
            if (m_densityFunctions.Count != 0)
            {
                ProfilerShort.Begin("Add tracked entities");
                if (m_toAddTrackedEntities.Count != 0)
                {
                    foreach (var pair in m_toAddTrackedEntities)
                    {
                        m_trackedEntities.Add(pair.Key, pair.Value);
                    }
                    m_toAddTrackedEntities.Clear();
                }
                ProfilerShort.End();

                foreach (var tracker in m_trackedEntities.Values)
                {
                    if (tracker.ShouldGenerate())
                    {
                        var oldBoundingVolume = tracker.BoundingVolume;
                        tracker.UpdateLastPosition();
                        //if (!(tracker.Entity is MyCubeGrid && ((MyCubeGrid)tracker.Entity).IsTrash()))
                        GenerateObjects(tracker.BoundingVolume);

                        MarkCellsDirty(oldBoundingVolume, tracker.BoundingVolume);
                    }
                }

                ProcessDirtyCells();
            }

            if (!MySandboxGame.AreClipmapsReady && MySession.Static.VoxelMaps.Instances.Count == 0)
            {
                // Render will not send any message if it has no clipmaps, so we have to specify there is nothing to wait for.
                MySandboxGame.SignalClipmapsReady();
            }
        }