public void Draw(GameTime gameTime)
{
batch.GraphicsDevice.Clear(Color.Black);
while (!viewQueue.IsEmpty)
{
Tuple<IView, QueueState> cont;
if (viewQueue.TryDequeue(out cont))
{
if (cont.Item2 == QueueState.Add)
{
if (!views.Contains(cont.Item1))
{
views.Add(cont.Item1);
views = views.OrderBy(a => a.Layer).ToList();
}
}
else
{
views.Remove(cont.Item1);
if (cont.Item2 == QueueState.Dispose)
{
cont.Item1.Dispose();
}
}
}
}
if (views.Count() != 0)
{
bool staticPosLast = false;
int viewsCount = views.Count();
for (var i = 0; i < viewsCount; i++)
{
if (i != 0 && staticPosLast != views[i].StaticPosition)
{
batch.End();
}
if (i == 0 || staticPosLast != views[i].StaticPosition)
{
if (views[i].StaticPosition)
batch.Begin();
else
batch.Begin(0, null, null, null, null, null, camera.View);
}
views[i].Draw(batch, gameTime);
staticPosLast = views[i].StaticPosition;
}
batch.End();
}
if (Constants.DebugMode)
{
Matrix projection = camera.SimProjection;
Matrix matrixView = camera.SimView;
debugView.RenderDebugData(ref projection, ref matrixView);
}
}