Game Loop and physics your opinions.

koirat

06-10-2009 15:56:14

This is my main loop. Can you comment it.
I'm asking since my game is slowing down instead of making itself more step when increasing load (more elements, computations etc.).
And it looks like physics is slowing down.


public void StartRenderLoop()
{

Root.FrameStarted += new FrameListener.FrameStartedHandler(Root_FrameStarted);
Root.FrameEnded += new FrameListener.FrameEndedHandler(Root_FrameEnded);

Mogre.Timer timer = new Timer();
timer.Reset();
while(true)
{
if (TerminateApplication == true)
break;
float offset = timer.Microseconds / 1000.0f;
timer.Reset();
DoInput(offset);
DoPhysics(offset);
DoRendering();
System.Windows.Forms.Application.DoEvents();
}
Root.Dispose();
}


void DoInput(float offset)
{
if (RenderWindow.IsClosed == true)
TerminateApplication = true;

UpdateInputListeners(offset);
}

void DoPhysics(float offset)
{
physicsElapsed += offset;

if ((physicsElapsed > physicsUpdate) && (physicsElapsed < (1.0f)))
{
while (physicsElapsed > physicsUpdate)
{
physicsElapsed -= physicsUpdate;
UpdatePhysicsListeners(physicsUpdate);
}
}
else
{
if (physicsElapsed < physicsUpdate)
{
// not enough time has passed this loop, so ignore for now.
}
else
{
UpdatePhysicsListeners(physicsUpdate);
physicsElapsed = 0.0f; // reset the elapsed time so we don't become "eternally behind".
}
}
}

void DoRendering()
{
Root.RenderOneFrame();
}


bool Root_FrameStarted(FrameEvent evt)
{
UpdateGraphicsListeners(evt.timeSinceLastEvent);
return true;
}

bool Root_FrameEnded(FrameEvent evt)
{
return true;
}