예제 #1
0
        public void Draw(SpriteBatch batch)
        {
            if (Visible)
            {
                var unitsHeight = 2 + _options.Length * 2;

                var width  = (int)(WIDTH * UNIT * SCALE);
                var height = (int)(unitsHeight * UNIT * SCALE);
                var unit   = (int)(UNIT * SCALE);
                var startX = Controller.ClientRectangle.Width - width;
                var startY = 0;

                Border.Draw(batch, startX, startY, WIDTH, unitsHeight, SCALE);

                var screenManager = GetComponent <ScreenManager>();
                var selectorChar  = screenManager.ActiveScreen == _parentScreen ? ">" : "^>>";

                var text = string.Join(Environment.NewLine,
                                       _options.Select((t, i) => (i == _index ? selectorChar : " ") + t.Replace("PLAYER", Controller.ActivePlayer.Name)));

                _fontRenderer.DrawText(batch, text, new Vector2(startX + unit, startY + unit * 2), Color.Black, SCALE);

                // draw explanations
                if (Controller.GameOptions.MenuExplanations)
                {
                    Border.DrawCenter(batch, startX, startY + height, WIDTH, 5, SCALE);

                    var descText = DESCRIPTION_TEXTS[_options[_index]];

                    _fontRenderer.DrawText(batch, descText, new Vector2(startX, startY + height + unit), Color.Black, SCALE);
                }
            }
        }
예제 #2
0
        internal override void Draw(GameTime gameTime)
        {
            _batch.Begin(samplerState: SamplerState.PointClamp);

            var backgroundColor = (int)(Border.DefaultWhite.R * _brightness);

            _batch.DrawRectangle(Controller.ClientRectangle, new Color(backgroundColor, backgroundColor, backgroundColor));

            _textbox.Draw(_batch, Border.DefaultWhite);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();
            var startY = Controller.ClientRectangle.Height / 2 - Border.SCREEN_HEIGHT * unit / 2;

            if (_oakStage >= 0 && _oakStage < OAK_TOTAL_STAGES)
            {
                var oakWidth  = (int)(40 * Border.SCALE);
                var oakHeight = (int)(56 * Border.SCALE);
                _batch.Draw(_oak, new Rectangle(Controller.ClientRectangle.Width / 2 - oakWidth / 2, startY + unit * 4, oakWidth, oakHeight),
                            new Rectangle(_oakStage * 40, 0, 40, 56), Color.White);
            }
            if (_playerStage >= 0 && _playerStage < PLAYER_TOTAL_STAGES)
            {
                var playerWidth  = (int)(40 * Border.SCALE);
                var playerHeight = (int)(56 * Border.SCALE);
                _batch.Draw(_player,
                            new Rectangle(Controller.ClientRectangle.Width / 2 - playerWidth / 2 + (int)(_playerOffset * Border.SCALE), startY + unit * 4, playerWidth, playerHeight),
                            new Rectangle(_playerStage * 40, 0, 40, 56), Color.White);
            }
            if (_pokemonVisible && _pokemonAppearDelay == 0)
            {
                var texture       = _previewPokemon.GetFrontSprite();
                var pokemonWidth  = (int)(texture.Width * Border.SCALE);
                var pokemonHeight = (int)(texture.Height * Border.SCALE);

                var alpha = (int)(255 * _pokemonAlpha);
                _batch.Draw(texture,
                            new Rectangle(Controller.ClientRectangle.Width / 2 - pokemonWidth / 2, startY + unit * 4, pokemonWidth, pokemonHeight),
                            null, new Color(255, 255, 255, alpha), 0f, Vector2.Zero, SpriteEffects.FlipHorizontally, 0f);
            }

            _nameSelection.Draw(_batch, Border.DefaultWhite);
            if (_nameSelection.Visible)
            {
                Border.DrawCenter(_batch, _nameSelection.OffsetX + unit * 2, startY, 4, 1, Border.SCALE);
                _fontRenderer.DrawText(_batch, "NAME", new Vector2(_nameSelection.OffsetX + unit * 2, startY), Color.Black, Border.SCALE);
            }

            _batch.End();
        }
예제 #3
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();

            // background
            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, Border.SCREEN_HEIGHT, Border.SCALE);

            var entry = Controller.ActivePlayer.HallOfFame[_index];

            // upper box
            Border.Draw(_batch, startX, 0, Border.SCREEN_WIDTH, 5, Border.SCALE);
            _fontRenderer.DrawText(_batch, entry.number.ToString().PadLeft(3) + "-Time Famer",
                                   new Vector2(startX + unit * 2, unit * 2), Color.Black, Border.SCALE);

            // pokemon sprite
            var sprite = _pokemon.GetFrontSprite();

            _batch.Draw(sprite, new Rectangle(
                            startX + unit * 6, unit * 5,
                            (int)(Border.SCALE * sprite.Width),
                            (int)(Border.SCALE * sprite.Height)), Color.White);

            // lower box
            Border.Draw(_batch, startX, unit * 12, Border.SCREEN_WIDTH, 6, Border.SCALE);
            var levelStr = ("^:L" + _pokemon.Level).PadRight(8);

            if (_pokemon.Level == Pokemon.MAX_LEVEL)
            {
                levelStr = _pokemon.Level.ToString().PadRight(6);
            }
            _fontRenderer.DrawText(_batch,
                                   $"^No.{_pokemon.Id.ToString("D3")} {_pokemon.DisplayName.PadRight(Pokemon.MAX_NAME_LENGTH)} {PokemonStatHelper.GetGenderChar(_pokemon.Gender)}\n" +
                                   new string(' ', 7) + "/" + _pokemon.Name + "\n\n" +
                                   levelStr + "^ID^No/" + entry.trainerId.ToString("D5"),
                                   new Vector2(startX + unit, unit * 13), Color.Black, Border.SCALE);

            _batch.End();
        }
예제 #4
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();

            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, Border.SCREEN_HEIGHT, Border.SCALE);

            // draw border
            // vertical
            for (var i = 0; i < Border.SCREEN_HEIGHT; i++)
            {
                _batch.Draw(_border, new Rectangle(startX, unit * i, unit, unit), Color.White);
                _batch.Draw(_border, new Rectangle(startX + unit * 19, unit * i, unit, unit), Color.White);
            }

            var verticalOffset = (5 - ActiveCharset.Length / CHARS_PER_LINE) * 2;
            // horizontal
            var horizontalBars = new[] { 0, 5 + verticalOffset, 15, 17 };

            for (var i = 1; i < Border.SCREEN_WIDTH - 1; i++)
            {
                foreach (var y in horizontalBars)
                {
                    _batch.Draw(_border, new Rectangle(startX + i * unit, unit * y, unit, unit), Color.White);
                }
            }

            // title
            _fontRenderer.DrawText(_batch, _title,
                                   new Vector2(startX + unit * 5, unit * 2), Color.Black, Border.SCALE);

            // icon
            if (_icon != null)
            {
                _batch.Draw(_icon, new Rectangle(
                                startX + 2 * unit, (int)(unit * 1.5),
                                (int)(Border.SCALE * _iconFrameSize),
                                (int)(Border.SCALE * _iconFrameSize)),
                            new Rectangle(_iconFrame * _iconFrameSize, 0, _iconFrameSize, _iconFrameSize),
                            Color.White);
            }

            // name
            _fontRenderer.DrawText(_batch, _name,
                                   new Vector2(startX + unit * 5, unit * (4 + verticalOffset)), Color.Black, Border.SCALE);
            var nameLength = PokemonFontRenderer.PrintableCharAmount(_name);

            for (var i = nameLength; i < _maxLength; i++)
            {
                var textureOffset = i > nameLength ? 1 : 0;
                _batch.Draw(_placeholders,
                            new Rectangle(
                                startX + unit * 5 + unit * i, unit * (4 + verticalOffset),
                                (int)(_placeholders.Height * Border.SCALE),
                                (int)(_placeholders.Height * Border.SCALE)),
                            new Rectangle(textureOffset * 8, 0, 8, 8), Color.White);
            }

            // char list
            var charListText = "";

            for (var i = 0; i < ActiveCharset.Length; i++)
            {
                charListText += ActiveCharset[i];
                if ((i + 1) % CHARS_PER_LINE == 0)
                {
                    charListText += NewLine;
                }
                else
                {
                    charListText += " ";
                }
            }
            _fontRenderer.DrawText(_batch, charListText,
                                   new Vector2(startX + unit * 2, unit * (6 + verticalOffset)), Color.Black, Border.SCALE);

            // menu
            var menuText = "";

            if (_isLower)
            {
                menuText += "UPPER";
            }
            else
            {
                menuText += "lower";
            }
            menuText += "  DEL   END";
            _fontRenderer.DrawText(_batch, menuText,
                                   new Vector2(startX + unit * 2, unit * 16), Color.Black, Border.SCALE);

            // selector
            if (_selectorVisible)
            {
                if (_menuActive)
                {
                    _batch.Draw(_selectorMenu, new Rectangle(
                                    startX + unit * 2 + unit * _menuIndex * 6,
                                    (int)(unit * 16 - Border.SCALE),
                                    (int)(_selectorMenu.Width * Border.SCALE),
                                    (int)(_selectorMenu.Height * Border.SCALE)), Color.White);
                }
                else
                {
                    _batch.Draw(_selector, new Rectangle(
                                    (int)(startX + unit * _charX * 2 + unit * 2 - Border.SCALE),
                                    (int)(unit * _charY * 2 + unit * (6 + verticalOffset) - Border.SCALE),
                                    (int)(_selector.Width * Border.SCALE),
                                    (int)(_selector.Height * Border.SCALE)), Color.White);
                }
            }

            _batch.End();
        }
예제 #5
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var unit   = (int)(Border.SCALE * Border.UNIT);
            var width  = Border.SCREEN_WIDTH * unit;
            var startX = (int)(Controller.ClientRectangle.Width / 2f - width / 2f);

            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, 8, Border.SCALE);

            // pokemon portrait
            _batch.Draw(_pokemon.GetFrontSprite(),
                        new Rectangle(
                            startX, 0,
                            (int)(56 * Border.SCALE),
                            (int)(56 * Border.SCALE)),
                        null, Color.White, 0f, Vector2.Zero, SpriteEffects.FlipHorizontally, 0f);

            // basic info
            var lvText = "";

            if (_pokemon.Level == Pokemon.MAX_LEVEL)
            {
                lvText = Pokemon.MAX_LEVEL.ToString().PadRight(4);
            }
            else
            {
                lvText = "^:L" + _pokemon.Level.ToString().PadRight(3);
            }

            _fontRenderer.LineGap = 1;
            _fontRenderer.DrawText(_batch,
                                   "^NO." + _pokemon.Id.ToString("D3") +
                                   " " + lvText +
                                   PokemonStatHelper.GetGenderChar(_pokemon.Gender) + Environment.NewLine +
                                   _pokemon.DisplayName + Environment.NewLine +
                                   " /" + _pokemon.Name,
                                   new Vector2(startX + unit * 8, 0), Color.Black, Border.SCALE);

            // page selector
            _fontRenderer.DrawText(_batch,
                                   "<      >",
                                   new Vector2(startX + unit * 12, unit * 6), Color.Black, Border.SCALE);
            for (var i = 0; i < PAGE_COUNT; i++)
            {
                _batch.Draw(_pages, new Rectangle(startX + unit * 13 + i * 2 * unit, unit * 5, unit * 2, unit * 2),
                            new Rectangle(i * 16, i == _pageIndex ? 16 : 0, 16, 16), Color.White);
            }

            // separator line
            _batch.DrawRectangle(new Rectangle(startX, (int)(unit * 8 - Border.SCALE * 2), width, (int)(Border.SCALE)), Color.Black);

            // background bottom
            _batch.DrawRectangle(new Rectangle(startX, unit * 8, width, unit * 10), PAGE_COLORS[_pageIndex]);

            // draw page content
            switch (_pageIndex)
            {
            case 0:
                // page 1
            {
                // hp bar
                _hpbar.Draw(_batch, new Vector2(startX, unit * 9), _pokemon.HP, _pokemon.MaxHP, Border.SCALE);
                _fontRenderer.DrawText(_batch,
                                       _pokemon.HP.ToString().PadLeft(3) + "/" + _pokemon.MaxHP.ToString().PadLeft(3),
                                       new Vector2(startX + unit, unit * 10), Color.Black, Border.SCALE);

                // status and type
                var statusText =
                    "STATUS/" + Environment.NewLine +
                    _pokemon.Status.ToString().ToUpper().PadLeft(8) + Environment.NewLine +
                    "TYPE/" + Environment.NewLine +
                    " " + _pokemon.Type1.ToString().ToUpper();
                if (_pokemon.Type2 != PokemonType.None)
                {
                    statusText += Environment.NewLine + " " + _pokemon.Type2.ToString().ToUpper();
                }

                _fontRenderer.LineGap = 0;
                _fontRenderer.DrawText(_batch, statusText,
                                       new Vector2(startX, unit * 12), Color.Black, Border.SCALE);

                // divider line
                _batch.DrawRectangle(new Rectangle(
                                         startX + unit * 9,
                                         unit * 8,
                                         (int)(Border.SCALE * 2),
                                         unit * 10),
                                     Color.Black);

                // exp and level
                var toLvText = "";
                if (_pokemon.Level == Pokemon.MAX_LEVEL)
                {
                    toLvText = ("TO " + Pokemon.MAX_LEVEL.ToString()).PadLeft(10);
                }
                else
                {
                    // two extra chars for ^:
                    var toLv = _pokemon.Level + 1;
                    toLvText = ("TO ^:L" + toLv.ToString()).PadLeft(12);
                }

                _fontRenderer.DrawText(_batch,
                                       "EXP POINTS" + Environment.NewLine +
                                       _pokemon.Experience.ToString().PadLeft(10) + Environment.NewLine + Environment.NewLine +
                                       "LEVEL UP" + Environment.NewLine +
                                       _pokemon.NeededExperience.ToString().PadLeft(10) + Environment.NewLine +
                                       toLvText,
                                       new Vector2(startX + unit * 10, unit * 9), Color.Black, Border.SCALE);

                // exp bar
                _batch.Draw(_expBar, new Rectangle(
                                startX + unit * 10, unit * 16,
                                (int)(_expBar.Width * Border.SCALE),
                                (int)(_expBar.Height * Border.SCALE)),
                            Color.White);
                if (_pokemon.Level < Pokemon.MAX_LEVEL)
                {
                    var expCurrentLv = PokemonStatHelper.GetExperienceForLevel(_pokemon.ExperienceType, _pokemon.Level);
                    var expProgress  = (double)(_pokemon.Experience - expCurrentLv) /
                                       (PokemonStatHelper.GetExperienceForLevel(_pokemon.ExperienceType, _pokemon.Level + 1) - expCurrentLv);
                    var barWidth = (int)(Math.Ceiling(64 * Border.SCALE * expProgress));
                    _batch.DrawRectangle(new Rectangle(
                                             (int)(startX + unit * 11 + 64 * Border.SCALE - barWidth),
                                             (int)(unit * 16 + Border.SCALE * 3),
                                             barWidth,
                                             (int)(Border.SCALE * 2)), EXPBAR_COLOR);
                }
            }
            break;

            case 1:
                // page 2
            {
                var itemText = "";
                if (_pokemon.HeldItem == null)
                {
                    itemText = "---";
                }
                else
                {
                    itemText = _pokemon.HeldItem.Name;
                }

                var moveListText = "";
                for (var i = 0; i < Pokemon.MAX_MOVES; i++)
                {
                    if (i == 0)
                    {
                        moveListText += "MOVE    ";
                    }
                    else
                    {
                        moveListText += "        ";
                    }

                    if (_pokemon.Moves.Length > i)
                    {
                        var move = _pokemon.Moves[i];
                        moveListText += move.name + Environment.NewLine +
                                        new string(' ', 12) + "^PP^PP " + move.pp.ToString().PadLeft(2) + "/" + move.maxPP.ToString().PadLeft(2);
                    }
                    else
                    {
                        moveListText += "-" + Environment.NewLine +
                                        new string(' ', 12) + "--";
                    }
                    moveListText += Environment.NewLine;
                }

                _fontRenderer.LineGap = 0;
                _fontRenderer.DrawText(_batch,
                                       "ITEM  " + itemText + Environment.NewLine + Environment.NewLine +
                                       moveListText,
                                       new Vector2(startX, unit * 8), Color.Black, Border.SCALE);
            }
            break;

            case 2:
                // page 3
            {
                // ot/trainer id
                var trainerText = "^ID^NO." + Environment.NewLine +
                                  "  " + _pokemon.TrainerID.ToString("D5") + Environment.NewLine + Environment.NewLine +
                                  "OT/" + Environment.NewLine +
                                  "  " + _pokemon.OT;

                _fontRenderer.LineGap = 0;
                _fontRenderer.DrawText(_batch, trainerText,
                                       new Vector2(startX, unit * 9), Color.Black, Border.SCALE);

                // divider line
                _batch.DrawRectangle(new Rectangle(
                                         startX + unit * 10,
                                         unit * 8,
                                         (int)(Border.SCALE * 2),
                                         unit * 10),
                                     Color.Black);

                var statText = "ATTACK" + Environment.NewLine +
                               _pokemon.Attack.ToString().PadLeft(9) + Environment.NewLine +
                               "DEFENSE" + Environment.NewLine +
                               _pokemon.Defense.ToString().PadLeft(9) + Environment.NewLine +
                               "SPCL.ATK" + Environment.NewLine +
                               _pokemon.SpecialAttack.ToString().PadLeft(9) + Environment.NewLine +
                               "SPCL.DEF" + Environment.NewLine +
                               _pokemon.SpecialDefense.ToString().PadLeft(9) + Environment.NewLine +
                               "SPEED" + Environment.NewLine +
                               _pokemon.Speed.ToString().PadLeft(9) + Environment.NewLine;

                _fontRenderer.DrawText(_batch, statText,
                                       new Vector2(startX + unit * 11, unit * 8), Color.Black, Border.SCALE);
            }
            break;
            }

            _batch.End();
        }
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();

            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, Border.SCREEN_HEIGHT, Border.SCALE);
            Border.Draw(_batch, startX, 0, Border.SCREEN_WIDTH, 4, Border.SCALE);
            Border.Draw(_batch, startX, unit * 4, 11, 10, Border.SCALE);
            Border.Draw(_batch, startX + unit * 11, unit * 7, 9, 7, Border.SCALE);
            Border.Draw(_batch, startX, unit * 14, Border.SCREEN_WIDTH, 4, Border.SCALE);

            // title
            var currentBox = Controller.ActivePlayer.Boxes[Controller.ActivePlayer.ActiveBoxIndex];

            _fontRenderer.DrawText(_batch, "CURRENT   " + currentBox.Name,
                                   new Vector2(startX + unit, unit * 2), Color.Black, Border.SCALE);

            // box list
            var visibleBoxes = Controller.ActivePlayer.Boxes
                               .Skip(_scrollIndex)
                               .Take(VISIBLE_BOXES)
                               .Select(b => b.Name).ToList();

            if (visibleBoxes.Count < VISIBLE_BOXES)
            {
                visibleBoxes.Add("CANCEL");
            }
            var boxListText = string.Join(NewLine, visibleBoxes.Select((b, i) =>
            {
                if (i == _index)
                {
                    if (_optionsBox.Visible)
                    {
                        return("^>>" + b);
                    }
                    else
                    {
                        return(">" + b);
                    }
                }
                else
                {
                    return(" " + b);
                }
            }));

            _fontRenderer.DrawText(_batch, boxListText,
                                   new Vector2(startX + unit, unit * 6), Color.Black, Border.SCALE);

            // box text
            if (StorageBox.BOX_COUNT > _index + _scrollIndex)
            {
                var selectedBox = Controller.ActivePlayer.Boxes[_index + _scrollIndex];
                var boxText     = "POKéMON" + NewLine +
                                  selectedBox.PokemonCount.ToString().PadLeft(3) + "/" + StorageBox.POKEMON_PER_BOX.ToString();
                _fontRenderer.DrawText(_batch, boxText,
                                       new Vector2(startX + unit * 12, unit * 9), Color.Black, Border.SCALE);
            }

            // message
            var message = "Choose a BOX.";

            if (_optionsBox.Visible)
            {
                message = "What^'s up?";
            }
            _fontRenderer.DrawText(_batch, message,
                                   new Vector2(startX + unit, unit * 16), Color.Black, Border.SCALE);

            _optionsBox.Draw(_batch, Border.DefaultWhite);

            _batch.End();
        }
예제 #7
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var unit   = (int)(Border.SCALE * Border.UNIT);
            var width  = Border.SCREEN_WIDTH * unit;
            var height = 10 * unit;
            var startX = (int)(Controller.ClientRectangle.Width / 2f - width / 2f);

            // ui
            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, 1, Border.SCALE);

            Border.Draw(_batch, startX, unit, Border.SCREEN_WIDTH, 11, Border.SCALE);

            var levelStrWidth = Pokemon.Level == Pokemon.MAX_LEVEL ? 3 : 4;

            Border.DrawCenter(_batch, startX + unit * 2, unit,
                              levelStrWidth + Pokemon.DisplayName.Length + Pokemon.Level.ToString().Length,
                              1, Border.SCALE);

            Border.Draw(_batch, startX, height + unit, Border.SCREEN_WIDTH, 7, Border.SCALE);

            // TODO: replace with correct border texture
            _batch.Draw(_overlay, new Rectangle(
                            startX, height,
                            (int)(_overlay.Width * Border.SCALE),
                            (int)(_overlay.Height * Border.SCALE)
                            ), Border.DefaultWhite);

            // switch arrows
            if (_partyIndex > 0)
            {
                _fontRenderer.DrawText(_batch, "<",
                                       new Vector2(startX + unit * 16, 0), Color.Black, Border.SCALE);
            }
            if (_partyIndex < Controller.ActivePlayer.PartyPokemon.Length - 1)
            {
                _fontRenderer.DrawText(_batch, ">",
                                       new Vector2(startX + unit * 18, 0), Color.Black, Border.SCALE);
            }

            // pokemon sprite/name/level
            _batch.Draw(Pokemon.GetMenuSprite(), new Rectangle(
                            (int)(startX + unit * 2.5),
                            (int)(unit * 0.5),
                            (int)(16 * Border.SCALE),
                            (int)(16 * Border.SCALE)),
                        new Rectangle(_animationIndex * 16, 0, 16, 16), Color.White);

            var lvStr = Pokemon.Level.ToString();

            if (Pokemon.Level < Pokemon.MAX_LEVEL)
            {
                lvStr = "^:L" + lvStr;
            }
            _fontRenderer.DrawText(_batch, Pokemon.DisplayName + lvStr,
                                   new Vector2(startX + unit * 5, unit), Color.Black, Border.SCALE);

            // move list
            var moveListText = "";

            for (var i = 0; i < Pokemon.MAX_MOVES; i++)
            {
                if (i < Pokemon.Moves.Length)
                {
                    // selection arrow
                    if (_moveIndex == i)
                    {
                        moveListText += ">";
                    }
                    else if (_isOrdering && i == _orderMoveIndex)
                    {
                        moveListText += "^>>";
                    }
                    else
                    {
                        moveListText += " ";
                    }

                    var move = Pokemon.Moves[i];
                    moveListText += move.name + Environment.NewLine +
                                    new string(' ', 9) +
                                    $"^PP^PP {move.pp.ToString().PadLeft(2)}/{move.maxPP.ToString().PadLeft(2)}" +
                                    Environment.NewLine;
                }
                else
                {
                    moveListText += " -" + Environment.NewLine +
                                    new string(' ', 9) + "--" + Environment.NewLine;
                }
            }

            _fontRenderer.LineGap = 0;
            _fontRenderer.DrawText(_batch, moveListText,
                                   new Vector2(startX + unit, unit * 3), Color.Black, Border.SCALE);

            // move info
            if (_isOrdering)
            {
                _fontRenderer.DrawText(_batch, "Where?",
                                       new Vector2(startX + unit, height + unit * 2), Color.Black, Border.SCALE);
            }
            else
            {
                var selectedMove = Pokemon.Moves[_moveIndex].GetMove();
                var attk         = selectedMove.Attack == -1 ? "---" : selectedMove.Attack.ToString().PadLeft(3);
                _fontRenderer.DrawText(_batch,
                                       "TYPE/" + Environment.NewLine + " " +
                                       selectedMove.Type.ToString().ToUpper().PadRight(9) +
                                       "ATTK/" + attk,
                                       new Vector2(startX + unit, height + unit), Color.Black, Border.SCALE);

                _fontRenderer.LineGap = 1;
                _fontRenderer.DrawText(_batch, selectedMove.Description,
                                       new Vector2(startX + unit, height + unit * 4), Color.Black, Border.SCALE);
            }

            _batch.End();
        }
예제 #8
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();

            // fill background
            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, Border.SCREEN_HEIGHT, Border.SCALE);

            // pokemon list box
            Border.Draw(_batch, startX + unit * 8, 0, 12, 14, Border.SCALE);

            // title box
            Border.Draw(_batch, startX + unit * 8, 0, 12, 3, Border.SCALE);
            _fontRenderer.DrawText(_batch, _title,
                                   new Vector2(startX + unit * 10, unit), Color.Black, Border.SCALE);

            if (CanChangeBox)
            {
                _batch.Draw(_arrow, new Rectangle(
                                startX + unit * 8, unit,
                                (int)(_arrow.Width * Border.SCALE),
                                (int)(_arrow.Height * Border.SCALE)),
                            null, Color.White, 0f, Vector2.Zero, SpriteEffects.FlipHorizontally, 0f);
                _batch.Draw(_arrow, new Rectangle(
                                startX + unit * 19, unit,
                                (int)(_arrow.Width * Border.SCALE),
                                (int)(_arrow.Height * Border.SCALE)), Color.White);
            }

            // pokemon list
            var visiblePokemon = _pokemon.Skip(_scrollIndex).Take(VISIBLE_POKEMON).Select(p => p.DisplayName).ToList();

            if (visiblePokemon.Count < VISIBLE_POKEMON)
            {
                visiblePokemon.Add("CANCEL");
            }
            var pokemonListText = string.Join(NewLine, visiblePokemon);

            _fontRenderer.DrawText(_batch, pokemonListText,
                                   new Vector2(startX + unit * 9, unit * 4), Color.Black, Border.SCALE);

            // selector
            if (!DialogVisible)
            {
                if (_isMoving)
                {
                    _batch.Draw(_moveSelector, new Rectangle(
                                    startX + unit * 9,
                                    unit * 3 + unit * 2 * _index,
                                    (int)(_moveSelector.Width * Border.SCALE),
                                    (int)(_moveSelector.Height * Border.SCALE)), Color.White);
                }
                else
                {
                    _batch.Draw(_selector, new Rectangle(
                                    (int)(startX + unit * 8 + 7 * Border.SCALE),
                                    (int)(unit * 3 + Border.SCALE + unit * 2 * _index),
                                    (int)(_selector.Width * Border.SCALE),
                                    (int)(_selector.Height * Border.SCALE)), Color.White);
                }
            }

            // portrait background
            var targetRect = new Rectangle(
                startX + unit, unit * 4,
                (int)(PokemonTextureManager.TEXTURE_SIZE * Border.SCALE),
                (int)(PokemonTextureManager.TEXTURE_SIZE * Border.SCALE));

            if (!_optionsBox.Visible && !_isMoving)
            {
                _batch.DrawRectangle(targetRect, POKEMON_PORTRAIT_BACKGROUND);
            }

            if ((_pokemon.Length > _index + _scrollIndex || _isMoving) && _showPokemon)
            {
                // pokemon portrait
                var       selectedPokemon = GetSelectedPokemon();
                Texture2D sprite;

                if (_optionsBox.Visible || _isMoving)
                {
                    sprite = selectedPokemon.GetFrontSprite();
                }
                else
                {
                    sprite = PokemonTextureManager.GetFront(selectedPokemon.Id, POKEMON_PORTRAIT_PALETTE, selectedPokemon.UnownLetter);
                }
                _batch.Draw(sprite, targetRect, Color.White);

                // pokemon info
                var levelStr = selectedPokemon.Level == Pokemon.MAX_LEVEL ?
                               Pokemon.MAX_LEVEL.ToString().PadRight(4) :
                               ("^:L" + selectedPokemon.Level).PadRight(6);
                var infoStr = levelStr + PokemonStatHelper.GetGenderChar(selectedPokemon.Gender) + NewLine +
                              selectedPokemon.Name;
                _fontRenderer.DrawText(_batch, infoStr,
                                       new Vector2(startX + unit, unit * 12), Color.Black, Border.SCALE);

                // draw item box if the pokemon holds an item
                var heldItem = selectedPokemon.HeldItem;
                if (heldItem != null)
                {
                    Texture2D icon;
                    if (heldItem.IsMail)
                    {
                        icon = _mailIcon;
                    }
                    else
                    {
                        icon = _itemIcon;
                    }
                    _batch.Draw(icon, new Rectangle(
                                    startX + unit * 7, unit * 12,
                                    (int)(Border.SCALE * _itemIcon.Width),
                                    (int)(Border.SCALE * _itemIcon.Height)), Color.White);
                }
            }

            // text box
            Border.Draw(_batch, startX, unit * 15, Border.SCREEN_WIDTH, 3, Border.SCALE);
            _fontRenderer.DrawText(_batch, _message,
                                   new Vector2(startX + unit, unit * 16), Color.Black, Border.SCALE);

            _optionsBox.Draw(_batch, Border.DefaultWhite);
            _confirmationBox.Draw(_batch, Border.DefaultWhite);

            _batch.End();
        }
예제 #9
0
        internal override void Draw(GameTime gameTime)
        {
            _preScreen.Draw(gameTime);

            _batch.Begin(samplerState: SamplerState.PointClamp);

            var(unit, startX, width, height) = Border.GetDefaultScreenValues();

            Border.DrawCenter(_batch, startX, 0, Border.SCREEN_WIDTH, Border.SCREEN_HEIGHT, Border.SCALE);

            // borders
            for (var x = 0; x < Border.SCREEN_WIDTH; x++)
            {
                for (var y = 0; y < 6; y++)
                {
                    if (y == 0 || x == 0 || x == Border.SCREEN_WIDTH - 1 || y == 5)
                    {
                        _batch.Draw(_border, new Rectangle(startX + x * unit, y * unit, unit, unit), Color.White);
                    }
                }
            }

            // compose icon
            _batch.Draw(_icon, new Rectangle(
                            startX, 0,
                            (int)(Border.SCALE * _icon.Height),
                            (int)(Border.SCALE * _icon.Height)),
                        new Rectangle(_iconFrame * 16, 0, 16, 16),
                        Color.White);

            // message
            var lines = Mail.GetLinesFromMessage(_message);

            _fontRenderer.DrawText(_batch, lines[0],
                                   new Vector2(startX + unit * 2, unit * 2), Color.Black, Border.SCALE);
            if (lines[1] != null)
            {
                _fontRenderer.DrawText(_batch, lines[1],
                                       new Vector2(startX + unit * 2, unit * 4), Color.Black, Border.SCALE);
            }

            // placeholders
            var messageLength = PokemonFontRenderer.PrintableCharAmount(_message);

            for (var i = messageLength; i < Mail.MESSAGE_MAX_LENGTH; i++)
            {
                var y = 0;
                var x = i;
                if (x >= Mail.MESSAGE_CHARS_PER_LINE)
                {
                    y++;
                    x -= Mail.MESSAGE_CHARS_PER_LINE;
                }
                var textureOffset = i > messageLength ? 1 : 0;
                _batch.Draw(_placeholders,
                            new Rectangle(
                                startX + unit * 2 + unit * x, unit * 2 + y * unit * 2,
                                (int)(_placeholders.Height * Border.SCALE),
                                (int)(_placeholders.Height * Border.SCALE)),
                            new Rectangle(textureOffset * 8, 0, 8, 8), Color.White);
            }

            // char list
            var charListText = "";

            for (var i = 0; i < ActiveCharset.Length; i++)
            {
                charListText += ActiveCharset[i];
                if ((i + 1) % CHARS_PER_LINE == 0)
                {
                    charListText += Environment.NewLine;
                }
                else
                {
                    charListText += " ";
                }
            }
            _fontRenderer.DrawText(_batch, charListText,
                                   new Vector2(startX + unit, unit * 7), Color.Black, Border.SCALE);

            // menu
            var menuText = "";

            if (_isLower)
            {
                menuText += "UPPER";
            }
            else
            {
                menuText += "lower";
            }
            menuText += "  DEL   END";
            _fontRenderer.DrawText(_batch, menuText,
                                   new Vector2(startX + unit, unit * 17), Color.Black, Border.SCALE);

            // selector
            if (_selectorVisible)
            {
                if (_menuActive)
                {
                    _batch.Draw(_selectorMenu, new Rectangle(
                                    startX + unit + unit * _menuIndex * 6,
                                    (int)(unit * 17 - Border.SCALE),
                                    (int)(_selectorMenu.Width * Border.SCALE),
                                    (int)(_selectorMenu.Height * Border.SCALE)), Color.White);
                }
                else
                {
                    _batch.Draw(_selector, new Rectangle(
                                    (int)(startX + unit * _charX * 2 + unit - Border.SCALE),
                                    (int)(unit * _charY * 2 + unit * 7 - Border.SCALE),
                                    (int)(_selector.Width * Border.SCALE),
                                    (int)(_selector.Height * Border.SCALE)), Color.White);
                }
            }

            _batch.End();
        }