From 504d8a175b139ec119aebb99f3630d06ec3b1391 Mon Sep 17 00:00:00 2001 From: Eagle Date: Sat, 5 Jul 2025 03:29:59 +0200 Subject: [PATCH] 3rd pass refactor of storage system menu Fixed mistakes in resolved conflict and changed signature of `TakeItemPokemon()` to optionally give the caller the responsibility of handling message logging. Minor shrinking of logic and syntax. Rearranged some conditional blocks for readability and terseness. Added numerous local variables to give context to magic values and reduce line length in more extreme cases. Changed `PokemonWrapper.GetPokemon()` to a read-only property to simplify syntax on use. Added `DrawPokemonIcon()` to unify drawing of box/party pokemon icons. Inlined `BoxPokemonCount()` after it was simplified. --- P3D/Screens/PC/StorageSystemScreen.vb | 608 +++++++++++++------------- 1 file changed, 293 insertions(+), 315 deletions(-) diff --git a/P3D/Screens/PC/StorageSystemScreen.vb b/P3D/Screens/PC/StorageSystemScreen.vb index 60b3e5440..110ebe67c 100644 --- a/P3D/Screens/PC/StorageSystemScreen.vb +++ b/P3D/Screens/PC/StorageSystemScreen.vb @@ -178,14 +178,12 @@ Public Class StorageSystemScreen If CursorMoving Then MoveCursor() Else - If ControllerHandler.ButtonPressed(Buttons.RightTrigger) Or Controls.Right(True, False, True, False, False, False) Then - Me.CurrentBox += 1 - If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0 - End If - If ControllerHandler.ButtonPressed(Buttons.LeftTrigger) Or Controls.Left(True, False, True, False, False, False) Then - Me.CurrentBox -= 1 - If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1 - End If + Dim rightInput = ControllerHandler.ButtonPressed(Buttons.RightTrigger) Or Controls.Right(True, False, True, False, False, False) + Dim leftInput = ControllerHandler.ButtonPressed(Buttons.LeftTrigger) Or Controls.Left(True, False, True, False, False, False) + If leftInput Then Me.CurrentBox -= 1 + If rightInput Then Me.CurrentBox += 1 + If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1 + If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0 PressNumberButtons() @@ -215,15 +213,13 @@ Public Class StorageSystemScreen Private Sub TurnModel() If Controls.ShiftDown("L", False) Then modelRoll -= 0.1F If Controls.ShiftDown("R", False) Then modelRoll += 0.1F - - If ControllerHandler.ButtonDown(Buttons.RightThumbstickLeft Or Buttons.RightThumbstickRight) Then - Dim gPadState = GamePad.GetState(PlayerIndex.One) - modelRoll -= gPadState.ThumbSticks.Right.X * 0.1F - End If + If Not ControllerHandler.ButtonDown(Buttons.RightThumbstickLeft Or Buttons.RightThumbstickRight) Then Return + Dim gPadState = GamePad.GetState(PlayerIndex.One) + modelRoll -= gPadState.ThumbSticks.Right.X * 0.1F End Sub Private Sub PressNumberButtons() - Dim switchTo As Integer = If(KeyBoardHandler.KeyPressed(Keys.D0), 9, -1) + Dim switchTo = If(KeyBoardHandler.KeyPressed(Keys.D0), 9, -1) If switchTo < 0 Then Dim keysPressed = KeyBoardHandler.GetPressedKeys.Where(Function(key) key >= Keys.D1 AndAlso key <= Keys.D9) switchTo = If(keysPressed.Count < 1, switchTo, keysPressed.Max() - Keys.D1) @@ -234,45 +230,38 @@ Public Class StorageSystemScreen End Sub Private Sub ChooseObject() - Select Case CursorPosition.Y - Case 0 - Select Case CursorPosition.X - Case 0 - Me.CurrentBox -= 1 - If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1 - Case 1, 2, 3, 4 - If Me.BoxChooseMode Then - Me.BoxChooseMode = False - Exit Select - End If - Dim entries = New List(Of MenuEntry) - entries.Add(New MenuEntry(3, "Choose Box", False, Sub() Me.BoxChooseMode = Not Me.BoxChooseMode)) - entries.Add(New MenuEntry(4, "Change Mode", False, AddressOf Me.ChangemodeMenu)) - Dim battlebox = GetBox(CurrentBox).IsBattleBox - If Not battlebox Then - entries.Add(New MenuEntry(5, "Wallpaper", False, AddressOf WallpaperMain)) - entries.Add(New MenuEntry(6, "Name", False, AddressOf SelectNameBox)) - End If - entries.Add(New MenuEntry(entries.Max(Function(x) x.Index) + 1, "Cancel", True, Nothing)) - Me.SetupMenu(entries.ToArray(), "What do you want to do?") - Case 5 - Me.CurrentBox += 1 - If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0 - Case 6 - SelectPokemon() - End Select - Case 1, 2, 3, 4, 5 - If BoxChooseMode And CursorPosition.X < 6 And CursorPosition.Y > 0 Then - Dim id = CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6) - - If GetBox(id) IsNot Nothing Then - Me.CurrentBox = id - Me.BoxChooseMode = False - End If - Else - SelectPokemon() + If CursorPosition.Y = 0 Then + If CursorPosition.X = 0 Then Me.CurrentBox -= 1 + If CursorPosition.X = 5 Then Me.CurrentBox += 1 + If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1 + If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0 + If CursorPosition.X = 6 Then + SelectPokemon() + ElseIf CursorPosition.X > 0 AndAlso CursorPosition.X < 5 Then + If Me.BoxChooseMode Then + Me.BoxChooseMode = False + Return End If - End Select + Dim entries = New List(Of MenuEntry) + entries.Add(New MenuEntry(3, "Choose Box", False, Sub() Me.BoxChooseMode = Not Me.BoxChooseMode)) + entries.Add(New MenuEntry(4, "Change Mode", False, AddressOf Me.ChangemodeMenu)) + If Not GetBox(CurrentBox).IsBattleBox Then + entries.Add(New MenuEntry(5, "Wallpaper", False, AddressOf WallpaperMain)) + entries.Add(New MenuEntry(6, "Name", False, AddressOf SelectNameBox)) + End If + entries.Add(New MenuEntry(entries.Max(Function(x) x.Index) + 1, "Cancel", True, Nothing)) + Me.SetupMenu(entries.ToArray(), "What do you want to do?") + End If + ElseIf CursorPosition.Y < 6 Then + If Not BoxChooseMode Or CursorPosition.X > 5 Or CursorPosition.Y < 1 Then + SelectPokemon() + Return + End If + Dim id = CInt(CursorPosition.X + (CursorPosition.Y - 1) * 6) + If GetBox(id) Is Nothing Then Return + Me.CurrentBox = id + Me.BoxChooseMode = False + End If End Sub Private Sub ChangemodeMenu() @@ -463,30 +452,30 @@ Public Class StorageSystemScreen Private Sub CloseScreen() If Me.BoxChooseMode Then Me.BoxChooseMode = False - Else - If MovingPokemon IsNot Nothing Then - If PickupPlace.X = 6 Then - Core.Player.Pokemons.Add(Me.MovingPokemon) - Else - Dim id = CInt(PickupPlace.X) + CInt((PickupPlace.Y - 1) * 6) - - Dim box = GetBox(PickupBox) - Dim index = If(box.IsBattleBox, box.Pokemon.Count, id) - box.Pokemon.Add(index, New PokemonWrapper(Me.MovingPokemon)) ' Me.MovingPokemon)) - - CurrentBox = PickupBox - End If - Me.MovingPokemon = Nothing + Return + End If + If MovingPokemon IsNot Nothing Then + If PickupPlace.X = 6 Then + Core.Player.Pokemons.Add(Me.MovingPokemon) Else - Player.Temp.StorageSystemCursorPosition = Me.CursorPosition - Player.Temp.PCBoxIndex = Me.CurrentBox - Player.Temp.PCBoxChooseMode = Me.BoxChooseMode - Player.Temp.PCSelectionType = Me.SelectionMode + Dim id = CInt(PickupPlace.X) + CInt((PickupPlace.Y - 1) * 6) - Core.Player.BoxData = GetBoxSaveData(Me.Boxes) + Dim box = GetBox(PickupBox) + Dim index = If(box.IsBattleBox, box.Pokemon.Count, id) + box.Pokemon.Add(index, New PokemonWrapper(Me.MovingPokemon)) ' Me.MovingPokemon)) - Core.SetScreen(New TransitionScreen(Me, Me.PreScreen, Color.Black, False)) + CurrentBox = PickupBox End If + Me.MovingPokemon = Nothing + Else + Player.Temp.StorageSystemCursorPosition = Me.CursorPosition + Player.Temp.PCBoxIndex = Me.CurrentBox + Player.Temp.PCBoxChooseMode = Me.BoxChooseMode + Player.Temp.PCSelectionType = Me.SelectionMode + + Core.Player.BoxData = GetBoxSaveData(Me.Boxes) + + Core.SetScreen(New TransitionScreen(Me, Me.PreScreen, Color.Black, False)) End If End Sub @@ -526,59 +515,50 @@ Public Class StorageSystemScreen newData.Add($"{boxes.Count - 1 + addedBoxes},{i},{battleBox.Pokemon(i).PokemonData}") Next - Dim returnData = "" - For Each l As String In newData - If returnData <> "" Then returnData &= Environment.NewLine - returnData &= l - Next - - Return returnData + Return String.Join(Environment.NewLine, newData) End Function Private Function GetRelativeMousePosition() As Vector2 For x = 0 To 5 For y = 0 To 4 - If New Rectangle(50 + x * 100, 200 + y * 84, 64, 64).Contains(MouseHandler.MousePosition) Then - Return New Vector2(x, y + 1) - End If + Dim boxTile = New Rectangle(50 + x * 100, 200 + y * 84, 64, 64) + If boxTile.Contains(MouseHandler.MousePosition) Then Return New Vector2(x, y + 1) Next Next For y = 0 To 5 - If New Rectangle(Core.windowSize.Width - 260, y * 100 + 50, 128, 80).Contains(MouseHandler.MousePosition) Then - Return New Vector2(6, y) - End If + Dim partyTile = New Rectangle(Core.windowSize.Width - 260, y * 100 + 50, 128, 80) + If partyTile.Contains(MouseHandler.MousePosition) Then Return New Vector2(6, y) Next - If New Rectangle(10, 52, 96, 96).Contains(MouseHandler.MousePosition) Then Return New Vector2(0, 0) - If New Rectangle(655, 52, 96, 96).Contains(MouseHandler.MousePosition) Then Return New Vector2(5, 0) - If New Rectangle(80, 50, 600, 100).Contains(MouseHandler.MousePosition) Then Return New Vector2(1, 0) + Dim labelArea = New Rectangle(80, 50, 600, 100) + Dim leftArrowArea = New Rectangle(10, 52, 96, 96) + Dim rightArrowArea = New Rectangle(655, 52, 96, 96) + If labelArea.Contains(MouseHandler.MousePosition) Then Return New Vector2(1, 0) + If leftArrowArea.Contains(MouseHandler.MousePosition) Then Return New Vector2(0, 0) + If rightArrowArea.Contains(MouseHandler.MousePosition) Then Return New Vector2(5, 0) Return New Vector2(-1) End Function Private Function GetAbsoluteCursorPosition(ByVal relPos As Vector2) As Vector2 - Select Case relPos.Y - Case 0 - Select Case relPos.X - Case 0 - Return New Vector2(60, 20) - Case 1, 2, 3, 4 - Return New Vector2(380, 30) - Case 5 - Return New Vector2(705, 20) - Case 6 - Return New Vector2(Core.windowSize.Width - 200, 20) - End Select - Case 1, 2, 3, 4, 5 - Select Case relPos.X - Case 0, 1, 2, 3, 4, 5 - Return New Vector2(50 + relPos.X * 100 + 42, 200 + (relPos.Y - 1) * 84 - 42) - Case 6 - Return New Vector2(Core.windowSize.Width - 200, 20 + 100 * relPos.Y) - End Select - End Select + If relPos.Y = 0 Then + If relPos.X < 0 Or relPos.X > 6 Then Return New Vector2() + Dim leftArrow = New Vector2(60, 20) + Dim rightArrow = New Vector2(705, 20) + Dim label = New Vector2(380, 30) + Dim party = New Vector2(Core.windowSize.Width - 200, 20) + Dim positions = {leftArrow, label, label, label, label, rightArrow, party} + Return positions(CInt(relPos.X)) + End If + If relPos.Y > 0 And relPos.Y < 6 Then + Dim boxTile = New Vector2(50 + relPos.X * 100 + 42, 200 + (relPos.Y - 1) * 84 - 42) + Dim partyTile = New Vector2(Core.windowSize.Width - 200, 20 + 100 * relPos.Y) + If relPos.X >= 0 And relPos.X < 6 Then Return boxTile + If relPos.X = 6 Then Return partyTile + End If + Return New Vector2() End Function Private Function GetBattleBoxID() As Integer @@ -605,7 +585,7 @@ Public Class StorageSystemScreen If box.Pokemon.ContainsKey(id) And CursorPosition.X < 6 Or CursorPosition.X = 6 And Core.Player.Pokemons.Count - 1 >= CInt(CursorPosition.Y) Then - Dim p = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).GetPokemon()) + Dim p = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).pokemon) Dim entries = New List(Of MenuEntry) @@ -621,7 +601,7 @@ Public Class StorageSystemScreen Dim itemOffset = If(p.Item IsNot Nothing, 1, 0) - If p.Item IsNot Nothing Then entries.Add(New MenuEntry(5, "Take Item", False, AddressOf TakeItemPokemon)) + If p.Item IsNot Nothing Then entries.Add(New MenuEntry(5, "Take Item", False, Sub() TakeItemPokemon())) entries.Add(New MenuEntry(5 + itemOffset, "Release", False, AddressOf ReleasePokemon)) entries.Add(New MenuEntry(6 + itemOffset, "Cancel", True, Nothing)) SetupMenu(entries.ToArray(), p.GetDisplayName() & " is selected.") @@ -669,7 +649,7 @@ Public Class StorageSystemScreen If pokemonExists Then If Me.MovingPokemon Is Nothing Then - Me.MovingPokemon = box.Pokemon(id).GetPokemon() + Me.MovingPokemon = box.Pokemon(id).pokemon box.Pokemon.Remove(id) PickupBox = CurrentBox @@ -677,7 +657,7 @@ Public Class StorageSystemScreen RearrangeBattleBox(box) Else Me.MovingPokemon.FullRestore() - Dim sPokemon = box.Pokemon(id).GetPokemon() + Dim sPokemon = box.Pokemon(id).pokemon box.Pokemon(id) = New PokemonWrapper(Me.MovingPokemon) ' Me.MovingPokemon Me.MovingPokemon = sPokemon End If @@ -700,7 +680,7 @@ Public Class StorageSystemScreen If Core.Player.Pokemons.Count > 5 Then SetupMenu({New MenuEntry(3, "OK", True, Nothing)}, "Party is full!") ElseIf box.Pokemon.ContainsKey(id) Then - Core.Player.Pokemons.Add(box.Pokemon(id).GetPokemon()) + Core.Player.Pokemons.Add(box.Pokemon(id).pokemon) box.Pokemon.Remove(id) End If RearrangeBattleBox(box) @@ -735,30 +715,33 @@ Public Class StorageSystemScreen Dim box = GetBox(CurrentBox) Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) Dim pokemonList = box.GetPokemonList() - Dim partyIndex = pokemonList.IndexOf(box.Pokemon(id).GetPokemon()) + Dim partyIndex = pokemonList.IndexOf(box.Pokemon(id).pokemon) Core.SetScreen(New SummaryScreen(Me, pokemonList.ToArray(), partyIndex)) End Sub - Private Sub TakeItemPokemon() + Private Function TakeItemPokemon(Optional logImmediate As Boolean = True) As String Dim box = GetBox(CurrentBox) Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) - Dim pokemon = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).GetPokemon) - If pokemon.Item Is Nothing Then Return + Dim pokemon = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).pokemon) + Dim message = "" + If pokemon.Item Is Nothing Then Return message If pokemon.Item.IsMail And pokemon.Item.AdditionalData <> "" Then - Screen.TextBox.Show("The Mail was taken to your~inbox on your PC.") + message = "The Mail was taken to your~inbox on your PC." Core.Player.Mails.Add(Items.MailItem.GetMailDataFromString(pokemon.Item.AdditionalData)) Else - Screen.TextBox.Show($"Taken {pokemon.Item.OneLineName()}~from {pokemon.GetDisplayName()}.") + message = $"Taken {pokemon.Item.OneLineName()}~from {pokemon.GetDisplayName()}." Dim ItemID = If(pokemon.Item.IsGameModeItem, pokemon.Item.gmID, pokemon.Item.ID.ToString()) Core.Player.Inventory.AddItem(ItemID, 1) End If + If logImmediate Then Screen.TextBox.Show(message) pokemon.Item = Nothing - End Sub + Return message + End Function Private Sub ReleasePokemon() Dim hasPokemon = False @@ -777,7 +760,7 @@ Public Class StorageSystemScreen Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) - Dim p = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).GetPokemon()) + Dim p = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).pokemon) If Not p.IsEgg() Then Dim e1 = New MenuEntry(3, "No", True, AddressOf SelectPokemon) @@ -794,22 +777,10 @@ Public Class StorageSystemScreen Private Sub ConfirmRelease() Dim id = CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6) Dim box = GetBox(CurrentBox) - Dim pokemon = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).GetPokemon()) + Dim pokemon = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).pokemon) Dim text = "" - If pokemon.Item IsNot Nothing Then - If pokemon.Item.IsMail And pokemon.Item.AdditionalData <> "" Then - text &= "The Mail was taken to your~inbox on your PC." - - Core.Player.Mails.Add(Items.MailItem.GetMailDataFromString(pokemon.Item.AdditionalData)) - - Else - Dim ItemID = If(pokemon.Item.IsGameModeItem, pokemon.Item.gmID, pokemon.Item.ID.ToString()) - Core.Player.Inventory.AddItem(ItemID, 1) - text &= $"Taken {pokemon.Item.OneLineName()}~from {pokemon.GetDisplayName()}." - End If - pokemon.Item = Nothing - End If - If s <> "" Then s &= "*" + If pokemon.Item IsNot Nothing Then text &= Me.TakeItemPokemon(False) + If text <> "" Then text &= "*" text &= $"Goodbye, {pokemon.GetDisplayName()}!" Screen.TextBox.Show(text) @@ -842,8 +813,8 @@ Public Class StorageSystemScreen DrawTopBar() DrawTeamWindow() - Dim action = If(Me.MenuVisible, CType(AddressOf Me.DrawMenuEntries, Action), AddressOf Me.DrawCursor) - action() + Dim Draw = If(Me.MenuVisible, CType(AddressOf Me.DrawMenuEntries, Action), AddressOf Me.DrawCursor) + Draw() TextBox.Draw() End Sub @@ -851,7 +822,7 @@ Public Class StorageSystemScreen Private Sub DrawTopBar() Dim boxIndex = Me.CurrentBox If BoxChooseMode Then - boxIndex = If(CursorPosition.X < 6 And CursorPosition.Y > 0, CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6), CurrentBox) + boxIndex = If(CursorPosition.X < 6 And CursorPosition.Y > 0, CInt(CursorPosition.X + (CursorPosition.Y - 1) * 6), CurrentBox) End If Dim b = GetBox(boxIndex) @@ -864,40 +835,71 @@ Public Class StorageSystemScreen Canvas.DrawScrollBar(New Vector2(80, 36), Me.Boxes.Count, 1, boxIndex, New Size(600, 14), True, Color.TransparentBlack, cArr(0)) + Dim font = FontManager.MainFont + Dim textWidth = font.MeasureString(b.Name).X + Dim labelPosition = New Vector2(380 - textWidth, 76) + Dim labelShadowPosition = labelPosition + New Vector2(4) - Core.SpriteBatch.DrawString(FontManager.MainFont, b.Name, New Vector2(384 - FontManager.MainFont.MeasureString(b.Name).X, 80), Color.Black, 0.0F, New Vector2(0), 2, SpriteEffects.None, 0.0F) - Core.SpriteBatch.DrawString(FontManager.MainFont, b.Name, New Vector2(380 - FontManager.MainFont.MeasureString(b.Name).X, 76), Color.White, 0.0F, New Vector2(0), 2, SpriteEffects.None, 0.0F) + Core.SpriteBatch.DrawString(font, b.Name, labelShadowPosition, Color.Black, 0.0F, Vector2.Zero, 2, SpriteEffects.None, 0.0F) + Core.SpriteBatch.DrawString(font, b.Name, labelPosition, Color.White, 0.0F, Vector2.Zero, 2, SpriteEffects.None, 0.0F) - Core.SpriteBatch.Draw(Me.menuTexture, New Rectangle(10, 52, 96, 96), New Rectangle(0, 16, 16, 16), Color.White) - Core.SpriteBatch.Draw(Me.menuTexture, New Rectangle(655, 52, 96, 96), New Rectangle(0, 16, 16, 16), Color.White, 0.0F, New Vector2(0), SpriteEffects.FlipHorizontally, 0.0F) + Dim textureArea = New Rectangle(0, 16, 16, 16) + Dim leftArrowArea = New Rectangle(10, 52, 96, 96) + Dim rightArrowArea = New Rectangle(655, 52, 96, 96) + Core.SpriteBatch.Draw(Me.menuTexture, leftArrowArea, textureArea, Color.White) + Core.SpriteBatch.Draw(Me.menuTexture, rightArrowArea, textureArea, Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) + End Sub + + Private Sub DrawPokemonIcon(area As Rectangle, pokemon As Pokemon, Optional drawItem As Boolean = False, Optional drawShadow As Boolean = False) + Dim light = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) + Dim texture = pokemon.GetMenuTexture() + If drawShadow Then + Dim shadowArea = New Rectangle(area.Location + New Point(10, 10), area.Size) + Core.SpriteBatch.Draw(texture, shadowArea, New Color(0, 0, 0, 150)) + End If + Core.SpriteBatch.Draw(texture, area, light) + If pokemon.IsEgg() Or Not drawItem Or pokemon.Item Is Nothing Then Return + Dim itemArea = New Rectangle(area.Location + New Point(32), New Point(24)) + Core.SpriteBatch.Draw(pokemon.Item.Texture, itemArea, Color.White) End Sub Private Sub DrawMainWindow() + Dim backgroundColor = New Color(220, 220, 220) + Dim TilePosition = Function(x As Integer, y As Integer) New Point(x, y) * New Point(100, 84) + New Point(50, 200) If BoxChooseMode Then - Canvas.DrawRectangle(Core.windowSize, New Color(220, 220, 220)) + Canvas.DrawRectangle(Core.windowSize, backgroundColor) For x = 0 To 5 For y = 0 To 4 Dim id = y * 6 + x If Me.Boxes.Count - 1 < id Then Continue For - Dim pCount = BoxPokemonCount(id, True) + Dim pBox = Me.GetBox(id) + Dim pCount = If(pBox Is Nothing, 0, pBox.Pokemon.Values.Where(Function(p) IsLit(p.pokemon)).Count()) - Dim tCoord = New Point(64, 0) - If pCount = 0 Then tCoord = New Point(64, 32) - If pCount = 30 Then tCoord = New Point(32, 32) + Dim empty = New Point(64, 32) + Dim notEmpty = New Point(64, 0) + Dim full = New Point(32, 32) + Dim tCoord = notEmpty + If pCount = 0 Then tCoord = empty + If pCount = 30 Then tCoord = full - Core.SpriteBatch.Draw(Me.texture, New Rectangle(50 + x * 100, 200 + y * 84, 64, 64), New Rectangle(tCoord, New Point(32)), Color.White) + Dim tileArea = New Rectangle(TilePosition(x, y), New Point(64)) + Dim textureArea = New Rectangle(tCoord, New Point(32)) + Core.SpriteBatch.Draw(Me.texture, tileArea, textureArea, Color.White) Next Next Return End If Dim box = GetBox(CurrentBox) + Dim wrapper As PokemonWrapper = Nothing + Dim cArr(0) As Color + Dim background = If(box.IsBattleBox, "GUI\Box\Battlebox", $"GUI\Box\{box.Background}") + TextureManager.GetTexture(background, New Rectangle(0, 0, 1, 1), "").GetData(cArr, 0, 1) + backgroundColor = New Color(cArr(0).R, cArr(0).G, cArr(0).B, 150) If box.IsBattleBox Then Canvas.DrawGradient(Core.windowSize, New Color(203, 40, 41), New Color(238, 128, 128), False, -1) - Dim cArr(0) As Color - TextureManager.GetTexture("GUI\Box\BattleBox", New Rectangle(0, 0, 1, 1), "").GetData(cArr) For i = 0 To 5 Dim x = i + 2 @@ -906,16 +908,10 @@ Public Class StorageSystemScreen x -= 2 y += 1 End While - Canvas.DrawRectangle(New Rectangle(50 + x * 100, 200 + y * 84, 64, 64), New Color(cArr(0).R, cArr(0).G, cArr(0).B, 150)) - - If Not box.Pokemon.ContainsKey(i) Then Continue For - Dim pokemon = box.Pokemon(i).GetPokemon() - Dim c = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) - Dim pokeTexture = pokemon.GetMenuTexture() - Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width) * 2, CSng(32 / pokeTexture.Height) * 2) - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(50 + x * 100, 200 + y * 84, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), c) - If pokemon.Item Is Nothing Or pokemon.IsEgg() Then Continue For - Core.SpriteBatch.Draw(pokemon.Item.Texture, New Rectangle(CInt(50 + x * 100 + 32), CInt(200 + y * 84 + 32), 24, 24), Color.White) + Dim area = New Rectangle(TilePosition(x, y), New Point(64)) + Canvas.DrawRectangle(area, backgroundColor) + If Not box.Pokemon.TryGetValue(i, wrapper) Then Continue For + Me.DrawPokemonIcon(area, wrapper.pokemon, True) Next Else Dim xt = box.Background @@ -930,26 +926,21 @@ Public Class StorageSystemScreen Next Next - Dim cArr(0) As Color - TextureManager.GetTexture("GUI\Box\" & box.Background, New Rectangle(0, 0, 1, 1), "").GetData(cArr) For x = 0 To 5 For y = 0 To 4 Dim id = y * 6 + x - Canvas.DrawRectangle(New Rectangle(50 + x * 100, 200 + y * 84, 64, 64), New Color(cArr(0).R, cArr(0).G, cArr(0).B, 150)) - - If Not box.Pokemon.ContainsKey(id) Then Continue For - Dim pokemon = box.Pokemon(id).GetPokemon() - Dim c = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) - Dim pokeTexture = pokemon.GetMenuTexture() - Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width) * 2, CSng(32 / pokeTexture.Height) * 2) - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(50 + x * 100, 200 + y * 84, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), c) - If pokemon.Item Is Nothing Or pokemon.IsEgg() Then Continue For - Core.SpriteBatch.Draw(pokemon.Item.Texture, New Rectangle(CInt(50 + x * 100 + 32), CInt(200 + y * 84 + 32), 24, 24), Color.White) + Dim area = New Rectangle(TilePosition(x, y), New Point(64)) + Canvas.DrawRectangle(area, backgroundColor) + If Not box.Pokemon.TryGetValue(id, wrapper) Then Continue For + Me.DrawPokemonIcon(area, wrapper.pokemon, True) Next Next - Core.SpriteBatch.DrawString(FontManager.MainFont, "Press" & " " & KeyBindings.SpecialKey.ToString & " " & "on the keyboard to filter.", New Vector2(44, 200 + 5 * 84), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MainFont, "Press" & " " & KeyBindings.SpecialKey.ToString & " " & "on the keyboard to filter.", New Vector2(44 - 2, 200 + 5 * 84 - 2), Color.White) + Dim text = $"Press {KeyBindings.SpecialKey} on the keyboard to filter." + Dim textPosition = New Vector2(44, 200 + 5 * 84) + Dim shadowPosition = textPosition + New Vector2(2) + Core.SpriteBatch.DrawString(FontManager.MainFont, text, shadowPosition, Color.Black) + Core.SpriteBatch.DrawString(FontManager.MainFont, text, textPosition, Color.White) End If End Sub @@ -957,44 +948,45 @@ Public Class StorageSystemScreen Private Sub DrawPokemonStatus() If Me.BoxChooseMode And CursorPosition.X < 6 And CursorPosition.Y > 0 Then - Dim box = GetBox(CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) + Dim box = GetBox(CInt(CursorPosition.X + (CursorPosition.Y - 1) * 6)) - If box IsNot Nothing Then - Canvas.DrawRectangle(New Rectangle(660, 200, 200, 200), New Color(84, 198, 216, 150)) + If box Is Nothing Then Return + Dim overviewArea = New Rectangle(660, 200, 200, 200) + Dim detailsArea = New Rectangle(660, 410, 200, 210) + Canvas.DrawRectangle(overviewArea, New Color(84, 198, 216, 150)) - Dim minLevel = -1 - Dim maxLevel = -1 + Dim minLevel = Integer.MaxValue + Dim maxLevel = Integer.MinValue - For x = 0 To 5 - For y = 0 To 4 - Dim id = y * 6 + x + For x = 0 To 5 + For y = 0 To 4 + Dim id = y * 6 + x - If Not box.Pokemon.ContainsKey(id) Then Continue For - Dim pokemon = box.Pokemon(id).GetPokemon() - Dim c = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) + Dim wrapper As PokemonWrapper = Nothing + If Not box.Pokemon.TryGetValue(id, wrapper) Then Continue For + Dim position = New Point(x, y) * New Point(32) + New Point(664, 215) + Dim pokemon = wrapper.pokemon + Me.DrawPokemonIcon(New Rectangle(position, New Point(32)), pokemon) - Dim pokeTexture = pokemon.GetMenuTexture() - Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height)) - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(664 + x * 32, 215 + y * 32, CInt(pokeTexture.Width * pokeTextureScale.X), CInt(pokeTexture.Height * pokeTextureScale.Y)), c) - - If pokemon.Level < minLevel Or minLevel = -1 Then minLevel = pokemon.Level - If pokemon.Level > maxLevel Or maxLevel = -1 Then maxLevel = pokemon.Level - Next + minLevel = Math.Min(minLevel, pokemon.Level) + maxLevel = Math.Max(maxLevel, pokemon.Level) Next + Next - Canvas.DrawRectangle(New Rectangle(660, 410, 200, 210), New Color(84, 198, 216, 150)) + Canvas.DrawRectangle(detailsArea, New Color(84, 198, 216, 150)) - Dim levelString = If(minLevel = -1 Or maxLevel = -1, "None", $"{minLevel} - {maxLevel}") + Dim levelString = If(minLevel = Integer.MaxValue Or maxLevel = Integer.MinValue, "None", $"{minLevel} - {maxLevel}") - Dim maxPokemon = If(box.IsBattleBox, 6, 30) + Dim maxPokemon = If(box.IsBattleBox, 6, 30) - Dim t = $"Box: {box.Name}{Environment.NewLine}" - t &= $"Pokémon: {box.Pokemon.Count} / {maxPokemon}{Environment.NewLine}" - t &= $"Level: {levelString}" + Dim t = $"Box: {box.Name}{Environment.NewLine}" + t &= $"Pokémon: {box.Pokemon.Count} / {maxPokemon}{Environment.NewLine}" + t &= $"Level: {levelString}" - Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(667, 417), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(665, 415), Color.White) - End If + Dim infoPosition = New Vector2(665, 415) + Dim shadowPosition = infoPosition + New Vector2(2) + Core.SpriteBatch.DrawString(FontManager.MainFont, t, shadowPosition, Color.Black) + Core.SpriteBatch.DrawString(FontManager.MainFont, t, infoPosition, Color.White) Else Dim box = GetBox(CurrentBox) Dim p = Me.MovingPokemon @@ -1005,62 +997,64 @@ Public Class StorageSystemScreen p = Core.Player.Pokemons(CInt(CursorPosition.Y)) End If Else - Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(Me.CursorPosition.X) + CInt((Me.CursorPosition.Y - 1) * 6)) + Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(Me.CursorPosition.X + (Me.CursorPosition.Y - 1) * 6)) If box.Pokemon.ContainsKey(id) Then - p = box.Pokemon(id).GetPokemon() + p = box.Pokemon(id).pokemon End If End If End If - If p IsNot Nothing Then - Dim cArr(0) As Color + If p Is Nothing Then Return + Dim cArr(0) As Color - Dim texturePath = If(box.IsBattleBox, "GUI\Box\BattleBox", $"GUI\Box\{box.Background}") - TextureManager.GetTexture(texturePath, New Rectangle(0, 0, 1, 1), "").GetData(cArr) + Dim texturePath = If(box.IsBattleBox, "GUI\Box\BattleBox", $"GUI\Box\{box.Background}") + TextureManager.GetTexture(texturePath, New Rectangle(0, 0, 1, 1), "").GetData(cArr, 0, 1) - Dim c = If(BoxChooseMode, New Color(84, 198, 216, 150), New Color(cArr(0).R, cArr(0).G, cArr(0).B, 150)) + Dim overviewArea = New Rectangle(660, 200, 256, 256) + Dim detailsArea = New Rectangle(660, 472, 320, 240) + Dim backgroundColor = If(BoxChooseMode, New Color(84, 198, 216, 150), New Color(cArr(0).R, cArr(0).G, cArr(0).B, 150)) - Canvas.DrawRectangle(New Rectangle(660, 200, 256, 256), c) + Canvas.DrawRectangle(overviewArea, backgroundColor) - Dim modelName = p.AnimationName - Dim shinyString = If(p.IsShiny, "Shiny", "Normal") - If Core.Player.ShowModelsInBattle AndAlso ModelManager.ModelExist($"Models\Pokemon\{modelName}\{shinyString}") And Not p.IsEgg() Then - Draw3DModel(p, $"Models\Pokemon\{modelName}\{shinyString}") - Else - GetYOffset(p) - Dim texture = p.GetTexture(True) - Dim size = New Point(MathHelper.Min(texture.Width * 3, 288), MathHelper.Min(texture.Height * 3, 288)) - Dim position = New Point(792 - CInt(size.X / 2), 192 - yOffset) - Core.SpriteBatch.Draw(texture, New Rectangle(position, size), Color.White) - End If - - Canvas.DrawRectangle(New Rectangle(660, 472, 320, 240), c) - - If p.IsEgg() Then - Core.SpriteBatch.DrawString(FontManager.MainFont, "Egg", New Vector2(667, 477 + 2), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MainFont, "Egg", New Vector2(665, 477), Color.White) - Else - Dim itemString = If(p.Item Is Nothing, "None", p.Item.Name) - - Dim nameString = If(p.NickName = "", p.GetDisplayName(), $"{p.GetDisplayName()}/{p.GetName}") - - Dim t = $"{nameString}{Environment.NewLine}" - t &= $"DEX NO. {p.Number}{Environment.NewLine}" - t &= $"LEVEL {p.Level}{Environment.NewLine}" - t &= $"HP {p.HP} / {p.MaxHP}{Environment.NewLine}" - t &= $"ATTACK {p.Attack}{Environment.NewLine}" - t &= $"DEFENSE {p.Defense}{Environment.NewLine}" - t &= $"SP. ATK {p.SpAttack}{Environment.NewLine}" - t &= $"SP. DEF {p.SpDefense}{Environment.NewLine}" - t &= $"SPEED {p.Speed}{Environment.NewLine}" - t &= $"ITEM {itemString}" - - Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(667, 477 + 2), Color.Black) - Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(665, 477), Color.White) - End If + Dim modelName = p.AnimationName + Dim shinyString = If(p.IsShiny, "Shiny", "Normal") + If Core.Player.ShowModelsInBattle AndAlso ModelManager.ModelExist($"Models\Pokemon\{modelName}\{shinyString}") And Not p.IsEgg() Then + Draw3DModel(p, $"Models\Pokemon\{modelName}\{shinyString}") + Else + GetYOffset(p) + Dim texture = p.GetTexture(True) + Dim size = Vector2.Min(New Vector2(texture.Width, texture.Height) * 3, New Vector2(288, 288)).ToPoint() + Dim position = New Point(792 - CInt(size.X / 2), 192 - yOffset) + Core.SpriteBatch.Draw(texture, New Rectangle(position, size), Color.White) End If + + Canvas.DrawRectangle(detailsArea, backgroundColor) + + Dim text = "" + If p.IsEgg() Then + text = "Egg" + Else + Dim itemString = If(p.Item Is Nothing, "None", p.Item.Name) + + Dim nameString = If(p.NickName = "", p.GetDisplayName(), $"{p.GetDisplayName()}/{p.GetName}") + + text = $"{nameString}{Environment.NewLine}" + text &= $"DEX NO. {p.Number}{Environment.NewLine}" + text &= $"LEVEL {p.Level}{Environment.NewLine}" + text &= $"HP {p.HP} / {p.MaxHP}{Environment.NewLine}" + text &= $"ATTACK {p.Attack}{Environment.NewLine}" + text &= $"DEFENSE {p.Defense}{Environment.NewLine}" + text &= $"SP. ATK {p.SpAttack}{Environment.NewLine}" + text &= $"SP. DEF {p.SpDefense}{Environment.NewLine}" + text &= $"SPEED {p.Speed}{Environment.NewLine}" + text &= $"ITEM {itemString}" + End If + Dim textPosition = New Vector2(665, 477) + Dim shadowPosition = textPosition + New Vector2(2) + Core.SpriteBatch.DrawString(FontManager.MainFont, text, shadowPosition, Color.Black) + Core.SpriteBatch.DrawString(FontManager.MainFont, text, textPosition, Color.White) End If End Sub @@ -1072,7 +1066,7 @@ Public Class StorageSystemScreen Dim roll = propList.Item5 - Dim t = ModelManager.DrawModelToTexture(modelName, renderTarget, position, New Vector3(0.0F, 10.0F, 50.0F), New Vector3(roll + modelRoll, 0, 0), scale, True) + Dim t = ModelManager.DrawModelToTexture(modelName, renderTarget, position, New Vector3(0, 10, 50), New Vector3(roll + modelRoll, 0, 0), scale, True) Core.SpriteBatch.Draw(t, New Rectangle(192, 72, 1200, 680), Color.White) End Sub @@ -1080,48 +1074,39 @@ Public Class StorageSystemScreen Canvas.DrawRectangle(New Rectangle(Core.windowSize.Width - 310, 0, 400, Core.windowSize.Height), New Color(84, 198, 216)) For y = -64 To Core.windowSize.Height Step 64 - Core.SpriteBatch.Draw(Me.menuTexture, New Rectangle(Core.windowSize.Width - 128, y + StorageSystemScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White) + Dim scrollArea = New Rectangle(Core.windowSize.Width - 128, y + StorageSystemScreen.TileOffset, 128, 64) + Dim scrollTextureArea = New Rectangle(48, 0, 16, 16) + Core.SpriteBatch.Draw(Me.menuTexture, scrollArea, scrollTextureArea, Color.White) Next Dim halfHeight = CInt(Core.windowSize.Height / 2) - Dim destination = New Rectangle(96, 0, 32, 64) + Dim cutoutArea = New Rectangle(Core.windowSize.Width - 430, 0, 128, halfHeight) + Dim cutoutTextureArea = New Rectangle(96, 0, 32, 64) - Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 430, 0, 128, halfHeight), destination, Color.White) - Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 430, halfHeight, 128, halfHeight), destination, Color.White, 0.0F, New Vector2(0), SpriteEffects.FlipVertically, 0.0F) + Core.SpriteBatch.Draw(Me.texture, cutoutArea, cutoutTextureArea, Color.White) + cutoutArea.Location += New Point(0, halfHeight) + Core.SpriteBatch.Draw(Me.texture, cutoutArea, cutoutTextureArea, Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipVertically, 0.0F) For i = 0 To 5 - Canvas.DrawBorder(2, New Rectangle(Core.windowSize.Width - 260, i * 100 + 50, 128, 80), New Color(42, 167, 198)) + Dim outlineArea = New Rectangle(Core.windowSize.Width - 260, i * 100 + 50, 128, 80) + Canvas.DrawBorder(2, outlineArea, New Color(42, 167, 198)) If Core.Player.Pokemons.Count - 1 < i Then Continue For Dim pokemon = Core.Player.Pokemons(i) - Dim c As Color = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) - - Dim pokeTexture = pokemon.GetMenuTexture() - Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height)) * 2 - Dim scale = New Vector2(pokeTexture.Width, pokeTexture.Height) * pokeTextureScale - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(Core.windowSize.Width - 228, i * 100 + 60, CInt(scale.X), CInt(scale.Y)), c) - - If pokemon.Item Is Nothing Or pokemon.IsEgg Then Continue For - Core.SpriteBatch.Draw(pokemon.Item.Texture, New Rectangle(Core.windowSize.Width - 196, i * 100 + 92, 24, 24), Color.White) + Dim spriteArea = New Rectangle(Core.windowSize.Width - 228, i * 100 + 60, 64, 64) + Me.DrawPokemonIcon(spriteArea, pokemon, True) Next End Sub Private Sub DrawCursor() - Dim cPosition = If(CursorMoving, CursorMovePosition, GetAbsoluteCursorPosition(Me.CursorPosition)) + Dim cPosition = If(CursorMoving, CursorMovePosition, GetAbsoluteCursorPosition(Me.CursorPosition)).ToPoint() If Me.MovingPokemon IsNot Nothing Then - Dim pokeTexture = Me.MovingPokemon.GetMenuTexture() - Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height)) * 2 - Dim size = New Vector2(pokeTexture.Width, pokeTexture.Height) * pokeTextureScale - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(cPosition.X - 10), CInt(cPosition.Y + 44), CInt(size.X), CInt(size.Y)), New Color(0, 0, 0, 150)) - Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(cPosition.X - 20), CInt(cPosition.Y + 34), CInt(size.X), CInt(size.Y)), Color.White) - - If Me.MovingPokemon.Item IsNot Nothing And Not Me.MovingPokemon.IsEgg() Then - Core.SpriteBatch.Draw(Me.MovingPokemon.Item.Texture, New Rectangle(CInt(cPosition.X - 20) + 32, CInt(cPosition.Y + 34) + 32, 24, 24), Color.White) - End If + Dim spriteArea = New Rectangle(cPosition + New Point(-20, 34), New Point(64)) + Me.DrawPokemonIcon(spriteArea, Me.MovingPokemon, True, True) End If - Core.SpriteBatch.Draw(GetCursorTexture(), New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White) + Core.SpriteBatch.Draw(GetCursorTexture(), New Rectangle(cPosition, New Point(64)), Color.White) End Sub Private Sub DrawMenuEntries() @@ -1217,22 +1202,6 @@ Public Class StorageSystemScreen Return GetBox(index, Me.Boxes) End Function - Private Function BoxPokemonCount(ByVal selBox As Integer, ByVal lit As Boolean) As Integer - Dim c = 0 - - Dim box = GetBox(selBox) - If box Is Nothing Then Return c - For Each p As PokemonWrapper In box.Pokemon.Values - If Not lit Then - c += 1 - Continue For - End If - If IsLit(p.GetPokemon()) Then c += 1 - Next - - Return c - End Function - Private Sub SetupMenu(ByVal entries() As MenuEntry, ByVal header As String) Me.MenuEntries.Clear() Me.MenuEntries.AddRange(entries) @@ -1257,12 +1226,14 @@ Public Class StorageSystemScreen Me._pokemonData = p.GetSaveData() End Sub - Public Function GetPokemon() As Pokemon - If _loaded Then Return Me._pokemon - _loaded = True - _pokemon = Pokemon.GetPokemonByData(Me._pokemonData) - Return Me._pokemon - End Function + Public ReadOnly Property pokemon As Pokemon + Get + If _loaded Then Return Me._pokemon + _loaded = True + _pokemon = Pokemon.GetPokemonByData(Me._pokemonData) + Return Me._pokemon + End Get + End Property Public ReadOnly Property PokemonData() As String Get @@ -1296,7 +1267,7 @@ Public Class StorageSystemScreen End Property Public Function GetPokemonList() As List(Of Pokemon) - Return Pokemon.Values.Select(Function(x) x.GetPokemon()).ToList() + Return Pokemon.Values.Select(Function(x) x.pokemon).ToList() End Function Public Property IsBattleBox() As Boolean @@ -1349,17 +1320,20 @@ Public Class StorageSystemScreen End Sub Public Sub Draw(ByVal CursorIndex As Integer, ByVal CursorTexture As Texture2D) - Dim startPos = New Vector2(Core.windowSize.Width - 270, 66 * Index) + Dim startPos = New Point(Core.windowSize.Width - 270, 66 * Index) - Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 64), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 128), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X + 192), CInt(startPos.Y), 64, 64), Nothing, Color.White, 0.0F, New Vector2(0), SpriteEffects.FlipHorizontally, 0.0F) + Core.SpriteBatch.Draw(t1, New Rectangle(startPos.X, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t2, New Rectangle(startPos.X + 64, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t2, New Rectangle(startPos.X + 128, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t1, New Rectangle(startPos.X + 192, startPos.Y, 64, 64), Nothing, Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) - Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Text, New Vector2(startPos.X + 128 - (FontManager.MainFont.MeasureString(Me.Text).X * 1.4F) / 2, startPos.Y + 15), Color.Black, 0.0F, Vector2.Zero, 1.4F, SpriteEffects.None, 0.0F) + Dim font = FontManager.MainFont + Dim textSize = font.MeasureString(Me.Text).X * 0.7F + Dim position = New Vector2(startPos.X + 128 - textSize, startPos.Y + 15) + Core.SpriteBatch.DrawString(font, Me.Text, position, Color.Black, 0.0F, Vector2.Zero, 1.4F, SpriteEffects.None, 0.0F) If Me.Index <> CursorIndex Then Return - Dim cPosition = New Point(CInt(startPos.X) + 128, CInt(startPos.Y) - 40) + Dim cPosition = startPos + New Point(128, -40) Core.SpriteBatch.Draw(CursorTexture, New Rectangle(cPosition, New Point(64)), Color.White) End Sub @@ -1368,7 +1342,7 @@ Public Class StorageSystemScreen Public Shared Function GetAllBoxPokemon() As List(Of Pokemon) Dim Pokemons = New List(Of Pokemon) Dim Data() = Core.Player.BoxData.SplitAtNewline() - For Each line As String In Data + For Each line In Data If Not line.StartsWith("BOX|") Or line = "" Then Continue For Dim pokeData = line.Remove(0, line.IndexOf("{")) Pokemons.Add(Pokemon.GetPokemonByData(pokeData)) @@ -1380,7 +1354,7 @@ Public Class StorageSystemScreen Dim L = New List(Of Pokemon) For Each Box In Me.Boxes If Not Box.HasPokemon Then Continue For - Dim pokemons = Box.Pokemon.Values.Select(Function(x) x.GetPokemon()) + Dim pokemons = Box.Pokemon.Values.Select(Function(x) x.pokemon) L.AddRange(pokemons.Where(Function(pokemon) (lit AndAlso IsLit(pokemon)) Or Not lit)) Next @@ -1481,17 +1455,20 @@ Public Class StorageSystemFilterScreen If i > Me.Items.Count - 1 Then Continue For Dim Text = Items(i) - Dim startPos = New Vector2(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll)) + Dim startPos = New Point(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll)) - Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 64), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t2, New Rectangle(CInt(startPos.X + 128), CInt(startPos.Y), 64, 64), Color.White) - Core.SpriteBatch.Draw(t1, New Rectangle(CInt(startPos.X + 192), CInt(startPos.Y), 64, 64), Nothing, Color.White, 0.0F, New Vector2(0), SpriteEffects.FlipHorizontally, 0.0F) + Core.SpriteBatch.Draw(t1, New Rectangle(startPos.X, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t2, New Rectangle(startPos.X + 64, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t2, New Rectangle(startPos.X + 128, startPos.Y, 64, 64), Color.White) + Core.SpriteBatch.Draw(t1, New Rectangle(startPos.X + 192, startPos.Y, 64, 64), Nothing, Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) - Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(startPos.X + 128 - (FontManager.MainFont.MeasureString(Text).X * 1.4F) / 2, startPos.Y + 15), Color.Black, 0.0F, Vector2.Zero, 1.4F, SpriteEffects.None, 0.0F) + Dim font = FontManager.MainFont + Dim textSize = font.MeasureString(Text).X * 0.7F + Dim position = New Vector2(startPos.X + 128 - textSize, startPos.Y + 15) + Core.SpriteBatch.DrawString(font, Text, position, Color.Black, 0.0F, Vector2.Zero, 1.4F, SpriteEffects.None, 0.0F) If Me.Index <> i Then Continue For - Dim cPosition = New Point(CInt(startPos.X) + 128, y:=CInt(startPos.Y) - 40) + Dim cPosition = startPos + New Point(128, -40) Dim t = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "") Core.SpriteBatch.Draw(t, New Rectangle(cPosition, New Point(64)), Color.White) Next @@ -1545,8 +1522,8 @@ Public Class StorageSystemFilterScreen Next Dim tones = (A:=New Color(42, 167, 198), B:=New Color(42, 167, 198, 0)) - Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), tones.A, tones.B, False, -1) - Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), tones.B, tones.A, False, -1) + Canvas.DrawGradient(New Rectangle(0, 0, Core.windowSize.Width, 200), tones.A, tones.B, False, -1) + Canvas.DrawGradient(New Rectangle(0, Core.windowSize.Height - 200, Core.windowSize.Width, 200), tones.B, tones.A, False, -1) Core.SpriteBatch.DrawString(FontManager.MainFont, "Configure the filters:", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F) @@ -1575,7 +1552,8 @@ Public Class StorageSystemFilterScreen End Sub Private Function GetFilterText(ByVal filterTypeString As String) As String - Dim filter = Me.Filters.Cast(Of StorageSystemScreen.Filter?).FirstOrDefault(Function(f) f.Value.FilterType.ToString().ToLower() = filterTypeString.ToLower()) + Dim Equals = Function(f As StorageSystemScreen.Filter?) $"{f.Value.FilterType}".ToLower() = filterTypeString.ToLower() + Dim filter = Me.Filters.Cast(Of StorageSystemScreen.Filter?).FirstOrDefault(Equals) Return If(filter.HasValue, filter.Value.FilterValue, "") End Function @@ -1583,7 +1561,7 @@ Public Class StorageSystemFilterScreen Dim cPosition = New Point(520, 100 + Me.Cursor * 96 - 42) Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "") - Core.SpriteBatch.Draw(t, New Rectangle(cPosition, New Point(64, 64)), Color.White) + Core.SpriteBatch.Draw(t, New Rectangle(cPosition, New Point(64)), Color.White) End Sub Private Sub ApplyFilters()