public void Draw(SpriteBatch spriteBatch) { const int defaultNumberOfSegments = 7; var scaling = defaultNumberOfSegments / (float)_mode.Segments.Count * Scale; var marksPadding = _markTextureSize.Y * 0.1f; var marksHeight = _markTextureSize.Y + marksPadding; var marksSpacing = marksHeight * scaling + marksPadding; var viewport = new Vector2(XnaDartsGame.Viewport.Width, XnaDartsGame.Viewport.Height); var marksCenter = viewport * new Vector2(0.5f, 0.4f); var marksOffset = marksSpacing * (_mode.Segments.Count - 1) * 0.5f; var panelPadding = marksSpacing; var panelWidth = marksSpacing * 1.1f; var panelSpacing = panelWidth + panelPadding; var panelHeight = marksSpacing * _mode.Segments.Count + marksSpacing * 0.2f; var panelOffset = panelSpacing * (_mode.Players.Count - 1) * 0.5f * Vector2.UnitX; for (var i = 0; i < _mode.Players.Count; i++) { var player = _mode.Players[i]; var panelColor = _mode.GetPlayerColor(player) * 0.33f; var panelPosition = marksCenter - panelOffset + panelSpacing * i * Vector2.UnitX; var rectangle = new Rectangle( (int)(panelPosition.X - panelWidth * 0.5f), (int)(panelPosition.Y - panelHeight * 0.5f), (int)panelWidth, (int)panelHeight ); spriteBatch.Draw(ScreenManager.BlankTexture, rectangle, panelColor); for (var j = 0; j < _mode.Segments.Count; j++) { var segment = _mode.Segments[j]; var markPosition = marksCenter - new Vector2(panelOffset.X, marksOffset) + new Vector2(panelSpacing * i, marksSpacing * j); drawMark(spriteBatch, segment, player, markPosition, scaling); } } for (var i = 0; i < _mode.Segments.Count; i++) { var numberPosition = marksCenter - new Vector2(0, marksOffset) + new Vector2(0, marksSpacing) * i; var segment = _mode.Segments[i]; drawNumber(spriteBatch, segment, numberPosition); } }