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.
This commit is contained in:
Eagle 2025-07-05 03:29:59 +02:00
parent 59733b10df
commit 504d8a175b

View File

@ -178,14 +178,12 @@ Public Class StorageSystemScreen
If CursorMoving Then If CursorMoving Then
MoveCursor() MoveCursor()
Else Else
If ControllerHandler.ButtonPressed(Buttons.RightTrigger) Or Controls.Right(True, False, True, False, False, False) Then Dim rightInput = ControllerHandler.ButtonPressed(Buttons.RightTrigger) Or Controls.Right(True, False, True, False, False, False)
Me.CurrentBox += 1 Dim leftInput = ControllerHandler.ButtonPressed(Buttons.LeftTrigger) Or Controls.Left(True, False, True, False, False, False)
If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0 If leftInput Then Me.CurrentBox -= 1
End If If rightInput Then Me.CurrentBox += 1
If ControllerHandler.ButtonPressed(Buttons.LeftTrigger) Or Controls.Left(True, False, True, False, False, False) Then If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1
Me.CurrentBox -= 1 If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0
If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1
End If
PressNumberButtons() PressNumberButtons()
@ -215,15 +213,13 @@ Public Class StorageSystemScreen
Private Sub TurnModel() Private Sub TurnModel()
If Controls.ShiftDown("L", False) Then modelRoll -= 0.1F If Controls.ShiftDown("L", False) Then modelRoll -= 0.1F
If Controls.ShiftDown("R", False) Then modelRoll += 0.1F If Controls.ShiftDown("R", False) Then modelRoll += 0.1F
If Not ControllerHandler.ButtonDown(Buttons.RightThumbstickLeft Or Buttons.RightThumbstickRight) Then Return
If ControllerHandler.ButtonDown(Buttons.RightThumbstickLeft Or Buttons.RightThumbstickRight) Then Dim gPadState = GamePad.GetState(PlayerIndex.One)
Dim gPadState = GamePad.GetState(PlayerIndex.One) modelRoll -= gPadState.ThumbSticks.Right.X * 0.1F
modelRoll -= gPadState.ThumbSticks.Right.X * 0.1F
End If
End Sub End Sub
Private Sub PressNumberButtons() 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 If switchTo < 0 Then
Dim keysPressed = KeyBoardHandler.GetPressedKeys.Where(Function(key) key >= Keys.D1 AndAlso key <= Keys.D9) Dim keysPressed = KeyBoardHandler.GetPressedKeys.Where(Function(key) key >= Keys.D1 AndAlso key <= Keys.D9)
switchTo = If(keysPressed.Count < 1, switchTo, keysPressed.Max() - Keys.D1) switchTo = If(keysPressed.Count < 1, switchTo, keysPressed.Max() - Keys.D1)
@ -234,45 +230,38 @@ Public Class StorageSystemScreen
End Sub End Sub
Private Sub ChooseObject() Private Sub ChooseObject()
Select Case CursorPosition.Y If CursorPosition.Y = 0 Then
Case 0 If CursorPosition.X = 0 Then Me.CurrentBox -= 1
Select Case CursorPosition.X If CursorPosition.X = 5 Then Me.CurrentBox += 1
Case 0 If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1
Me.CurrentBox -= 1 If CurrentBox > Me.Boxes.Count - 1 Then CurrentBox = 0
If CurrentBox < 0 Then CurrentBox = Me.Boxes.Count - 1 If CursorPosition.X = 6 Then
Case 1, 2, 3, 4 SelectPokemon()
If Me.BoxChooseMode Then ElseIf CursorPosition.X > 0 AndAlso CursorPosition.X < 5 Then
Me.BoxChooseMode = False If Me.BoxChooseMode Then
Exit Select Me.BoxChooseMode = False
End If Return
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()
End If 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 End Sub
Private Sub ChangemodeMenu() Private Sub ChangemodeMenu()
@ -463,30 +452,30 @@ Public Class StorageSystemScreen
Private Sub CloseScreen() Private Sub CloseScreen()
If Me.BoxChooseMode Then If Me.BoxChooseMode Then
Me.BoxChooseMode = False Me.BoxChooseMode = False
Else Return
If MovingPokemon IsNot Nothing Then End If
If PickupPlace.X = 6 Then If MovingPokemon IsNot Nothing Then
Core.Player.Pokemons.Add(Me.MovingPokemon) If PickupPlace.X = 6 Then
Else Core.Player.Pokemons.Add(Me.MovingPokemon)
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
Else Else
Player.Temp.StorageSystemCursorPosition = Me.CursorPosition Dim id = CInt(PickupPlace.X) + CInt((PickupPlace.Y - 1) * 6)
Player.Temp.PCBoxIndex = Me.CurrentBox
Player.Temp.PCBoxChooseMode = Me.BoxChooseMode
Player.Temp.PCSelectionType = Me.SelectionMode
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 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 If
End Sub End Sub
@ -526,59 +515,50 @@ Public Class StorageSystemScreen
newData.Add($"{boxes.Count - 1 + addedBoxes},{i},{battleBox.Pokemon(i).PokemonData}") newData.Add($"{boxes.Count - 1 + addedBoxes},{i},{battleBox.Pokemon(i).PokemonData}")
Next Next
Dim returnData = "" Return String.Join(Environment.NewLine, newData)
For Each l As String In newData
If returnData <> "" Then returnData &= Environment.NewLine
returnData &= l
Next
Return returnData
End Function End Function
Private Function GetRelativeMousePosition() As Vector2 Private Function GetRelativeMousePosition() As Vector2
For x = 0 To 5 For x = 0 To 5
For y = 0 To 4 For y = 0 To 4
If New Rectangle(50 + x * 100, 200 + y * 84, 64, 64).Contains(MouseHandler.MousePosition) Then Dim boxTile = New Rectangle(50 + x * 100, 200 + y * 84, 64, 64)
Return New Vector2(x, y + 1) If boxTile.Contains(MouseHandler.MousePosition) Then Return New Vector2(x, y + 1)
End If
Next Next
Next Next
For y = 0 To 5 For y = 0 To 5
If New Rectangle(Core.windowSize.Width - 260, y * 100 + 50, 128, 80).Contains(MouseHandler.MousePosition) Then Dim partyTile = New Rectangle(Core.windowSize.Width - 260, y * 100 + 50, 128, 80)
Return New Vector2(6, y) If partyTile.Contains(MouseHandler.MousePosition) Then Return New Vector2(6, y)
End If
Next Next
If New Rectangle(10, 52, 96, 96).Contains(MouseHandler.MousePosition) Then Return New Vector2(0, 0) Dim labelArea = New Rectangle(80, 50, 600, 100)
If New Rectangle(655, 52, 96, 96).Contains(MouseHandler.MousePosition) Then Return New Vector2(5, 0) Dim leftArrowArea = New Rectangle(10, 52, 96, 96)
If New Rectangle(80, 50, 600, 100).Contains(MouseHandler.MousePosition) Then Return New Vector2(1, 0) 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) Return New Vector2(-1)
End Function End Function
Private Function GetAbsoluteCursorPosition(ByVal relPos As Vector2) As Vector2 Private Function GetAbsoluteCursorPosition(ByVal relPos As Vector2) As Vector2
Select Case relPos.Y If relPos.Y = 0 Then
Case 0 If relPos.X < 0 Or relPos.X > 6 Then Return New Vector2()
Select Case relPos.X Dim leftArrow = New Vector2(60, 20)
Case 0 Dim rightArrow = New Vector2(705, 20)
Return New Vector2(60, 20) Dim label = New Vector2(380, 30)
Case 1, 2, 3, 4 Dim party = New Vector2(Core.windowSize.Width - 200, 20)
Return New Vector2(380, 30) Dim positions = {leftArrow, label, label, label, label, rightArrow, party}
Case 5 Return positions(CInt(relPos.X))
Return New Vector2(705, 20) End If
Case 6 If relPos.Y > 0 And relPos.Y < 6 Then
Return New Vector2(Core.windowSize.Width - 200, 20) Dim boxTile = New Vector2(50 + relPos.X * 100 + 42, 200 + (relPos.Y - 1) * 84 - 42)
End Select Dim partyTile = New Vector2(Core.windowSize.Width - 200, 20 + 100 * relPos.Y)
Case 1, 2, 3, 4, 5 If relPos.X >= 0 And relPos.X < 6 Then Return boxTile
Select Case relPos.X If relPos.X = 6 Then Return partyTile
Case 0, 1, 2, 3, 4, 5 End If
Return New Vector2(50 + relPos.X * 100 + 42, 200 + (relPos.Y - 1) * 84 - 42) Return New Vector2()
Case 6
Return New Vector2(Core.windowSize.Width - 200, 20 + 100 * relPos.Y)
End Select
End Select
End Function End Function
Private Function GetBattleBoxID() As Integer 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 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) Dim entries = New List(Of MenuEntry)
@ -621,7 +601,7 @@ Public Class StorageSystemScreen
Dim itemOffset = If(p.Item IsNot Nothing, 1, 0) 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(5 + itemOffset, "Release", False, AddressOf ReleasePokemon))
entries.Add(New MenuEntry(6 + itemOffset, "Cancel", True, Nothing)) entries.Add(New MenuEntry(6 + itemOffset, "Cancel", True, Nothing))
SetupMenu(entries.ToArray(), p.GetDisplayName() & " is selected.") SetupMenu(entries.ToArray(), p.GetDisplayName() & " is selected.")
@ -669,7 +649,7 @@ Public Class StorageSystemScreen
If pokemonExists Then If pokemonExists Then
If Me.MovingPokemon Is Nothing Then If Me.MovingPokemon Is Nothing Then
Me.MovingPokemon = box.Pokemon(id).GetPokemon() Me.MovingPokemon = box.Pokemon(id).pokemon
box.Pokemon.Remove(id) box.Pokemon.Remove(id)
PickupBox = CurrentBox PickupBox = CurrentBox
@ -677,7 +657,7 @@ Public Class StorageSystemScreen
RearrangeBattleBox(box) RearrangeBattleBox(box)
Else Else
Me.MovingPokemon.FullRestore() Me.MovingPokemon.FullRestore()
Dim sPokemon = box.Pokemon(id).GetPokemon() Dim sPokemon = box.Pokemon(id).pokemon
box.Pokemon(id) = New PokemonWrapper(Me.MovingPokemon) ' Me.MovingPokemon box.Pokemon(id) = New PokemonWrapper(Me.MovingPokemon) ' Me.MovingPokemon
Me.MovingPokemon = sPokemon Me.MovingPokemon = sPokemon
End If End If
@ -700,7 +680,7 @@ Public Class StorageSystemScreen
If Core.Player.Pokemons.Count > 5 Then If Core.Player.Pokemons.Count > 5 Then
SetupMenu({New MenuEntry(3, "OK", True, Nothing)}, "Party is full!") SetupMenu({New MenuEntry(3, "OK", True, Nothing)}, "Party is full!")
ElseIf box.Pokemon.ContainsKey(id) Then 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) box.Pokemon.Remove(id)
End If End If
RearrangeBattleBox(box) RearrangeBattleBox(box)
@ -735,30 +715,33 @@ Public Class StorageSystemScreen
Dim box = GetBox(CurrentBox) Dim box = GetBox(CurrentBox)
Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6))
Dim pokemonList = box.GetPokemonList() 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)) Core.SetScreen(New SummaryScreen(Me, pokemonList.ToArray(), partyIndex))
End Sub End Sub
Private Sub TakeItemPokemon() Private Function TakeItemPokemon(Optional logImmediate As Boolean = True) As String
Dim box = GetBox(CurrentBox) Dim box = GetBox(CurrentBox)
Dim id = If(box.IsBattleBox, GetBattleBoxID(), CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)) 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) Dim pokemon = If(CursorPosition.X = 6, Core.Player.Pokemons(CInt(CursorPosition.Y)), box.Pokemon(id).pokemon)
If pokemon.Item Is Nothing Then Return Dim message = ""
If pokemon.Item Is Nothing Then Return message
If pokemon.Item.IsMail And pokemon.Item.AdditionalData <> "" Then 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)) Core.Player.Mails.Add(Items.MailItem.GetMailDataFromString(pokemon.Item.AdditionalData))
Else 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()) Dim ItemID = If(pokemon.Item.IsGameModeItem, pokemon.Item.gmID, pokemon.Item.ID.ToString())
Core.Player.Inventory.AddItem(ItemID, 1) Core.Player.Inventory.AddItem(ItemID, 1)
End If End If
If logImmediate Then Screen.TextBox.Show(message)
pokemon.Item = Nothing pokemon.Item = Nothing
End Sub Return message
End Function
Private Sub ReleasePokemon() Private Sub ReleasePokemon()
Dim hasPokemon = False 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 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 If Not p.IsEgg() Then
Dim e1 = New MenuEntry(3, "No", True, AddressOf SelectPokemon) Dim e1 = New MenuEntry(3, "No", True, AddressOf SelectPokemon)
@ -794,22 +777,10 @@ Public Class StorageSystemScreen
Private Sub ConfirmRelease() Private Sub ConfirmRelease()
Dim id = CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6) Dim id = CInt(CursorPosition.X) + CInt((CursorPosition.Y - 1) * 6)
Dim box = GetBox(CurrentBox) 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 = "" Dim text = ""
If pokemon.Item IsNot Nothing Then If pokemon.Item IsNot Nothing Then text &= Me.TakeItemPokemon(False)
If pokemon.Item.IsMail And pokemon.Item.AdditionalData <> "" Then If text <> "" Then text &= "*"
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 &= "*"
text &= $"Goodbye, {pokemon.GetDisplayName()}!" text &= $"Goodbye, {pokemon.GetDisplayName()}!"
Screen.TextBox.Show(text) Screen.TextBox.Show(text)
@ -842,8 +813,8 @@ Public Class StorageSystemScreen
DrawTopBar() DrawTopBar()
DrawTeamWindow() DrawTeamWindow()
Dim action = If(Me.MenuVisible, CType(AddressOf Me.DrawMenuEntries, Action), AddressOf Me.DrawCursor) Dim Draw = If(Me.MenuVisible, CType(AddressOf Me.DrawMenuEntries, Action), AddressOf Me.DrawCursor)
action() Draw()
TextBox.Draw() TextBox.Draw()
End Sub End Sub
@ -851,7 +822,7 @@ Public Class StorageSystemScreen
Private Sub DrawTopBar() Private Sub DrawTopBar()
Dim boxIndex = Me.CurrentBox Dim boxIndex = Me.CurrentBox
If BoxChooseMode Then 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 End If
Dim b = GetBox(boxIndex) 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)) 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(font, b.Name, labelShadowPosition, Color.Black, 0.0F, Vector2.Zero, 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, 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) Dim textureArea = New Rectangle(0, 16, 16, 16)
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 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 End Sub
Private Sub DrawMainWindow() 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 If BoxChooseMode Then
Canvas.DrawRectangle(Core.windowSize, New Color(220, 220, 220)) Canvas.DrawRectangle(Core.windowSize, backgroundColor)
For x = 0 To 5 For x = 0 To 5
For y = 0 To 4 For y = 0 To 4
Dim id = y * 6 + x Dim id = y * 6 + x
If Me.Boxes.Count - 1 < id Then Continue For 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) Dim empty = New Point(64, 32)
If pCount = 0 Then tCoord = New Point(64, 32) Dim notEmpty = New Point(64, 0)
If pCount = 30 Then tCoord = New Point(32, 32) 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
Next Next
Return Return
End If End If
Dim box = GetBox(CurrentBox) 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 If box.IsBattleBox Then
Canvas.DrawGradient(Core.windowSize, New Color(203, 40, 41), New Color(238, 128, 128), False, -1) 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 For i = 0 To 5
Dim x = i + 2 Dim x = i + 2
@ -906,16 +908,10 @@ Public Class StorageSystemScreen
x -= 2 x -= 2
y += 1 y += 1
End While 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)) Dim area = New Rectangle(TilePosition(x, y), New Point(64))
Canvas.DrawRectangle(area, backgroundColor)
If Not box.Pokemon.ContainsKey(i) Then Continue For If Not box.Pokemon.TryGetValue(i, wrapper) Then Continue For
Dim pokemon = box.Pokemon(i).GetPokemon() Me.DrawPokemonIcon(area, wrapper.pokemon, True)
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)
Next Next
Else Else
Dim xt = box.Background Dim xt = box.Background
@ -930,26 +926,21 @@ Public Class StorageSystemScreen
Next Next
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 x = 0 To 5
For y = 0 To 4 For y = 0 To 4
Dim id = y * 6 + x 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)) Dim area = New Rectangle(TilePosition(x, y), New Point(64))
Canvas.DrawRectangle(area, backgroundColor)
If Not box.Pokemon.ContainsKey(id) Then Continue For If Not box.Pokemon.TryGetValue(id, wrapper) Then Continue For
Dim pokemon = box.Pokemon(id).GetPokemon() Me.DrawPokemonIcon(area, wrapper.pokemon, True)
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)
Next Next
Next Next
Core.SpriteBatch.DrawString(FontManager.MainFont, "Press" & " " & KeyBindings.SpecialKey.ToString & " " & "on the keyboard to filter.", New Vector2(44, 200 + 5 * 84), Color.Black) Dim text = $"Press {KeyBindings.SpecialKey} on the keyboard to filter."
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 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 If
End Sub End Sub
@ -957,44 +948,45 @@ Public Class StorageSystemScreen
Private Sub DrawPokemonStatus() Private Sub DrawPokemonStatus()
If Me.BoxChooseMode And CursorPosition.X < 6 And CursorPosition.Y > 0 Then 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 If box Is Nothing Then Return
Canvas.DrawRectangle(New Rectangle(660, 200, 200, 200), New Color(84, 198, 216, 150)) 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 minLevel = Integer.MaxValue
Dim maxLevel = -1 Dim maxLevel = Integer.MinValue
For x = 0 To 5 For x = 0 To 5
For y = 0 To 4 For y = 0 To 4
Dim id = y * 6 + x Dim id = y * 6 + x
If Not box.Pokemon.ContainsKey(id) Then Continue For Dim wrapper As PokemonWrapper = Nothing
Dim pokemon = box.Pokemon(id).GetPokemon() If Not box.Pokemon.TryGetValue(id, wrapper) Then Continue For
Dim c = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) 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() minLevel = Math.Min(minLevel, pokemon.Level)
Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height)) maxLevel = Math.Max(maxLevel, pokemon.Level)
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
Next 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}" Dim t = $"Box: {box.Name}{Environment.NewLine}"
t &= $"Pokémon: {box.Pokemon.Count} / {maxPokemon}{Environment.NewLine}" t &= $"Pokémon: {box.Pokemon.Count} / {maxPokemon}{Environment.NewLine}"
t &= $"Level: {levelString}" t &= $"Level: {levelString}"
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(667, 417), Color.Black) Dim infoPosition = New Vector2(665, 415)
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(665, 415), Color.White) Dim shadowPosition = infoPosition + New Vector2(2)
End If Core.SpriteBatch.DrawString(FontManager.MainFont, t, shadowPosition, Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, t, infoPosition, Color.White)
Else Else
Dim box = GetBox(CurrentBox) Dim box = GetBox(CurrentBox)
Dim p = Me.MovingPokemon Dim p = Me.MovingPokemon
@ -1005,62 +997,64 @@ Public Class StorageSystemScreen
p = Core.Player.Pokemons(CInt(CursorPosition.Y)) p = Core.Player.Pokemons(CInt(CursorPosition.Y))
End If End If
Else 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 If box.Pokemon.ContainsKey(id) Then
p = box.Pokemon(id).GetPokemon() p = box.Pokemon(id).pokemon
End If End If
End If End If
End If End If
If p IsNot Nothing Then If p Is Nothing Then Return
Dim cArr(0) As Color Dim cArr(0) As Color
Dim texturePath = If(box.IsBattleBox, "GUI\Box\BattleBox", $"GUI\Box\{box.Background}") Dim texturePath = If(box.IsBattleBox, "GUI\Box\BattleBox", $"GUI\Box\{box.Background}")
TextureManager.GetTexture(texturePath, New Rectangle(0, 0, 1, 1), "").GetData(cArr) 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 modelName = p.AnimationName
Dim shinyString = If(p.IsShiny, "Shiny", "Normal") Dim shinyString = If(p.IsShiny, "Shiny", "Normal")
If Core.Player.ShowModelsInBattle AndAlso ModelManager.ModelExist($"Models\Pokemon\{modelName}\{shinyString}") And Not p.IsEgg() Then If Core.Player.ShowModelsInBattle AndAlso ModelManager.ModelExist($"Models\Pokemon\{modelName}\{shinyString}") And Not p.IsEgg() Then
Draw3DModel(p, $"Models\Pokemon\{modelName}\{shinyString}") Draw3DModel(p, $"Models\Pokemon\{modelName}\{shinyString}")
Else Else
GetYOffset(p) GetYOffset(p)
Dim texture = p.GetTexture(True) Dim texture = p.GetTexture(True)
Dim size = New Point(MathHelper.Min(texture.Width * 3, 288), MathHelper.Min(texture.Height * 3, 288)) 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) Dim position = New Point(792 - CInt(size.X / 2), 192 - yOffset)
Core.SpriteBatch.Draw(texture, New Rectangle(position, size), Color.White) 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
End If 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 If
End Sub End Sub
@ -1072,7 +1066,7 @@ Public Class StorageSystemScreen
Dim roll = propList.Item5 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) Core.SpriteBatch.Draw(t, New Rectangle(192, 72, 1200, 680), Color.White)
End Sub 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)) 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 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 Next
Dim halfHeight = CInt(Core.windowSize.Height / 2) 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, cutoutArea, cutoutTextureArea, 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) 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 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 If Core.Player.Pokemons.Count - 1 < i Then Continue For
Dim pokemon = Core.Player.Pokemons(i) Dim pokemon = Core.Player.Pokemons(i)
Dim c As Color = If(IsLit(pokemon), Color.White, New Color(65, 65, 65, 255)) Dim spriteArea = New Rectangle(Core.windowSize.Width - 228, i * 100 + 60, 64, 64)
Me.DrawPokemonIcon(spriteArea, pokemon, True)
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)
Next Next
End Sub End Sub
Private Sub DrawCursor() 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 If Me.MovingPokemon IsNot Nothing Then
Dim pokeTexture = Me.MovingPokemon.GetMenuTexture() Dim spriteArea = New Rectangle(cPosition + New Point(-20, 34), New Point(64))
Dim pokeTextureScale = New Vector2(CSng(32 / pokeTexture.Width), CSng(32 / pokeTexture.Height)) * 2 Me.DrawPokemonIcon(spriteArea, Me.MovingPokemon, True, True)
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
End If 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 End Sub
Private Sub DrawMenuEntries() Private Sub DrawMenuEntries()
@ -1217,22 +1202,6 @@ Public Class StorageSystemScreen
Return GetBox(index, Me.Boxes) Return GetBox(index, Me.Boxes)
End Function 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) Private Sub SetupMenu(ByVal entries() As MenuEntry, ByVal header As String)
Me.MenuEntries.Clear() Me.MenuEntries.Clear()
Me.MenuEntries.AddRange(entries) Me.MenuEntries.AddRange(entries)
@ -1257,12 +1226,14 @@ Public Class StorageSystemScreen
Me._pokemonData = p.GetSaveData() Me._pokemonData = p.GetSaveData()
End Sub End Sub
Public Function GetPokemon() As Pokemon Public ReadOnly Property pokemon As Pokemon
If _loaded Then Return Me._pokemon Get
_loaded = True If _loaded Then Return Me._pokemon
_pokemon = Pokemon.GetPokemonByData(Me._pokemonData) _loaded = True
Return Me._pokemon _pokemon = Pokemon.GetPokemonByData(Me._pokemonData)
End Function Return Me._pokemon
End Get
End Property
Public ReadOnly Property PokemonData() As String Public ReadOnly Property PokemonData() As String
Get Get
@ -1296,7 +1267,7 @@ Public Class StorageSystemScreen
End Property End Property
Public Function GetPokemonList() As List(Of Pokemon) 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 End Function
Public Property IsBattleBox() As Boolean Public Property IsBattleBox() As Boolean
@ -1349,17 +1320,20 @@ Public Class StorageSystemScreen
End Sub End Sub
Public Sub Draw(ByVal CursorIndex As Integer, ByVal CursorTexture As Texture2D) 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(t1, New Rectangle(startPos.X, 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(startPos.X + 64, 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(t2, New Rectangle(startPos.X + 128, 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 + 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 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) Core.SpriteBatch.Draw(CursorTexture, New Rectangle(cPosition, New Point(64)), Color.White)
End Sub End Sub
@ -1368,7 +1342,7 @@ Public Class StorageSystemScreen
Public Shared Function GetAllBoxPokemon() As List(Of Pokemon) Public Shared Function GetAllBoxPokemon() As List(Of Pokemon)
Dim Pokemons = New List(Of Pokemon) Dim Pokemons = New List(Of Pokemon)
Dim Data() = Core.Player.BoxData.SplitAtNewline() 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 If Not line.StartsWith("BOX|") Or line = "" Then Continue For
Dim pokeData = line.Remove(0, line.IndexOf("{")) Dim pokeData = line.Remove(0, line.IndexOf("{"))
Pokemons.Add(Pokemon.GetPokemonByData(pokeData)) Pokemons.Add(Pokemon.GetPokemonByData(pokeData))
@ -1380,7 +1354,7 @@ Public Class StorageSystemScreen
Dim L = New List(Of Pokemon) Dim L = New List(Of Pokemon)
For Each Box In Me.Boxes For Each Box In Me.Boxes
If Not Box.HasPokemon Then Continue For 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)) L.AddRange(pokemons.Where(Function(pokemon) (lit AndAlso IsLit(pokemon)) Or Not lit))
Next Next
@ -1481,17 +1455,20 @@ Public Class StorageSystemFilterScreen
If i > Me.Items.Count - 1 Then Continue For If i > Me.Items.Count - 1 Then Continue For
Dim Text = Items(i) 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(t1, New Rectangle(startPos.X, 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(startPos.X + 64, 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(t2, New Rectangle(startPos.X + 128, 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 + 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 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), "") 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) Core.SpriteBatch.Draw(t, New Rectangle(cPosition, New Point(64)), Color.White)
Next Next
@ -1545,8 +1522,8 @@ Public Class StorageSystemFilterScreen
Next Next
Dim tones = (A:=New Color(42, 167, 198), B:=New Color(42, 167, 198, 0)) 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, 0, 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, 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) 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 End Sub
Private Function GetFilterText(ByVal filterTypeString As String) As String 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, "") Return If(filter.HasValue, filter.Value.FilterValue, "")
End Function End Function
@ -1583,7 +1561,7 @@ Public Class StorageSystemFilterScreen
Dim cPosition = New Point(520, 100 + Me.Cursor * 96 - 42) 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), "") 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 End Sub
Private Sub ApplyFilters() Private Sub ApplyFilters()