MrGravity.LevelSelect.Draw C# (CSharp) Method

Draw() public method

Draws the menu on the screen
public Draw ( SpriteBatch spriteBatch, GraphicsDeviceManager graphics, Matrix scale ) : void
spriteBatch Microsoft.Xna.Framework.Graphics.SpriteBatch Canvas we are drawing to
graphics GraphicsDeviceManager Information on the device's graphics
scale Matrix
return void
        public void Draw(SpriteBatch spriteBatch, GraphicsDeviceManager graphics, Matrix scale)
        {
            spriteBatch.Begin(SpriteSortMode.Immediate,
                BlendState.AlphaBlend,
                SamplerState.LinearClamp,
                DepthStencilState.None,
                RasterizerState.CullCounterClockwise,
                null,
                scale);

            spriteBatch.Draw(_mBackground, new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height), Color.White);

            var size = new Vector2(_mScreenRect.Width / 4, _mScreenRect.Height / 3);
            var padding = new Vector2(size.X * .25f, size.Y * .25f);

            Vector2 stringLoc = _mQuartz.MeasureString((_mCurrentPage + 1) + "/" + _mPageCount);

            spriteBatch.Draw(_mBack[Convert.ToInt32(_mCurrentIndex == Back)] , new Rectangle(_mScreenRect.Left, _mScreenRect.Top, 70,70), Color.White);
            spriteBatch.Draw(_mPrevious[Convert.ToInt32(_mCurrentIndex == Previous)], new Rectangle(_mScreenRect.Center.X - 85, _mScreenRect.Bottom - 75, 75, 50), Color.White);
            spriteBatch.DrawString(_mQuartz, (_mCurrentPage + 1) + "/" + _mPageCount, new Vector2(_mScreenRect.Center.X + 10,_mScreenRect.Bottom - 60), Color.White);
            spriteBatch.Draw(_mNext[Convert.ToInt32(_mCurrentIndex == Next)], new Rectangle(_mScreenRect.Center.X + 75, _mScreenRect.Bottom - 75, 75, 50), Color.White);

            size.X -= 2*padding.X;
            size.Y -= 2*padding.Y;

            var currentLocation = new Vector2(_mScreenRect.X + 70, _mScreenRect.Top + 70);
            var index = 0;

            for (var i = 0; i < 12 && i + 12 * _mCurrentPage < _mLevels.Count; i++)
            {
                if (currentLocation.X + size.X + (padding.X / 4) >= graphics.GraphicsDevice.Viewport.TitleSafeArea.Width)
                {
                    currentLocation.X = _mScreenRect.X + 70;
                    currentLocation.Y += 1.5f * padding.Y + size.Y;
                }
                currentLocation.X += (padding.X / 4);
                var rect = new Rectangle((int)currentLocation.X, (int)currentLocation.Y, (int)size.X, (int)size.Y);

                spriteBatch.Draw(_mLevels[i + 12 * _mCurrentPage].Thumbnail, rect, Color.White);

                Vector2 stringSize = _mQuartz.MeasureString(_mLevels[i + 12 * _mCurrentPage].Level.Name);
                var stringLocation = new Vector2(rect.Center.X - stringSize.X/2, rect.Top - stringSize.Y);
                spriteBatch.DrawString(_mQuartz, _mLevels[i + 12 * _mCurrentPage].Level.Name, stringLocation, Color.White);
                if (index == _mCurrentIndex - 1) spriteBatch.Draw(_mSelectBox, rect, Color.White);

                if (!_mLevels[i + 12 * _mCurrentPage].Unlocked)
                {
                    //DRAW LOCKED SYMBOL
                    spriteBatch.Draw(_mLocked, new Vector2(rect.Center.X - (_mLocked.Width / 2 * 0.25f), rect.Center.Y - (_mLocked.Height / 2 * 0.25f)),
                        null, Color.White, 0.0f, Vector2.Zero, 0.25f, SpriteEffects.None, 0.0f);
                }
                else
                {
                    var time = _mLevels[i + 12 * _mCurrentPage].TimerStar;
                    var collect = _mLevels[i + 12 * _mCurrentPage].CollectionStar;
                    var death = _mLevels[i + 12 * _mCurrentPage].DeathStar;
                    var starScale = 0.5f;

                    //DUBUG//
                    //time = collect = death = 3;
                    //END DEBUG//

                    //TIME SCORE
                    if (time >= 1)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Left, rect.Bottom - (_mStar.Height * 0.8f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (time >= 2)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Left, rect.Bottom - (_mStar.Height * 0.4f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (time == 3)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Left + (_mStar.Width * 0.4f), rect.Bottom - (_mStar.Height * 0.6f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);

                    //COLLECTABLES SCORE
                    if (collect >= 1)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Center.X - (_mStar.Width * starScale), rect.Bottom - (_mStar.Height * 0.8f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (collect >= 2)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Center.X - (_mStar.Width * starScale), rect.Bottom - (_mStar.Height * 0.4f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (collect == 3)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Center.X - (_mStar.Width * starScale) + (_mStar.Width * 0.4f), rect.Bottom - (_mStar.Height * 0.6f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);

                    //DEATH SCORE
                    if (death >= 1)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Right - (2 * _mStar.Width * starScale), rect.Bottom - (_mStar.Height * 0.8f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (death >= 2)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Right - (2 * _mStar.Width * starScale), rect.Bottom - (_mStar.Height * 0.4f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                    if (death == 3)
                        spriteBatch.Draw(_mStar, new Vector2(rect.Right - (2 * _mStar.Width * starScale) + (_mStar.Width * 0.4f), rect.Bottom - (_mStar.Height * 0.6f)),
                            null, Color.White, 0.0f, Vector2.Zero, starScale, SpriteEffects.None, 0.0f);
                }

                currentLocation.X += size.X + padding.X;
                index++;
            }

            spriteBatch.End();
        }