Ejemplo n.º 1
0
        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);
            }
        }