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(); } }
public override void DumpCollisionInfo() { ContactDebug.OnDataReady += new Debugging.ContactDebugManager.DataCallback(ContactDebug_OnDataReady); ContactDebug.BeginCollectingContactData(); }