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); } } }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }