361 lines
15 KiB
VB.net
361 lines
15 KiB
VB.net
Public Class ChoosePokemonScreen
|
|
|
|
Inherits Screen
|
|
|
|
Private PokemonList As New List(Of Pokemon)
|
|
Private AltPokemonList As New List(Of Pokemon)
|
|
|
|
Public Shared Selected As Integer = -1
|
|
Public Shared Exited As Boolean = False
|
|
|
|
Public index As Integer = 0
|
|
Dim MainTexture As Texture2D
|
|
Dim Texture As Texture2D
|
|
Dim yOffset As Single = 0
|
|
|
|
Dim Item As Item
|
|
Dim Title As String = ""
|
|
|
|
Dim used As Boolean = False
|
|
Dim canExit As Boolean = True
|
|
|
|
Public CanChooseFainted As Boolean = True
|
|
Public CanChooseEgg As Boolean = True
|
|
Public CanChooseHMPokemon As Boolean = True
|
|
|
|
Public Delegate Sub DoStuff(ByVal PokeIndex As Integer)
|
|
Dim ChoosePokemon As DoStuff
|
|
Public ExitedSub As DoStuff
|
|
|
|
Public LearnAttack As BattleSystem.Attack
|
|
Public LearnType As Integer = 0
|
|
|
|
Public Sub New(ByVal currentScreen As Screen, ByVal Item As Item, ByVal ChoosePokemon As DoStuff, ByVal Title As String, ByVal canExit As Boolean, ByVal canChooseFainted As Boolean, ByVal canChooseEgg As Boolean, Optional ByVal _pokemonList As List(Of Pokemon) = Nothing)
|
|
Me.PreScreen = currentScreen
|
|
Me.Identification = Identifications.ChoosePokemonScreen
|
|
|
|
Me.MouseVisible = False
|
|
Me.CanChat = Me.PreScreen.CanChat
|
|
Me.CanBePaused = Me.PreScreen.CanBePaused
|
|
|
|
Me.Item = Item
|
|
Me.Title = Title
|
|
Me.canExit = canExit
|
|
|
|
Me.CanChooseEgg = canChooseEgg
|
|
Me.CanChooseFainted = canChooseFainted
|
|
|
|
MainTexture = TextureManager.GetTexture("GUI\Menus\Menu")
|
|
Texture = TextureManager.GetTexture(MainTexture, New Rectangle(0, 0, 48, 48), ContentPackManager.GetTextureResolution("GUI\Menus\Menu"))
|
|
|
|
|
|
Me.index = Player.Temp.PokemonScreenIndex
|
|
Me.ChoosePokemon = ChoosePokemon
|
|
Me.AltPokemonList = _pokemonList
|
|
|
|
GetPokemonList()
|
|
End Sub
|
|
|
|
Public Sub New(ByVal currentScreen As Screen, ByVal Item As Item, ByVal ChoosePokemon As DoStuff, ByVal Title As String, ByVal canExit As Boolean)
|
|
Me.New(currentScreen, Item, ChoosePokemon, Title, canExit, True, True)
|
|
End Sub
|
|
|
|
Public Sub New(ByVal currentScreen As Screen, ByVal Item As Item, ByVal Title As String, ByVal canExit As Boolean)
|
|
Me.New(currentScreen, Item, Nothing, Title, canExit, True, True)
|
|
End Sub
|
|
|
|
Private Sub GetPokemonList()
|
|
Me.PokemonList.Clear()
|
|
If AltPokemonList IsNot Nothing Then
|
|
For Each p As Pokemon In AltPokemonList
|
|
Me.PokemonList.Add(Pokemon.GetPokemonByData(p.GetSaveData()))
|
|
Next
|
|
Else
|
|
For Each p As Pokemon In Core.Player.Pokemons
|
|
Me.PokemonList.Add(Pokemon.GetPokemonByData(p.GetSaveData()))
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub Update()
|
|
TextBox.Update()
|
|
yOffset += 0.45F
|
|
|
|
If TextBox.Showing = False Then
|
|
If used = True Then
|
|
Core.SetScreen(Me.PreScreen)
|
|
Else
|
|
If ChooseBox.Showing = False Then
|
|
If Controls.Dismiss() = True And Me.canExit = True Then
|
|
Exited = True
|
|
Selected = -1
|
|
If Not ExitedSub Is Nothing Then
|
|
used = True
|
|
ExitedSub(index)
|
|
Else
|
|
Core.SetScreen(Me.PreScreen)
|
|
End If
|
|
End If
|
|
If Controls.Accept() = True Then
|
|
ShowMenu()
|
|
End If
|
|
|
|
If Controls.Right(True, False) Then
|
|
index += 1
|
|
End If
|
|
If Controls.Left(True, False) Then
|
|
index -= 1
|
|
End If
|
|
If Controls.Down(True, False, False) Then
|
|
index += 2
|
|
End If
|
|
If Controls.Up(True, False, False) Then
|
|
index -= 2
|
|
End If
|
|
|
|
index = CInt(MathHelper.Clamp(index, 0, Me.PokemonList.Count - 1))
|
|
Else
|
|
ChooseBox.Update(False)
|
|
If Controls.Dismiss() = True Then
|
|
ChooseBox.Showing = False
|
|
End If
|
|
If Controls.Accept() = True Then
|
|
AcceptMenu()
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub AcceptMenu()
|
|
Select Case ChooseBox.index
|
|
Case 0
|
|
If CanChoosePokemon(Me.PokemonList(index)) = True Then
|
|
Player.Temp.PokemonScreenIndex = Me.index
|
|
ChooseBox.Showing = False
|
|
|
|
Selected = index
|
|
|
|
If Not ChoosePokemon Is Nothing Then
|
|
ChoosePokemon(index)
|
|
GetPokemonList()
|
|
End If
|
|
|
|
used = True
|
|
Exited = False
|
|
Else
|
|
ChooseBox.Showing = False
|
|
TextBox.Show("Cannot choose this~Pokémon.")
|
|
End If
|
|
Case 1
|
|
ChooseBox.Showing = False
|
|
Core.SetScreen(New PokemonStatusScreen(Me, index, {}, Me.PokemonList(index), True))
|
|
Case 2
|
|
ChooseBox.Showing = False
|
|
End Select
|
|
End Sub
|
|
|
|
Private Function CanChoosePokemon(ByVal p As Pokemon) As Boolean
|
|
If Me.CanChooseFainted = False Then
|
|
If p.HP <= 0 Or p.Status = Pokemon.StatusProblems.Fainted Then
|
|
Return False
|
|
End If
|
|
End If
|
|
If Me.CanChooseEgg = False Then
|
|
If p.IsEgg() = True Then
|
|
Return False
|
|
End If
|
|
End If
|
|
If Me.CanChooseHMPokemon = False Then
|
|
If p.HasHMMove() = True Then
|
|
Return False
|
|
End If
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Dim MenuID As Integer = 0
|
|
Dim mPressed As Boolean = False
|
|
Private Sub ShowMenu()
|
|
Me.MenuID = 0
|
|
ChooseBox.Show({"Select", Localization.GetString("pokemon_screen_summary"), Localization.GetString("pokemon_screen_back")}, 0, {})
|
|
End Sub
|
|
|
|
Public Overrides Sub Draw()
|
|
Me.PreScreen.Draw()
|
|
|
|
Canvas.DrawImageBorder(Texture, 2, New Rectangle(60, 100, 800, 480))
|
|
Canvas.DrawImageBorder(Texture, 2, New Rectangle(60, 100, 480, 64))
|
|
Core.SpriteBatch.DrawString(FontManager.InGameFont, Me.Title, New Vector2(142, 132), Color.Black)
|
|
Core.SpriteBatch.Draw(Item.Texture, New Rectangle(78, 124, 48, 48), Color.White)
|
|
|
|
If Me.canExit = True Then
|
|
Core.SpriteBatch.DrawString(FontManager.MiniFont, "Press the E key to go back.", New Vector2(640, 580), Color.DarkGray)
|
|
End If
|
|
|
|
For i = 0 To Me.PokemonList.Count - 1
|
|
DrawPokemonTile(i, Me.PokemonList(i))
|
|
Next
|
|
If Me.PokemonList.Count < 6 Then
|
|
For i = Me.PokemonList.Count To 5
|
|
DrawEmptyTile(i)
|
|
Next
|
|
End If
|
|
|
|
If ChooseBox.Showing = True Then
|
|
Dim Position As New Vector2(0, 0)
|
|
Select Case Me.index
|
|
Case 0, 2, 4
|
|
Position = New Vector2(606, 566 - ChooseBox.Options.Count * 48)
|
|
Case 1, 3, 5
|
|
Position = New Vector2(60, 566 - ChooseBox.Options.Count * 48)
|
|
End Select
|
|
ChooseBox.Draw(Position)
|
|
End If
|
|
|
|
TextBox.Draw()
|
|
End Sub
|
|
|
|
Private Sub DrawEmptyTile(ByVal i As Integer)
|
|
Dim p As Vector2
|
|
Select Case i
|
|
Case 0, 2, 4
|
|
p = New Vector2(32, 32 + (48 + 10) * i)
|
|
Case Else
|
|
p = New Vector2(416, 32 + (48 + 10) * (i - 1))
|
|
End Select
|
|
p.X += 80
|
|
p.Y += 180
|
|
|
|
With Core.SpriteBatch
|
|
.Draw(Texture, New Rectangle(CInt(p.X), CInt(p.Y), 32, 96), New Rectangle(0, 0, 16, 48), Color.White)
|
|
For x = p.X + 32 To p.X + 288 Step 32
|
|
.Draw(Texture, New Rectangle(CInt(x), CInt(p.Y), 32, 96), New Rectangle(16, 0, 16, 48), Color.White)
|
|
Next
|
|
.Draw(Texture, New Rectangle(CInt(p.X) + 320, CInt(p.Y), 32, 96), New Rectangle(32, 0, 16, 48), Color.White)
|
|
|
|
.DrawString(FontManager.MiniFont, "EMPTY", New Vector2(CInt(p.X + 72), CInt(p.Y + 18)), Color.Black)
|
|
End With
|
|
End Sub
|
|
|
|
Private Sub DrawPokemonTile(ByVal i As Integer, ByVal Pokemon As Pokemon)
|
|
Dim BorderTexture As Texture2D
|
|
If i = index Then
|
|
If Pokemon.Status = net.Pokemon3D.Game.Pokemon.StatusProblems.Fainted Then
|
|
BorderTexture = TextureManager.GetTexture(MainTexture, New Rectangle(0, 128, 48, 48), ContentPackManager.GetTextureResolution("GUI\Menus\Menu"))
|
|
Else
|
|
BorderTexture = TextureManager.GetTexture(MainTexture, New Rectangle(48, 0, 48, 48), ContentPackManager.GetTextureResolution("GUI\Menus\Menu"))
|
|
End If
|
|
Else
|
|
If Pokemon.Status = net.Pokemon3D.Game.Pokemon.StatusProblems.Fainted Then
|
|
BorderTexture = TextureManager.GetTexture(MainTexture, New Rectangle(48, 48, 48, 48), ContentPackManager.GetTextureResolution("GUI\Menus\Menu"))
|
|
Else
|
|
BorderTexture = TextureManager.GetTexture(MainTexture, New Rectangle(0, 0, 48, 48), ContentPackManager.GetTextureResolution("GUI\Menus\Menu"))
|
|
End If
|
|
End If
|
|
|
|
Dim p As Vector2
|
|
Select Case i
|
|
Case 0, 2, 4
|
|
p = New Vector2(32, 32 + (48 + 10) * i)
|
|
Case Else
|
|
p = New Vector2(416, 32 + (48 + 10) * (i - 1))
|
|
End Select
|
|
p.X += 80
|
|
p.Y += 180
|
|
|
|
With Core.SpriteBatch
|
|
.Draw(BorderTexture, New Rectangle(CInt(p.X), CInt(p.Y), 32, 96), New Rectangle(0, 0, 16, 48), Color.White)
|
|
For x = p.X + 32 To p.X + 288 Step 32
|
|
.Draw(BorderTexture, New Rectangle(CInt(x), CInt(p.Y), 32, 96), New Rectangle(16, 0, 16, 48), Color.White)
|
|
Next
|
|
.Draw(BorderTexture, New Rectangle(CInt(p.X) + 320, CInt(p.Y), 32, 96), New Rectangle(32, 0, 16, 48), Color.White)
|
|
|
|
If Pokemon.IsEgg() = False Then
|
|
Dim barX As Integer = CInt((Pokemon.HP / Pokemon.MaxHP) * 50)
|
|
Dim barRectangle As Rectangle
|
|
Dim barPercentage As Integer = CInt((Pokemon.HP / Pokemon.MaxHP) * 100)
|
|
|
|
If barPercentage >= 50 Then
|
|
barRectangle = New Rectangle(113, 0, 1, 4)
|
|
ElseIf barPercentage < 50 And barPercentage > 10 Then
|
|
barRectangle = New Rectangle(116, 0, 1, 4)
|
|
ElseIf barPercentage <= 10 Then
|
|
barRectangle = New Rectangle(115, 0, 1, 4)
|
|
End If
|
|
For x = 0 To barX - 1
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + (x * 2) + 104), CInt(p.Y + 44), 4, 16), barRectangle, Color.White)
|
|
Next
|
|
|
|
For x = barX To 49
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + (x * 2) + 104), CInt(p.Y + 44), 4, 16), New Rectangle(114, 0, 1, 4), Color.White)
|
|
Next
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + 100), CInt(p.Y + 44), 4, 16), New Rectangle(112, 0, 1, 4), Color.White)
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + 206), CInt(p.Y + 44), 4, 16), New Rectangle(112, 0, 1, 4), Color.White)
|
|
|
|
.DrawString(FontManager.MiniFont, Pokemon.HP & " / " & Pokemon.MaxHP, New Vector2(CInt(p.X + 120), CInt(p.Y + 64)), Color.Black)
|
|
End If
|
|
|
|
Dim offset As Single = CSng(Math.Sin(yOffset))
|
|
If i = index Then
|
|
offset *= 3
|
|
End If
|
|
If Pokemon.Status = net.Pokemon3D.Game.Pokemon.StatusProblems.Fainted Then
|
|
offset = 0
|
|
End If
|
|
|
|
.Draw(Pokemon.GetMenuTexture(), New Rectangle(CInt(p.X + 5), CInt(p.Y + offset + 10), 64, 64), BattleStats.GetStatColor(Pokemon.Status))
|
|
.DrawString(FontManager.MiniFont, Pokemon.GetDisplayName(), New Vector2(CInt(p.X + 72), CInt(p.Y + 18)), Color.Black)
|
|
|
|
If Pokemon.IsEgg() = False Then
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + 72), CInt(p.Y + 46), 26, 12), New Rectangle(96, 10, 13, 6), Color.White)
|
|
|
|
If Pokemon.Gender = net.Pokemon3D.Game.Pokemon.Genders.Male Then
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + FontManager.MiniFont.MeasureString(Pokemon.GetDisplayName()).X + 80), CInt(p.Y + 18), 12, 20), New Rectangle(96, 0, 6, 10), Color.White)
|
|
ElseIf Pokemon.Gender = net.Pokemon3D.Game.Pokemon.Genders.Female Then
|
|
.Draw(MainTexture, New Rectangle(CInt(p.X + FontManager.MiniFont.MeasureString(Pokemon.GetDisplayName()).X + 80), CInt(p.Y + 18), 12, 20), New Rectangle(102, 0, 6, 10), Color.White)
|
|
End If
|
|
End If
|
|
|
|
If Not Pokemon.Item Is Nothing And Pokemon.IsEgg() = False Then
|
|
.Draw(Pokemon.Item.Texture, New Rectangle(CInt(p.X + 40), CInt(p.Y + 42), 24, 24), Color.White)
|
|
End If
|
|
|
|
Dim space As String = ""
|
|
For x = 1 To 3 - Pokemon.Level.ToString().Length
|
|
space &= " "
|
|
Next
|
|
|
|
Dim AttackLable As String = ""
|
|
If LearnType > 0 Then
|
|
AttackLable = "Unable!"
|
|
Select Case LearnType
|
|
Case 1 ' Technical/Hidden Machine
|
|
If CType(moveLearnArg, Items.TechMachine).CanTeach(Pokemon) = "" Then
|
|
AttackLable = "Able!"
|
|
End If
|
|
End Select
|
|
End If
|
|
|
|
If Pokemon.IsEgg() = False Then
|
|
.DrawString(FontManager.MiniFont, "Lv." & space & Pokemon.Level, New Vector2(CInt(p.X + 14), CInt(p.Y + 64)), Color.Black)
|
|
.DrawString(FontManager.MiniFont, AttackLable, New Vector2(CInt(p.X + 230), CInt(p.Y + 64)), Color.Black)
|
|
End If
|
|
|
|
Dim StatusTexture As Texture2D = BattleStats.GetStatImage(Pokemon.Status)
|
|
If Not StatusTexture Is Nothing Then
|
|
Canvas.DrawRectangle(New Rectangle(CInt(p.X + 216), CInt(p.Y + 44), 42, 16), Color.Gray)
|
|
Core.SpriteBatch.Draw(StatusTexture, New Rectangle(CInt(p.X + 218), CInt(p.Y + 46), 38, 12), Color.White)
|
|
End If
|
|
End With
|
|
End Sub
|
|
|
|
Dim moveLearnArg As Object = Nothing
|
|
|
|
Public Sub SetupLearnAttack(ByVal a As BattleSystem.Attack, ByVal learnType As Integer, ByVal arg As Object)
|
|
Me.LearnAttack = a
|
|
Me.LearnType = learnType
|
|
Me.moveLearnArg = arg
|
|
End Sub
|
|
|
|
End Class |