Пример #1
0
        private void Heartbeat()
        {
            uint lastSimulateFrame = 0;

            while (!_stop)
            {
                uint startingFrame = (uint)Environment.TickCount;

                bool processedCommandsThisIteration = ProcessQueueCommands();
                uint uframe = (uint)_frameNum;

                if (_simulating && (uframe > lastSimulateFrame))
                {
                    uint tickCount = (uint)Environment.TickCount;
                    uint ticksSinceLastSimulate = Math.Max(tickCount - _lastSimulate, TIMESTEP);

                    _lastSimulate     = (uint)Environment.TickCount;
                    lastSimulateFrame = uframe;

                    if (ticksSinceLastSimulate >= SIMULATE_DELAY_TO_BEGIN_DILATION)
                    {
                        Simulate(DILATED_TIMESTEP_IN_SECONDS, ticksSinceLastSimulate, uframe, true);
                        //m_log.DebugFormat("[PHYSICS]: Dilated simulate {0}", ticksSinceLastSimulate);
                    }
                    else
                    {
                        Simulate(ticksSinceLastSimulate * 0.001f, ticksSinceLastSimulate, uframe, false);
                    }

                    ++_framesSinceLastFpsCalc;
                    if (uframe % UPDATE_WATCHDOG_FRAMES == 0)
                    {
                        Watchdog.UpdateThread();
                    }
                    if (uframe % CHECK_EXPIRED_KINEMATIC_FRAMES == 0)
                    {
                        this.CheckForExpiredKinematics();
                    }
                    if (uframe % UPDATE_FPS_FRAMES == 0)
                    {
                        this.UpdateFpsCalc();
                        //CheckForPhysicsLongFramesAndDebug();
                    }
                }

                _frameTimeAvg.AddValue((uint)Environment.TickCount - startingFrame);
                ContactDebug.OnFramePassed();

                if (_currentCommandQueue.Count == 0)
                {
                    _timingSignal.Wait();
                }

                _timingSignal.Reset();
            }
        }
Пример #2
0
 public override void DumpCollisionInfo()
 {
     ContactDebug.OnDataReady += new Debugging.ContactDebugManager.DataCallback(ContactDebug_OnDataReady);
     ContactDebug.BeginCollectingContactData();
 }