/// <summary> /// Draw the level tiles /// </summary> /// <param name="level"></param> public void DrawLevel(Level level, Player player) { // Calculate a new camera scale to fit the level to as much as possible of the screen // using the viewport height and level height as reference float newCameraScaleX = ((float)m_graphicsDevice.Viewport.Width) / ((float)(((float)level.Width + 1) * m_tileWidth * m_camera.Scale.X)); float newCameraScaleY = ((float)m_graphicsDevice.Viewport.Height) / ((float)(((float)level.Height + 1) * m_tileHeight * m_camera.Scale.Y)); float smallestScale = newCameraScaleX < newCameraScaleY ? newCameraScaleX : newCameraScaleY; smallestScale = smallestScale > 1 ? 1 : smallestScale; m_camera.SetScale(smallestScale, smallestScale); // Translate camera to center on the level float cameraX = (m_graphicsDevice.Viewport.Width / 2) - ((level.Width * m_tileWidth * m_camera.Scale.X) / 2); float cameraY = (m_graphicsDevice.Viewport.Height / 2) - ((level.Height * m_tileHeight * m_camera.Scale.Y) / 2); m_camera.Translate(cameraX, cameraY); // Bind sprite batcher m_spriteBatch.Begin( ); // Draw statical tiles List<Tile> staticTiles = level.StaticTiles; foreach (Tile tile in staticTiles) { DrawTile(level, tile); } // Draw moveable tiles List<Tile> moveableTiles = level.MoveableTiles; foreach (Tile tile in moveableTiles) { DrawTile(level, tile); } // Draw player tile DrawPlayer(level, player); // Unbind the sprite batcher m_spriteBatch.End( ); // Reset camera scale m_camera.SetScale(1, 1); }
public GameModel(Level level, IEventListener listener) { // Load our dummy level we use for debugging. m_level = level; // Create player object from player tile m_player = new Player(m_level.PlayerTile); // Set current time as start time m_startTime = DateTime.Now; // Save event listener m_listener = listener; }