public void Draw(SpriteBatch spriteBatch) { // if you're interested in whats going on here, refer to the documentation of the FogOfWar class. spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, null, null, null, null, mTransformMatrix); foreach (var drawable in mDrawables) { drawable.Draw(spriteBatch); } spriteBatch.End(); if (GlobalVariables.FowEnabled) { mFow.DrawMasks(spriteBatch); spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, null, mFow.GetApplyMaskStencilState(), null, null, mTransformMatrix); mMap.GetStructureMap().Draw(spriteBatch); mMap.GetResourceMap().Draw(spriteBatch); foreach (var spatial in mSpatialObjects) { spatial.Draw(spriteBatch); } spriteBatch.End(); mFow.FillInvertedMask(spriteBatch); } else { spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, null, null, null, null, mTransformMatrix); mMap.GetStructureMap().Draw(spriteBatch); mMap.GetResourceMap().Draw(spriteBatch); foreach (var spatial in mSpatialObjects) { spatial.Draw(spriteBatch); } spriteBatch.End(); } spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend, null, null, null, null, mTransformMatrix); mMap.GetStructureMap().DrawAboveFow(spriteBatch); spriteBatch.End(); }