Game main-loop (the never ending story)

From Ideal Winforms gameloop: Corrections and Additions I have derived my implementation of the game mainloop. The reason I prefer this one is simple: I want ‘pure’ .NET; no PInvoke if not necessary.

 

  public class TesterForm : System.Windows.Forms.Form
{
private enum WindowsMessage
{
Paint = 0x000F
}

private GameEngine _gameEngine;

public void Initialize(GameEngine gameEngine)
{
#if WINDOWED
this.Size = new Size(640,480);
#else
this.FormBorderStyle = FormBorderStyle.None;
this.Size = Screen.PrimaryScreen.Bounds.Size;
#endif
this.StartPosition = FormStartPosition.CenterScreen;
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
_gameEngine = gameEngine;
_gameEngine.Initialize(this);
}

private void Frame()
{
if(_gameEngine != null)
{
_gameEngine.ReadInput();
_gameEngine.ProcessGamelogic();
_gameEngine.Render();
}
}

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case (int)WindowsMessage.Paint:
{
Frame();
break;
}
default:
{
base.WndProc(ref m);
break;
}
}
}
}

}


As you can see there is no Main in this class. It is my GameEngine class (or a sub class of the GameEngine class) that contains the Main and thus is the entrypoint of the application. The GameEngine class passes an instance of itself to the Form. I think that this is a better design.

I’ll post my GameEngine class in the near-future.