P3D-Legacy/P3D/Screens/Pokedex/PokedexScreen.vb

1816 lines
82 KiB
VB.net

Public Class PokedexSelectScreen
Inherits Screen
Dim texture As Texture2D
Dim Profiles As New List(Of PokedexProfile)
Dim Cursor As Integer = 0
Public Sub New(ByVal currentScreen As Screen)
Me.Identification = Identifications.PokedexScreen
Me.PreScreen = currentScreen
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
Me.MouseVisible = True
Me.CanMuteMusic = True
Me.CanBePaused = True
For Each p As Pokedex In Core.Player.Pokedexes
If p.IsActivated = True Then
Me.Profiles.Add(New PokedexProfile With {.Pokedex = p, .Obtained = p.Obtained, .Seen = p.Seen})
End If
Next
Me.AchievePokedexEmblems()
End Sub
Private Sub AchievePokedexEmblems()
' Eevee:
Dim eevee() As Integer = {134, 135, 136, 196, 197, 470, 471, 700}
Dim hasEevee As Boolean = True
For Each e As Integer In eevee
If Pokedex.GetEntryType(Core.Player.PokedexData, e) < 2 Then
hasEevee = False
Exit For
End If
Next
If hasEevee = True Then
GameJolt.Emblem.AchieveEmblem("eevee")
End If
' Pokédex:
If Core.Player.IsGameJoltSave = True Then
If Me.Profiles(0).Pokedex.Obtained >= Me.Profiles(0).Pokedex.Count Then
GameJolt.Emblem.AchieveEmblem("pokedex")
End If
End If
End Sub
Structure PokedexProfile
Dim Obtained As Integer
Dim Seen As Integer
Dim Pokedex As Pokedex
End Structure
Public Overrides Sub Draw()
Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216))
For y = -64 To Core.windowSize.Height Step 64
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White)
Next
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1)
Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Select a Pokédex", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F)
For i = 0 To Me.Profiles.Count
If i = Me.Profiles.Count Then
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + i * 96, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 6, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Habitat-Dex", New Vector2(120, 116 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Else
Dim p As Pokedex = Me.Profiles(i).Pokedex
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + i * 96, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 6, 100 + i * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Core.SpriteBatch.DrawString(FontManager.MainFont, p.Name, New Vector2(120, 116 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Core.SpriteBatch.DrawString(FontManager.MainFont, Me.Profiles(i).Obtained.ToString(), New Vector2(460, 116 + i * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
If Me.Profiles(i).Obtained >= Me.Profiles(i).Pokedex.Count Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(430, 122 + i * 96, 20, 20), Color.White)
Else
If Me.Profiles(i).Seen + Me.Profiles(i).Obtained >= Me.Profiles(i).Pokedex.Count Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(430, 122 + i * 96, 20, 20), Color.White)
End If
End If
End If
Next
DrawCursor()
End Sub
Private Sub DrawCursor()
Dim cPosition As Vector2 = New Vector2(380, 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(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
End Sub
Public Overrides Sub Update()
If Controls.Up(True, True, True, True, True, True) = True Then
Me.Cursor -= 1
If Controls.ShiftDown() = True Then
Me.Cursor -= 4
End If
End If
If Controls.Down(True, True, True, True, True, True) = True Then
Me.Cursor += 1
If Controls.ShiftDown() = True Then
Me.Cursor += 4
End If
End If
Me.Cursor = Me.Cursor.Clamp(0, Me.Profiles.Count)
If Controls.Accept(True, False, False) = True Then
For i = 0 To Me.Profiles.Count
If New Rectangle(100, 100 + i * 96, 64 * 7, 64).Contains(MouseHandler.MousePosition) = True Then
If i = Cursor Then
If Me.Cursor = Me.Profiles.Count Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexHabitatScreen(Me))
Else
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexScreen(Me, Me.Profiles(Me.Cursor), Nothing))
End If
Else
Cursor = i
End If
End If
Next
End If
If Controls.Accept(False, True, True) = True Then
If Me.Cursor = Me.Profiles.Count Then
Core.SetScreen(New PokedexHabitatScreen(Me))
SoundManager.PlaySound("select")
Else
Core.SetScreen(New PokedexScreen(Me, Me.Profiles(Me.Cursor), Nothing))
SoundManager.PlaySound("select")
End If
End If
If Controls.Dismiss(True, True, True) = True Then
SoundManager.PlaySound("select")
Core.SetScreen(New TransitionScreen(Core.CurrentScreen, Me.PreScreen, Color.White, False))
End If
PokedexScreen.TileOffset += 1
If PokedexScreen.TileOffset >= 64 Then
PokedexScreen.TileOffset = 0
End If
End Sub
End Class
Public Class PokedexHabitatScreen
Inherits Screen
Dim texture As Texture2D
Dim HabitatList As New List(Of PokedexScreen.Habitat)
Dim Cursor As Integer = 0
Dim Scroll As Integer = 0
Public Sub New(ByVal currentScreen As Screen)
Me.Identification = Identifications.PokedexHabitatScreen
Me.PreScreen = currentScreen
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
Me.MouseVisible = True
Me.CanMuteMusic = True
Me.CanBePaused = True
For Each file As String In System.IO.Directory.GetFiles(GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath, "*.*", IO.SearchOption.AllDirectories)
If file.EndsWith(".poke") = True Then
Dim fileName As String = file.Remove(0, (GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath & "\").Length - 1)
Dim newHabitat As New PokedexScreen.Habitat(file)
Dim exists As Boolean = False
For Each h As PokedexScreen.Habitat In Me.HabitatList
If h.Name.ToLower() = newHabitat.Name.ToLower() Then
exists = True
h.Merge(newHabitat)
Exit For
End If
Next
If exists = False AndAlso Core.Player.PokeFiles.Contains(fileName) = True Then
HabitatList.Add(New PokedexScreen.Habitat(file))
End If
End If
Next
Me.HabitatList = (From h As PokedexScreen.Habitat In Me.HabitatList Order By h.Name Ascending).ToList()
End Sub
Public Overrides Sub Draw()
Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216))
For y = -64 To Core.windowSize.Height Step 64
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White)
Next
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1)
Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Select a Habitat", New Vector2(100, 24), Color.White, 0.0F, Vector2.Zero, 2.0F, SpriteEffects.None, 0.0F)
For i = Scroll To Scroll + 5
If i <= Me.HabitatList.Count - 1 Then
Dim p As Integer = i - Scroll
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 100 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 100 + p * 96, 64 * 8, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 9, 100 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Core.SpriteBatch.Draw(HabitatList(i).Texture, New Rectangle(120, 108 + p * 96, 64, 48), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, HabitatList(i).Name, New Vector2(200, 116 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Dim t As String = HabitatList(i).PokemonCaught.ToString() & "/" & HabitatList(i).PokemonList.Count
Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(680 - CSng((FontManager.MainFont.MeasureString(t).X * 1.25F) / 2.0F), 116 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Dim progressTexture As Texture2D = Me.HabitatList(i).ProgressTexture
If Not progressTexture Is Nothing Then
Core.SpriteBatch.Draw(progressTexture, New Rectangle(CInt(650 - CSng((FontManager.MainFont.MeasureString(t).X * 1.25F) / 2.0F)), 121 + p * 96, 20, 20), Color.White)
End If
End If
Next
DrawCursor()
End Sub
Private Sub DrawCursor()
Dim cPosition As Vector2 = New Vector2(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(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
End Sub
Public Overrides Sub Update()
If Controls.Down(True, True, True, True, True, True) = True Then
Me.Cursor += 1
If Controls.ShiftDown() = True Then
Me.Cursor += 4
End If
End If
If Controls.Up(True, True, True, True, True, True) = True Then
Me.Cursor -= 1
If Controls.ShiftDown() = True Then
Me.Cursor -= 4
End If
End If
While Me.Cursor > 5
Me.Cursor -= 1
Me.Scroll += 1
End While
While Me.Cursor < 0
Me.Cursor += 1
Me.Scroll -= 1
End While
If Me.HabitatList.Count < 7 Then
Me.Scroll = 0
Else
Me.Scroll = Me.Scroll.Clamp(0, Me.HabitatList.Count - 6)
End If
If Me.HabitatList.Count < 6 Then
Me.Cursor = Me.Cursor.Clamp(0, Me.HabitatList.Count - 1)
Else
Me.Cursor = Me.Cursor.Clamp(0, 5)
End If
If Me.HabitatList.Count > 0 Then
If Controls.Accept(True, False, False) = True Then
For i = Scroll To Scroll + 5
If i <= Me.HabitatList.Count - 1 Then
If New Rectangle(100, 100 + (i - Scroll) * 96, 640, 64).Contains(MouseHandler.MousePosition) = True Then
If i = Cursor + Scroll Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll)))
Else
Cursor = i - Scroll
End If
End If
End If
Next
End If
If Controls.Accept(False, True, True) = True Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll)))
End If
End If
If Controls.Dismiss(True, True, True) = True Then
Core.SetScreen(Me.PreScreen)
SoundManager.PlaySound("select")
End If
PokedexScreen.TileOffset += 1
If PokedexScreen.TileOffset >= 64 Then
PokedexScreen.TileOffset = 0
End If
End Sub
End Class
Public Class PokedexScreen
Inherits Screen
Public Shared TileOffset As Integer = 0
Public Enum OrderType
Numeric
Weigth
Height
Alphabetically
End Enum
Public Enum FilterType
Type1
Type2
Name
End Enum
Structure Filter
Public FilterType As FilterType
Public FilterValue As String
End Structure
Dim texture As Texture2D
Public ReverseOrder As Boolean = False
Public Order As OrderType = OrderType.Numeric
Public Filters As New List(Of Filter)
Public Profile As PokedexSelectScreen.PokedexProfile
Public CHabitat As Habitat = Nothing
Dim Scroll As Integer = 0
Dim Cursor As New Vector2(0)
Shared TempPokemonStorage As New Dictionary(Of Integer, Pokemon)
Shared TempPokemonDexType As New Dictionary(Of Integer, Integer)
Dim PokemonList As New List(Of Pokemon)
Dim menu As SelectMenu
Public Sub New(ByVal currentScreen As Screen, ByVal Profile As PokedexSelectScreen.PokedexProfile, ByVal Habitat As Habitat)
Me.Identification = Identifications.PokedexScreen
Me.PreScreen = currentScreen
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
Me.Profile = Profile
Me.CHabitat = Habitat
Me.MouseVisible = True
Me.CanMuteMusic = True
Me.CanBePaused = True
TempPokemonStorage.Clear()
TempPokemonDexType.Clear()
SetList()
Me.menu = New SelectMenu({""}.ToList(), 0, Nothing, 0)
Me.menu.Visible = False
End Sub
Private Sub SetList()
PokemonList.Clear()
TempPokemonStorage.Clear()
TempPokemonDexType.Clear()
Dim neededEntryType As Integer = 0
Select Case Me.Order
Case OrderType.Alphabetically
neededEntryType = 1
Case OrderType.Height, OrderType.Weigth
neededEntryType = 2
End Select
For Each f As Filter In Me.Filters
Dim thisType As Integer = 0
If f.FilterType = FilterType.Name Then
thisType = 1
Else
thisType = 2
End If
If thisType > neededEntryType Then
neededEntryType = thisType
End If
Next
Dim pokeSearchList As New List(Of Integer)
If CHabitat Is Nothing Then
' Add any external Pokémon if specified to do so:
If Profile.Pokedex.IncludeExternalPokemon = True Then
For i = 1 To Pokedex.POKEMONCOUNT
If Me.Profile.Pokedex.HasPokemon(i, False) = False Then
If Pokedex.GetEntryType(Core.Player.PokedexData, i) > 0 Then
Profile.Pokedex.PokemonList.Add(Profile.Pokedex.PokemonList.Count + 1, i)
End If
End If
Next
End If
For Each i As Integer In Profile.Pokedex.PokemonList.Values
pokeSearchList.Add(i)
Next
Else
For Each i As Integer In CHabitat.PokemonList
pokeSearchList.Add(i)
Next
End If
For i = 0 To pokeSearchList.Count - 1
If Pokemon.PokemonDataExists(pokeSearchList(i)) = True Then
Dim p As Pokemon = Pokemon.GetPokemonByID(pokeSearchList(i))
If Pokedex.GetEntryType(Core.Player.PokedexData, p.Number) >= neededEntryType Then
Dim valid As Boolean = True
For Each F As Filter In Me.Filters
Select Case F.FilterType
Case FilterType.Name
If p.GetName().ToUpper().StartsWith(F.FilterValue.ToUpper()) = False Then
valid = False
Exit For
End If
Case FilterType.Type1
If p.Type1.Type <> New Element(F.FilterValue).Type Then
valid = False
Exit For
End If
Case FilterType.Type2
If p.Type2.Type <> New Element(F.FilterValue).Type Then
valid = False
Exit For
End If
End Select
Next
If valid = True Then
Me.PokemonList.Add(p)
End If
End If
End If
Next
Select Case Me.Order
Case OrderType.Numeric
If CHabitat Is Nothing Then
If Me.ReverseOrder = True Then
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By Profile.Pokedex.GetPlace(p.Number) Descending).ToList()
Else
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By Profile.Pokedex.GetPlace(p.Number) Ascending).ToList()
End If
Else
If Me.ReverseOrder = True Then
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.Number Descending).ToList()
Else
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.Number Ascending).ToList()
End If
End If
Case OrderType.Alphabetically
If Me.ReverseOrder = True Then
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.GetName() Descending).ToList()
Else
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.GetName() Ascending).ToList()
End If
Case OrderType.Weigth
If Me.ReverseOrder = True Then
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Weight Descending).ToList()
Else
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Weight Ascending).ToList()
End If
Case OrderType.Height
If Me.ReverseOrder = True Then
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Height Descending).ToList()
Else
Me.PokemonList = (From p As Pokemon In Me.PokemonList Order By p.PokedexEntry.Height Ascending).ToList()
End If
End Select
Me.ClampCursor()
End Sub
Public Overrides Sub Draw()
Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216))
For y = -64 To Core.windowSize.Height Step 64
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White)
Next
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1)
Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1)
Canvas.DrawRectangle(New Rectangle(50, 30, 564, 90), New Color(42, 167, 198, 150))
If CHabitat Is Nothing Then
Core.SpriteBatch.DrawString(FontManager.MainFont, Profile.Pokedex.Name, New Vector2(60, 55), Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Seen: " & Environment.NewLine & Environment.NewLine & "Obtained: ", New Vector2(420, 45), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, Profile.Seen + Profile.Obtained & Environment.NewLine & Environment.NewLine & Profile.Obtained, New Vector2(540, 45), Color.Black)
Else
Core.SpriteBatch.DrawString(FontManager.MainFont, CHabitat.Name, New Vector2(60, 80), Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F)
Core.SpriteBatch.Draw(CHabitat.Texture, New Rectangle(60, 32, 64, 48), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Available: " & Environment.NewLine & Environment.NewLine & "Obtained: ", New Vector2(420, 45), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, CHabitat.PokemonList.Count & Environment.NewLine & Environment.NewLine & CHabitat.PokemonCaught, New Vector2(540, 45), Color.Black)
Dim progressTexture As Texture2D = Me.CHabitat.ProgressTexture
If Not progressTexture Is Nothing Then
Core.SpriteBatch.Draw(progressTexture, New Rectangle(134, 46, 20, 20), Color.White)
End If
End If
If PokemonList.Count > 0 Then
For x = 0 To 5
For y = 0 To 4
Dim id As Integer = (y + Scroll) * 6 + x
If id <= Me.PokemonList.Count - 1 Then
If Not CHabitat Is Nothing OrElse Me.Profile.Pokedex.OriginalCount >= Profile.Pokedex.GetPlace(Me.PokemonList(id).Number) Then
Canvas.DrawRectangle(New Rectangle(50 + x * 100, 140 + y * 100, 64, 92), New Color(42, 167, 198, 150))
Else
Canvas.DrawBorder(3, New Rectangle(50 + x * 100, 140 + y * 100, 64, 92), New Color(42, 167, 198, 150))
End If
Dim p As Pokemon = Nothing
Dim entryType As Integer = 0
If TempPokemonStorage.ContainsKey(id + 1) = False Then
TempPokemonStorage.Add(id + 1, Me.PokemonList(id))
TempPokemonDexType.Add(id + 1, Pokedex.GetEntryType(Core.Player.PokedexData, Me.PokemonList(id).Number))
End If
p = TempPokemonStorage(id + 1)
entryType = TempPokemonDexType(id + 1)
If Cursor = New Vector2(x, y) Then
DrawPokemonPreview(p)
End If
Dim c As Color = Color.Gray
If entryType > 0 Then
If entryType > 1 Then
c = Color.White
End If
Dim pokeTexture = p.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(50 + x * 100, 140 + y * 100, pokeTexture.Width * 2, 64), c)
End If
Dim no As String = "000"
If CHabitat Is Nothing Then
no = Profile.Pokedex.GetPlace(p.Number).ToString()
Else
no = p.Number.ToString()
End If
While no.Length < 3
no = "0" & no
End While
Core.SpriteBatch.DrawString(FontManager.MainFont, no, New Vector2(50 + x * 100 + CInt(32 - FontManager.MainFont.MeasureString(no).X / 2), 206 + y * 100), Color.White)
End If
Next
Next
Else
Canvas.DrawGradient(New Rectangle(50, 300, 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1)
Canvas.DrawRectangle(New Rectangle(130, 300, 404, 90), New Color(42, 167, 198, 150))
Canvas.DrawGradient(New Rectangle(534, 300, 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1)
Core.SpriteBatch.DrawString(FontManager.MainFont, "No search results.", New Vector2(50 + CInt(564 / 2) - CInt(FontManager.MainFont.MeasureString("No search results.").X / 2), 330), Color.White)
End If
Canvas.DrawRectangle(New Rectangle(670, 30, 400, 90), New Color(42, 167, 198, 150))
Dim orderText As String = "Numeric"
Select Case Me.Order
Case OrderType.Alphabetically
orderText = "A-Z"
Case OrderType.Height
orderText = "Height"
Case OrderType.Weigth
orderText = "Weight"
End Select
Dim filterText As String = "None"
If Filters.Count > 0 Then
filterText = ""
For Each f As Filter In Me.Filters
If filterText <> "" Then
filterText &= ", "
End If
Select Case f.FilterType
Case FilterType.Name
filterText &= "Name"
Case FilterType.Type1
filterText &= "Type 1"
Case FilterType.Type2
filterText &= "Type 2"
End Select
Next
End If
Core.SpriteBatch.DrawString(FontManager.MainFont, "Order:" & Environment.NewLine & "Filter:" & Environment.NewLine & "Press Q on the keyboard to search.", New Vector2(685, 45), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, orderText & Environment.NewLine & filterText, New Vector2(790, 45), Color.Black)
If menu.Visible = True Then
menu.Draw()
Else
If PokemonList.Count > 0 Then
DrawCursor()
End If
End If
End Sub
Private Function GetPlace(ByVal PokemonNumber As Integer) As Integer
For i = 0 To PokemonList.Count - 1
If PokemonList(i).Number = PokemonNumber Then
Return i + 1
End If
Next
Return -1
End Function
Private Sub DrawPokemonPreview(ByVal p As Pokemon)
Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, p.Number)
For i = 0 To 4
Canvas.DrawGradient(New Rectangle(650, 300 + i * 40, 50, 2), New Color(255, 255, 255, 10), New Color(255, 255, 255, 255), True, -1)
Canvas.DrawRectangle(New Rectangle(700, 300 + i * 40, 350, 2), Color.White)
Canvas.DrawGradient(New Rectangle(1050, 300 + i * 40, 50, 2), New Color(255, 255, 255, 255), New Color(255, 255, 255, 10), True, -1)
Next
Dim no As String = "000"
If CHabitat Is Nothing Then
no = Profile.Pokedex.GetPlace(p.Number).ToString()
Else
no = p.Number.ToString()
End If
While no.Length < 3
no = "0" & no
End While
If entryType = 0 Then
Core.SpriteBatch.DrawString(FontManager.MainFont, "???" & Environment.NewLine & Environment.NewLine & "No. " & no, New Vector2(830, 200), Color.White)
Else
Core.SpriteBatch.DrawString(FontManager.MainFont, p.GetName() & Environment.NewLine & Environment.NewLine & "No. " & no, New Vector2(830, 200), Color.White)
Core.SpriteBatch.Draw(p.GetTexture(True), New Rectangle(670, 140, 128, 128), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, "SPECIES", New Vector2(680, 310), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "TYPE", New Vector2(680, 350), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "HEIGHT", New Vector2(680, 390), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "WEIGHT", New Vector2(680, 430), Color.Black)
Canvas.DrawRectangle(New Rectangle(670, 480, 400, 152), New Color(42, 167, 198, 150))
If Not CHabitat Is Nothing Then
Dim encounterTypes As New List(Of Integer)
For Each ec As PokedexScreen.Habitat.EncounterPokemon In CHabitat.ObtainTypeList
If ec.PokemonID = p.Number Then
If encounterTypes.Contains(ec.EncounterType) = False Then
encounterTypes.Add(ec.EncounterType)
End If
End If
Next
For i = 0 To encounterTypes.Count - 1
Dim encounterType As Integer = encounterTypes(i)
Core.SpriteBatch.Draw(PokedexScreen.Habitat.GetEncounterTypeImage(encounterType), New Rectangle(824 + i * 32, 266, 32, 32), Color.White)
Next
End If
If entryType > 1 Then
Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Species, New Vector2(850, 310), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "", New Vector2(850, 350), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Height & " m", New Vector2(850, 390), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Weight & " kg", New Vector2(850, 430), Color.Black)
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(850, 356, 48, 16), p.Type1.GetElementImage(), Color.White)
If p.Type2.Type <> Element.Types.Blank Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(900, 356, 48, 16), p.Type2.GetElementImage(), Color.White)
End If
Core.SpriteBatch.DrawString(FontManager.MainFont, p.PokedexEntry.Text.CropStringToWidth(FontManager.MainFont, 380), New Vector2(680, 490), Color.Black)
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(915, 242, 20, 20), Color.White)
Else
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? Pokémon", New Vector2(850, 310), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "???", New Vector2(850, 350), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? m", New Vector2(850, 390), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? kg", New Vector2(850, 430), Color.Black)
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(915, 242, 20, 20), Color.White)
End If
End If
End Sub
Private Sub DrawCursor()
Dim cPosition As Vector2 = New Vector2(50 + Me.Cursor.X * 100 + 42, 140 + Me.Cursor.Y * 100 - 42)
Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "")
Core.SpriteBatch.Draw(t, New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
End Sub
Public Overrides Sub Update()
If menu.Visible = True Then
menu.Update()
Else
If Controls.Left(True, True, False, True, True, True) = True Then
Me.Cursor.X -= 1
End If
If Controls.Right(True, True, False, True, True, True) = True Then
Me.Cursor.X += 1
End If
If Controls.Up(True, True, True, True, True, True) = True Then
Me.Cursor.Y -= 1
If Controls.ShiftDown() = True Then
Me.Cursor.Y -= 4
End If
End If
If Controls.Down(True, True, True, True, True, True) = True Then
Me.Cursor.Y += 1
If Controls.ShiftDown() = True Then
Me.Cursor.Y += 4
End If
End If
If Cursor.X > 5 Then
Cursor.X = 0
Cursor.Y += 1
End If
If Cursor.X < 0 Then
Cursor.X = 5
Cursor.Y -= 1
End If
While Cursor.Y < 0
Me.Cursor.Y += 1
Me.Scroll -= 1
End While
While Cursor.Y > 4
Me.Cursor.Y -= 1
Me.Scroll += 1
End While
If Controls.Accept(True, False, False) = True Then
For i = 0 To 29
Dim x As Integer = i
Dim y As Integer = 0
While x > 5
x -= 6
y += 1
End While
If New Rectangle(50 + x * 100, 140 + y * 100, 64, 92).Contains(MouseHandler.MousePosition) = True Then
If Cursor.X + Cursor.Y * 6 = i Then
If TempPokemonDexType(CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1)) > 0 Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexViewScreen(Me, TempPokemonStorage(CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1)), False))
End If
Else
Cursor.X = x
Cursor.Y = y
End If
End If
Next
End If
ClampCursor()
If Controls.Accept(False, True, True) = True Then
If TempPokemonDexType(CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1)) > 0 Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexViewScreen(Me, TempPokemonStorage(CInt((Cursor.Y + Scroll) * 6 + Cursor.X + 1)), False))
End If
End If
If KeyBoardHandler.KeyPressed(KeyBindings.SpecialKey) = True Or ControllerHandler.ButtonPressed(Buttons.Y) = True Then
Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3)
End If
If Controls.Dismiss(True, True, True) = True Then
If Me.Filters.Count > 0 Or Me.Order <> OrderType.Numeric Or Me.ReverseOrder = True Then
SoundManager.PlaySound("select")
Me.Filters.Clear()
Me.ReverseOrder = False
Me.Order = OrderType.Numeric
Me.SetList()
Else
SoundManager.PlaySound("select")
Core.SetScreen(Me.PreScreen)
End If
End If
End If
TileOffset += 1
If TileOffset >= 64 Then
TileOffset = 0
End If
End Sub
Private Sub ClampCursor()
Dim linesCount As Integer = CInt(Math.Ceiling(Me.PokemonList.Count / 6))
If linesCount < 6 Then
Me.Scroll = 0
Else
Me.Scroll = Me.Scroll.Clamp(0, linesCount - 5)
End If
Dim maxY As Integer = linesCount - Scroll - 1
Me.Cursor.Y = Me.Cursor.Y.Clamp(0, maxY)
If Me.Cursor.Y = maxY Then
Dim maxX As Integer = Me.PokemonList.Count
While maxX > 6
maxX -= 6
End While
Me.Cursor.X = Me.Cursor.X.Clamp(0, maxX - 1)
End If
End Sub
Public Overrides Sub ChangeTo()
TempPokemonDexType.Clear()
TempPokemonStorage.Clear()
End Sub
#Region "Menus"
Private Sub SelectMenu1(ByVal s As SelectMenu)
Select Case s.SelectedItem.ToLower()
Case "order"
Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2)
Case "filter"
Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4)
Case "reset"
Me.Filters.Clear()
Me.ReverseOrder = False
Me.Order = OrderType.Numeric
Me.SetList()
End Select
End Sub
Private Sub SelectMenuFilter(ByVal s As SelectMenu)
Select Case s.SelectedItem.ToLower()
Case "name"
Me.menu = New SelectMenu({"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Back"}.ToList(), 0, AddressOf SelectMenuNameFilter, -1)
Case "type1"
Me.menu = New SelectMenu({"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy", "Blank", "Back"}.ToList(), 0, AddressOf SelectMenuType1Filter, -1)
Case "type2"
Me.menu = New SelectMenu({"Normal", "Fire", "Fighting", "Water", "Flying", "Grass", "Poison", "Electric", "Ground", "Psychic", "Rock", "Ice", "Bug", "Dragon", "Ghost", "Dark", "Steel", "Fairy", "Blank", "Back"}.ToList(), 0, AddressOf SelectMenuType2Filter, -1)
Case "clear"
Me.Filters.Clear()
Me.SetList()
Case "back"
Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3)
End Select
End Sub
Private Sub SelectMenuType1Filter(ByVal s As SelectMenu)
If s.SelectedItem <> "Back" Then
For i = 0 To Filters.Count - 1
If Filters(i).FilterType = FilterType.Type1 Then
Filters.RemoveAt(i)
Exit For
End If
Next
Filters.Add(New Filter With {.FilterType = FilterType.Type1, .FilterValue = s.SelectedItem})
SetList()
Else
Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4)
End If
End Sub
Private Sub SelectMenuType2Filter(ByVal s As SelectMenu)
If s.SelectedItem <> "Back" Then
For i = 0 To Filters.Count - 1
If Filters(i).FilterType = FilterType.Type2 Then
Filters.RemoveAt(i)
Exit For
End If
Next
Filters.Add(New Filter With {.FilterType = FilterType.Type2, .FilterValue = s.SelectedItem})
SetList()
Else
Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4)
End If
End Sub
Private Sub SelectMenuNameFilter(ByVal s As SelectMenu)
If s.SelectedItem <> "Back" Then
For i = 0 To Filters.Count - 1
If Filters(i).FilterType = FilterType.Name Then
Filters.RemoveAt(i)
Exit For
End If
Next
Filters.Add(New Filter With {.FilterType = FilterType.Name, .FilterValue = s.SelectedItem})
SetList()
Else
Me.menu = New SelectMenu({"Name", "Type1", "Type2", "Clear", "Back"}.ToList(), 0, AddressOf SelectMenuFilter, 4)
End If
End Sub
Private Sub SelectMenuOrder(ByVal s As SelectMenu)
Select Case s.SelectedItem.ToLower()
Case "type"
Me.menu = New SelectMenu({"Numeric", "A-Z", "Weight", "Height", "Back"}.ToList(), 0, AddressOf SelectMenuOrderType, 4)
Case "reverse: " & Me.ReverseOrder.ToString().ToLower()
Me.ReverseOrder = Not Me.ReverseOrder
Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2)
Me.SetList()
Case "back"
Me.menu = New SelectMenu({"Order", "Filter", "Reset", "Back"}.ToList(), 0, AddressOf SelectMenu1, 3)
End Select
End Sub
Private Sub SelectMenuOrderType(ByVal s As SelectMenu)
Select Case s.SelectedItem.ToLower()
Case "numeric"
Me.Order = OrderType.Numeric
Me.SetList()
Case "a-z"
Me.Order = OrderType.Alphabetically
Me.SetList()
Case "weight"
Me.Order = OrderType.Weigth
Me.SetList()
Case "height"
Me.Order = OrderType.Height
Me.SetList()
Case "back"
Me.menu = New SelectMenu({"Type", "Reverse: " & Me.ReverseOrder.ToString(), "Back"}.ToList(), 0, AddressOf SelectMenuOrder, 2)
End Select
End Sub
#End Region
Private Class SelectMenu
Dim Items As New List(Of String)
Dim Index As Integer = 0
Public Delegate Sub ClickEvent(ByVal s As SelectMenu)
Dim ClickHandler As ClickEvent = Nothing
Dim BackIndex As Integer = 0
Public Visible As Boolean = True
Public Scroll As Integer = 0
Dim t1 As Texture2D
Dim t2 As Texture2D
Public Sub New(ByVal Items As List(Of String), ByVal Index As Integer, ByVal ClickHandle As ClickEvent, ByVal BackIndex As Integer)
Me.Items = Items
Me.Index = Index
Me.ClickHandler = ClickHandle
Me.BackIndex = BackIndex
If Me.BackIndex < 0 Then
Me.BackIndex = Me.Items.Count + Me.BackIndex
End If
Me.Visible = True
t1 = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(16, 16, 16, 16), "")
t2 = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(32, 16, 16, 16), "")
End Sub
Public Sub Update()
If Visible = True Then
If Controls.Up(True, True, True, True, True, True) = True Then
Me.Index -= 1
End If
If Controls.Down(True, True, True, True, True, True) = True Then
Me.Index += 1
End If
Me.Index = Me.Index.Clamp(0, Me.Items.Count - 1)
For i = Scroll To Me.Scroll + 8
If i <= Me.Items.Count - 1 Then
If Controls.Accept(True, False, False) = True And i = Me.Index And New Rectangle(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True Or
Controls.Accept(False, True, True) = True And i = Me.Index Or Controls.Dismiss(True, True, True) = True And Me.BackIndex = Me.Index Then
If Not ClickHandler Is Nothing Then
ClickHandler(Me)
SoundManager.PlaySound("select")
End If
Me.Visible = False
End If
If Controls.Dismiss(True, True, True) = True Then
Me.Index = Me.BackIndex
If Not ClickHandler Is Nothing Then
ClickHandler(Me)
SoundManager.PlaySound("select")
End If
Me.Visible = False
End If
If New Rectangle(Core.windowSize.Width - 270, 66 * ((i + 1) - Scroll), 256, 64).Contains(MouseHandler.MousePosition) = True And Controls.Accept(True, False, False) = True Then
Me.Index = i
End If
End If
Next
If Index - Scroll > 8 Then
Scroll = Index - 8
End If
If Index - Scroll < 0 Then
Scroll = Index
End If
End If
End Sub
Public Sub Draw()
If Visible = True Then
For i = Scroll To Me.Scroll + 8
If i <= Me.Items.Count - 1 Then
Dim Text As String = Items(i)
Dim startPos As New Vector2(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.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)
If Me.Index = i Then
Dim cPosition As Vector2 = New Vector2(startPos.X + 128, startPos.Y - 40)
Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "")
Core.SpriteBatch.Draw(t, New Rectangle(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
End If
End If
Next
End If
End Sub
Public ReadOnly Property SelectedItem() As String
Get
Return Items(Me.Index)
End Get
End Property
End Class
Public Class Habitat
Public Enum HabitatTypes As Integer
Grassland = 0
Forest = 1
WatersEdge = 2
Sea = 3
Cave = 4
Mountain = 5
RoughTerrain = 6
City = 7
End Enum
Public Structure EncounterPokemon
Public PokemonID As Integer
Public EncounterType As Integer
Public Daytimes() As Integer
End Structure
Dim MergeData() As String = {} ' Temporary data storage if needs to merge.
Public File As String = ""
Public Name As String = ""
Public HabitatType As HabitatTypes = HabitatTypes.Grassland
Public PokemonList As New List(Of Integer)
Public ObtainTypeList As New List(Of EncounterPokemon)
Public PokemonCaught As Integer = 0
Public PokemonSeen As Integer = 0
Public Sub New(ByVal file As String)
Security.FileValidation.CheckFileValid(file, False, "PokedexScreen.vb")
Dim data() As String = System.IO.File.ReadAllLines(file)
Me.MergeData = data
Me.File = file
For Each line As String In data
If line.ToLower().StartsWith("name=") = True Then
Me.Name = line.Remove(0, 5)
ElseIf line.ToLower().StartsWith("type=") = True Then
Dim arg As String = line.Remove(0, 5)
Select Case arg.ToLower()
Case "grassland"
Me.HabitatType = HabitatTypes.Grassland
Case "forest"
Me.HabitatType = HabitatTypes.Forest
Case "watersedge"
Me.HabitatType = HabitatTypes.WatersEdge
Case "sea"
Me.HabitatType = HabitatTypes.Sea
Case "cave"
Me.HabitatType = HabitatTypes.Cave
Case "mountain"
Me.HabitatType = HabitatTypes.Mountain
Case "roughterrain"
Me.HabitatType = HabitatTypes.RoughTerrain
Case "city"
Me.HabitatType = HabitatTypes.City
End Select
ElseIf line.StartsWith("{") = True And line.EndsWith("}") = True Then
Dim pokemonData() As String = line.Remove(line.Length - 1, 1).Remove(0, 1).Split(CChar("|"))
If Me.PokemonList.Contains(CInt(pokemonData(1))) = False Then
Me.PokemonList.Add(CInt(pokemonData(1)))
Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, CInt(pokemonData(1)))
If entryType > 0 Then
Me.PokemonSeen += 1
End If
If entryType > 1 Then
Me.PokemonCaught += 1
End If
End If
Dim daytimesData As List(Of String) = pokemonData(3).Split(CChar(",")).ToList()
Dim dayTimes As New List(Of Integer)
For Each s As String In daytimesData
If StringHelper.IsNumeric(s) = True Then
Dim i As Integer = CInt(s)
If i > 0 Then
dayTimes.Add(i)
Else
dayTimes.Clear()
Exit For
End If
End If
Next
Me.ObtainTypeList.Add(New EncounterPokemon With {.PokemonID = CInt(pokemonData(1)), .EncounterType = CInt(pokemonData(0)), .Daytimes = dayTimes.ToArray()})
End If
Next
If Me.Name = "" Then
Me.Name = System.IO.Path.GetFileNameWithoutExtension(file)
Me.Name = Me.Name(0).ToString().ToUpper() & Me.Name.Remove(0, 1)
End If
End Sub
Public ReadOnly Property Texture() As Texture2D
Get
Dim x As Integer = CInt(Me.HabitatType)
Dim y As Integer = 0
While x > 1
x -= 2
y += 1
End While
Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(x * 64, y * 48, 64, 48), "")
End Get
End Property
Public Shared Function GetEncounterTypeImage(ByVal encounterType As Integer) As Texture2D
Dim x As Integer = 0
Dim y As Integer = 4
Select Case encounterType
Case 0
x = 0
y = 3
Case 1
x = 0
y = 4
Case 2
x = 1
y = 0
Case 3
x = 0
y = 0
Case 31
x = 0
y = 1
Case 32
x = 0
y = 2
End Select
Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(128 + x * 32, y * 32, 32, 32), "")
End Function
Public ReadOnly Property ProgressTexture() As Texture2D
Get
If Me.PokemonCaught >= Me.PokemonList.Count Then
Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), "")
Else
If Me.PokemonSeen >= Me.PokemonList.Count Then
Return TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), "")
End If
End If
Return Nothing
End Get
End Property
Public Sub Merge(ByVal h As Habitat)
Dim data() As String = h.MergeData
For Each line As String In data
If line.StartsWith("{") = True And line.EndsWith("}") = True Then
Dim pokemonData() As String = line.Remove(line.Length - 1, 1).Remove(0, 1).Split(CChar("|"))
If Me.PokemonList.Contains(CInt(pokemonData(1))) = False Then
Me.PokemonList.Add(CInt(pokemonData(1)))
Dim entryType As Integer = Pokedex.GetEntryType(Core.Player.PokedexData, CInt(pokemonData(1)))
If entryType > 0 Then
Me.PokemonSeen += 1
End If
If entryType > 1 Then
Me.PokemonCaught += 1
End If
End If
Me.ObtainTypeList.Add(New EncounterPokemon With {.PokemonID = CInt(pokemonData(1)), .EncounterType = CInt(pokemonData(0))})
End If
Next
End Sub
Public Function HasPokemon(ByVal pokemonNumber As Integer) As Boolean
Return Me.PokemonList.Contains(pokemonNumber)
End Function
End Class
End Class
Public Class PokedexViewScreen
Inherits Screen
Dim Pokemon As Pokemon
Dim texture As Texture2D
Dim Page As Integer = 0
Dim EntryType As Integer = 0
Dim _transitionOut As Boolean = False
Dim yOffset As Integer = 0
Dim FrontView As Boolean = True
Dim EvolutionLine As EvolutionLinePokemon = Nothing
Dim minimumLevel As Integer = 0
Dim maximumLevel As Integer = 0
Dim HabitatList As New List(Of PokedexScreen.Habitat)
Class EvolutionLinePokemon
Public Level As Integer = 0
Public PokemonID As Integer = 0
Public Evolutions As New List(Of EvolutionLinePokemon)
Public Devolution As EvolutionLinePokemon = Nothing
Public Pokemon As Pokemon = Nothing
Public Sub New(ByVal Level As Integer, ByVal pokemonID As Integer, ByVal vS As PokedexViewScreen, ByVal fromEvolution As Integer)
Me.Level = Level
Me.PokemonID = pokemonID
Me.Pokemon = Pokemon.GetPokemonByID(Me.PokemonID)
If Me.Pokemon.EvolutionConditions.Count > 0 Then
Dim evolutions As New List(Of Integer)
For Each ev As EvolutionCondition In Me.Pokemon.EvolutionConditions
If evolutions.Contains(ev.Evolution) = False And fromEvolution <> ev.Evolution Then
evolutions.Add(ev.Evolution)
End If
Next
For Each ev As Integer In evolutions
If vS.maximumLevel < Me.Level + 1 Then
vS.maximumLevel = Me.Level + 1
End If
Me.Evolutions.Add(New EvolutionLinePokemon(Me.Level + 1, ev, vS, -1))
Next
End If
End Sub
End Class
''' <summary>
''' Creates a new instance of this class.
''' </summary>
''' <param name="currentScreen">The screen that is currently active.</param>
''' <param name="Pokemon">The Pokémon to display.</param>
''' <param name="transitionOut">If the screen should fade out when closed.</param>
Public Sub New(ByVal currentScreen As Screen, ByVal Pokemon As Pokemon, ByVal transitionOut As Boolean)
Me.PreScreen = currentScreen
Me.Identification = Identifications.PokedexViewScreen
Me.texture = TextureManager.GetTexture("GUI\Menus\General")
Me.MouseVisible = True
Me.CanMuteMusic = True
Me.CanBePaused = True
Me._transitionOut = transitionOut
Me.Pokemon = Pokemon
Me.EntryType = Pokedex.GetEntryType(Core.Player.PokedexData, Me.Pokemon.Number)
Me.GetYOffset()
Me.FillEvolutionLine()
Me.FillHabitats()
End Sub
Private Sub FillEvolutionLine()
Dim p As New EvolutionLinePokemon(0, Me.Pokemon.Number, Me, -1)
If p.Pokemon.Devolution > 0 Then
Dim devP As Pokemon = P3D.Pokemon.GetPokemonByID(p.Pokemon.Devolution)
Dim devR As EvolutionLinePokemon = Nothing
Dim level As Integer = -1
p.Devolution = New EvolutionLinePokemon(level, devP.Number, Me, p.Pokemon.Number)
Logger.Debug("Add devolution level 1: " & devP.Number)
devR = p.Devolution
While devR.Pokemon.Devolution > 0
devP = P3D.Pokemon.GetPokemonByID(devR.Pokemon.Devolution)
level -= 1
devR.Devolution = New EvolutionLinePokemon(level, devP.Number, Me, devR.Pokemon.Number)
devR = devR.Devolution
Logger.Debug("Add devolution level " & (level * -1) & ": " & devP.Number)
End While
minimumLevel = level
End If
Logger.Debug("Minimum level: " & minimumLevel & "; maximum level: " & maximumLevel)
Me.EvolutionLine = p
End Sub
Private Sub FillHabitats()
For Each file As String In System.IO.Directory.GetFiles(GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath, "*.*", IO.SearchOption.AllDirectories)
If file.EndsWith(".poke") = True Then
Dim fileName As String = file.Remove(0, (GameController.GamePath & GameModeManager.ActiveGameMode.PokeFilePath & "\").Length - 1)
Dim newHabitat As New PokedexScreen.Habitat(file)
Dim exists As Boolean = False
For Each h As PokedexScreen.Habitat In Me.HabitatList
If h.Name.ToLower() = newHabitat.Name.ToLower() Then
exists = True
h.Merge(newHabitat)
Exit For
End If
Next
If exists = False AndAlso Core.Player.PokeFiles.Contains(fileName) = True Then
HabitatList.Add(New PokedexScreen.Habitat(file))
End If
End If
Next
Me.HabitatList = (From h As PokedexScreen.Habitat In Me.HabitatList Order By h.Name Ascending).ToList()
For i = 0 To Me.HabitatList.Count - 1
If i <= Me.HabitatList.Count - 1 Then
If Me.HabitatList(i).HasPokemon(Me.Pokemon.Number) = False Then
Me.HabitatList.RemoveAt(i)
i -= 1
End If
End If
Next
End Sub
Private Sub GetYOffset()
Dim t As Texture2D = Pokemon.GetTexture(FrontView)
Me.yOffset = -1
Dim cArr(t.Width * t.Height - 1) As Color
t.GetData(cArr)
For y = 0 To t.Height - 1
For x = 0 To t.Width - 1
If cArr(x + y * t.Height) <> Color.Transparent Then
Me.yOffset = y
Exit For
End If
Next
If Me.yOffset <> -1 Then
Exit For
End If
Next
End Sub
Public Overrides Sub Draw()
Canvas.DrawRectangle(Core.windowSize, New Color(84, 198, 216))
For y = -64 To Core.windowSize.Height Step 64
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 128, y + PokedexScreen.TileOffset, 128, 64), New Rectangle(48, 0, 16, 16), Color.White)
Next
Canvas.DrawGradient(New Rectangle(0, 0, CInt(Core.windowSize.Width), 200), New Color(42, 167, 198), New Color(42, 167, 198, 0), False, -1)
Canvas.DrawGradient(New Rectangle(0, CInt(Core.windowSize.Height - 200), CInt(Core.windowSize.Width), 200), New Color(42, 167, 198, 0), New Color(42, 167, 198), False, -1)
Select Case Me.Page
Case 0
DrawPage1()
Case 1
DrawPage2()
Case 2
DrawPage3()
End Select
Core.SpriteBatch.Draw(Me.texture, New Rectangle(20, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64, 20, 64 * 8, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64 * 9, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64, 20, 64 * 5, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(20 + 64 * 6, 20, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Dim pokeTexture = Pokemon.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(28, 20, pokeTexture.Width * 2, 64), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.GetName(), New Vector2(100, 36), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
If EntryType = 1 Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 170, 10, 10), ""), New Rectangle(64 * 6 + 40, 42, 20, 20), Color.White)
ElseIf EntryType > 1 Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\pokedexhabitat", New Rectangle(160, 160, 10, 10), ""), New Rectangle(64 * 6 + 40, 42, 20, 20), Color.White)
End If
If Me.mLineLength = 100 Then
If Me.Page = 0 Or Me.Page = 1 Then
Core.SpriteBatch.Draw(Me.texture, New Rectangle(Core.windowSize.Width - 70, CInt(Core.windowSize.Height / 2 - 32), 64, 64), New Rectangle(0, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
End If
If Me.Page = 1 Or Me.Page = 2 Then
Core.SpriteBatch.Draw(Me.texture, New Rectangle(6, CInt(Core.windowSize.Height / 2 - 32), 64, 64), New Rectangle(0, 16, 16, 16), Color.White)
End If
End If
Select Case Me.Page
Case 0
Core.SpriteBatch.DrawString(FontManager.MainFont, "Details", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Case 1
Core.SpriteBatch.DrawString(FontManager.MainFont, "Habitat", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Case 2
Core.SpriteBatch.DrawString(FontManager.MainFont, "Evolution", New Vector2(480, 36), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
End Select
End Sub
Dim fadeMainImage As Integer = 0
Dim vLineLength As Integer = 1
Dim mLineLength As Integer = 1
Dim playedCry As Boolean = False
Private Sub DrawPage1()
Dim v As Vector2 = Core.GetMiddlePosition(New Size(512, 512))
Core.SpriteBatch.Draw(Pokemon.GetTexture(Me.FrontView), New Rectangle(CInt(v.X), CInt(v.Y) - yOffset * 2, 512, 512), New Color(255, 255, 255, fadeMainImage))
If fadeMainImage = 255 Then
Dim mV As Vector2 = Core.GetMiddlePosition(New Size(0, 0))
Canvas.DrawLine(Color.Black, New Vector2(mV.X + 40, mV.Y - 40), New Vector2(mV.X + vLineLength, mV.Y - vLineLength), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X + 40, mV.Y + 40), New Vector2(mV.X + vLineLength, mV.Y + vLineLength), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X - 40, mV.Y - 40), New Vector2(mV.X - vLineLength, mV.Y - vLineLength), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X - 40, mV.Y + 40), New Vector2(mV.X - vLineLength, mV.Y + vLineLength), 2)
If vLineLength = 140 Then
Canvas.DrawLine(Color.Black, New Vector2(mV.X + 140, mV.Y - 140), New Vector2(mV.X + (140 + mLineLength), mV.Y - 140), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X + 139, mV.Y + 140), New Vector2(mV.X + (140 + mLineLength), mV.Y + 140), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X - 139, mV.Y - 140), New Vector2(mV.X - (140 + mLineLength), mV.Y - 140), 2)
Canvas.DrawLine(Color.Black, New Vector2(mV.X - 139, mV.Y + 140), New Vector2(mV.X - (140 + mLineLength), mV.Y + 140), 2)
End If
If mLineLength = 100 Then
If EntryType > 1 Then
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Height & " m", New Vector2(mV.X + 250, mV.Y - 152), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Weight & " kg", New Vector2(mV.X + 250, mV.Y + 128), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.PokedexEntry.Species, New Vector2(mV.X - 248 - FontManager.MainFont.MeasureString(Pokemon.PokedexEntry.Species).X, mV.Y - 152), Color.Black)
If Pokemon.Type2.Type <> Element.Types.Blank Then
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 450), CInt(mV.Y + 123), 96, 32), Pokemon.Type1.GetElementImage(), Color.White)
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 350), CInt(mV.Y + 123), 96, 32), Pokemon.Type2.GetElementImage(), Color.White)
Else
Core.SpriteBatch.Draw(TextureManager.GetTexture("GUI\Menus\Types"), New Rectangle(CInt(mV.X - 350), CInt(mV.Y + 123), 96, 32), Pokemon.Type1.GetElementImage(), Color.White)
End If
Else
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? m", New Vector2(mV.X + 250, mV.Y - 152), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? kg", New Vector2(mV.X + 250, mV.Y + 128), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "??? Pokémon", New Vector2(mV.X - 248 - FontManager.MainFont.MeasureString("??? Pokémon").X, mV.Y - 152), Color.Black)
Core.SpriteBatch.DrawString(FontManager.MainFont, "???", New Vector2(mV.X - 248 - FontManager.MainFont.MeasureString("???").X, mV.Y + 128), Color.Black)
End If
End If
End If
End Sub
Dim Scroll As Integer = 0
Dim Cursor As Integer = 0
Private Sub DrawPage2()
If Me.HabitatList.Count = 0 Then
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) - 282, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1)
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2) - 202, CInt(Core.windowSize.Height / 2 - 45), 404, 90), New Color(42, 167, 198, 150))
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) + 202, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1)
Core.SpriteBatch.DrawString(FontManager.MainFont, "Area Unknown.", New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.MainFont.MeasureString("Area Unknown.").X / 2), CInt(Core.windowSize.Height / 2 - 15)), Color.White)
Else
For i = Scroll To Scroll + 4
If i <= Me.HabitatList.Count - 1 Then
Dim p As Integer = i - Scroll
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100, 160 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64, 160 + p * 96, 64 * 9, 64), New Rectangle(32, 16, 16, 16), Color.White)
Core.SpriteBatch.Draw(Me.texture, New Rectangle(100 + 64 * 10, 160 + p * 96, 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
Core.SpriteBatch.Draw(HabitatList(i).Texture, New Rectangle(120, 168 + p * 96, 64, 48), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, HabitatList(i).Name, New Vector2(200, 176 + p * 96), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
Dim encounterTypes As New List(Of Integer)
For j = 0 To HabitatList(i).ObtainTypeList.Count - 1
If HabitatList(i).ObtainTypeList(j).PokemonID = Me.Pokemon.Number And encounterTypes.Contains(HabitatList(i).ObtainTypeList(j).EncounterType) = False Then
encounterTypes.Add(HabitatList(i).ObtainTypeList(j).EncounterType)
End If
Next
For j = 0 To encounterTypes.Count - 1
Core.SpriteBatch.Draw(PokedexScreen.Habitat.GetEncounterTypeImage(encounterTypes(j)), New Rectangle(560 + j * 40, 176 + p * 96, 32, 32), Color.White)
Next
End If
Next
DrawCursor()
End If
End Sub
Private Sub DrawCursor()
Dim cPosition As Vector2 = New Vector2(520, 160 + 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(CInt(cPosition.X), CInt(cPosition.Y), 64, 64), Color.White)
End Sub
Dim scale As Single = 2.0F
Private Sub DrawPage3()
If EvolutionLine.Devolution Is Nothing And EvolutionLine.Evolutions.Count = 0 Then
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) - 282, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(84, 198, 216), New Color(42, 167, 198, 150), True, -1)
Canvas.DrawRectangle(New Rectangle(CInt(Core.windowSize.Width / 2) - 202, CInt(Core.windowSize.Height / 2 - 45), 404, 90), New Color(42, 167, 198, 150))
Canvas.DrawGradient(New Rectangle(CInt(Core.windowSize.Width / 2) + 202, CInt(Core.windowSize.Height / 2 - 45), 80, 90), New Color(42, 167, 198, 150), New Color(84, 198, 216), True, -1)
Core.SpriteBatch.DrawString(FontManager.MainFont, Pokemon.GetName() & " doesn't evolve.", New Vector2(CInt(Core.windowSize.Width / 2) - CInt(FontManager.MainFont.MeasureString(Pokemon.GetName() & " doesn't evolve.").X / 2), CInt(Core.windowSize.Height / 2 - 15)), Color.White)
Else
Dim connections As New List(Of String)
Dim levels As New Dictionary(Of Integer, Integer)
For i = minimumLevel To maximumLevel
levels.Add(i, 1)
Next
If Not EvolutionLine.Devolution Is Nothing Then
connections.Add("-1_0|" & EvolutionLine.Devolution.PokemonID.ToString() & "-" & EvolutionLine.PokemonID.ToString())
levels(-1) += 1
For Each evolution As EvolutionLinePokemon In EvolutionLine.Devolution.Evolutions
connections.Add("-1_0|" & EvolutionLine.Devolution.PokemonID.ToString() & "-" & evolution.PokemonID.ToString())
levels(0) += 1
For Each eevolution As EvolutionLinePokemon In evolution.Evolutions
connections.Add("0_1|" & evolution.PokemonID.ToString() & "-" & eevolution.PokemonID.ToString())
levels(1) += 1
Next
Next
If Not EvolutionLine.Devolution.Devolution Is Nothing Then
connections.Add("-2_-1|" & EvolutionLine.Devolution.Devolution.PokemonID.ToString() & "-" & EvolutionLine.Devolution.PokemonID.ToString())
levels(-2) += 1
End If
End If
For Each evolution As EvolutionLinePokemon In EvolutionLine.Evolutions
connections.Add("0_1|" & EvolutionLine.PokemonID.ToString() & "-" & evolution.PokemonID.ToString())
levels(1) += 1
For Each eevolution As EvolutionLinePokemon In evolution.Evolutions
connections.Add("1_2|" & evolution.PokemonID.ToString() & "-" & eevolution.PokemonID.ToString())
levels(2) += 1
Next
Next
Dim levelDraws As New Dictionary(Of Integer, Integer)
Dim PokemonDraws As New Dictionary(Of Integer, Integer)
For i = 0 To connections.Count - 1
Dim c As String = connections(i).Split(CChar("|"))(1)
Dim mv As Vector2 = Core.GetMiddlePosition(New Size(CInt(64 * scale), CInt(64 * scale)))
Dim p1 As Integer = CInt(c.Remove(c.IndexOf("-")))
Dim level1 As Integer = CInt(connections(i).Split(CChar("|"))(0).Split(CChar("_"))(0))
Dim level1Count As Integer = levels(level1)
Dim pokemon1 As Pokemon = Pokemon.GetPokemonByID(p1)
If levelDraws.ContainsKey(level1) = False Then
levelDraws.Add(level1, 0)
End If
If PokemonDraws.ContainsKey(p1) = False Then
levelDraws(level1) += 1
PokemonDraws.Add(p1, levelDraws(level1))
End If
Dim level1Offset As Integer = CInt(GetOffset(level1Count, PokemonDraws(p1)) * (64 * scale))
Dim p2 As Integer = CInt(c.Remove(0, c.IndexOf("-") + 1))
Dim level2 As Integer = CInt(connections(i).Split(CChar("|"))(0).Split(CChar("_"))(1))
Dim level2Count As Integer = levels(level2)
Dim pokemon2 As Pokemon = Pokemon.GetPokemonByID(p2)
If levelDraws.ContainsKey(level2) = False Then
levelDraws.Add(level2, 0)
End If
If PokemonDraws.ContainsKey(p2) = False Then
levelDraws(level2) += 1
PokemonDraws.Add(p2, levelDraws(level2))
End If
Dim level2Offset As Integer = CInt(GetOffset(level2Count, PokemonDraws(p2)) * (64 * scale))
Canvas.DrawLine(Color.Black, New Vector2(mv.X + (level1 * (128 * scale)) + (scale * 32), mv.Y + (scale * 32) + level1Offset), New Vector2(mv.X + (level2 * (128 * scale)) + (scale * 32), mv.Y + (scale * 32) + level2Offset), 2)
If Pokedex.GetEntryType(Core.Player.PokedexData, pokemon1.Number) = 0 Then
Dim pokeTexture = pokemon1.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(mv.X + (level1 * (128 * scale))) - CInt((pokeTexture.Width - 32) * scale), CInt(mv.Y + level1Offset), CInt(pokeTexture.Width * 2 * scale), CInt(64 * scale)), Color.Black)
Else
Dim pokeTexture = pokemon1.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(mv.X + (level1 * (128 * scale))) - CInt((pokeTexture.Width - 32) * scale), CInt(mv.Y + level1Offset), CInt(pokeTexture.Width * 2 * scale), CInt(64 * scale)), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, pokemon1.GetName(), New Vector2(CInt(mv.X + (level1 * (128 * scale))) + (32 * scale) - (FontManager.MainFont.MeasureString(pokemon1.GetName()).X / 2 * CSng(scale / 2)), CInt(mv.Y + level1Offset) + (58 * scale)), Color.Black, 0.0F, Vector2.Zero, CSng(scale / 2), SpriteEffects.None, 0.0F)
End If
If Pokedex.GetEntryType(Core.Player.PokedexData, pokemon2.Number) = 0 Then
Dim pokeTexture = pokemon2.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(mv.X + (level2 * (128 * scale))) - CInt((pokeTexture.Width - 32) * scale), CInt(mv.Y + level2Offset), CInt(pokeTexture.Width * 2 * scale), CInt(64 * scale)), Color.Black)
Else
Dim pokeTexture = pokemon2.GetMenuTexture()
Core.SpriteBatch.Draw(pokeTexture, New Rectangle(CInt(mv.X + (level2 * (128 * scale))) - CInt((pokeTexture.Width - 32) * scale), CInt(mv.Y + level2Offset), CInt(pokeTexture.Width * 2 * scale), CInt(64 * scale)), Color.White)
Core.SpriteBatch.DrawString(FontManager.MainFont, pokemon2.GetName(), New Vector2(CInt(mv.X + (level2 * (128 * scale))) + (32 * scale) - (FontManager.MainFont.MeasureString(pokemon2.GetName()).X / 2 * CSng(scale / 2)), CInt(mv.Y + level2Offset) + (58 * scale)), Color.Black, 0.0F, Vector2.Zero, CSng(scale / 2), SpriteEffects.None, 0.0F)
End If
Next
End If
End Sub
Private Function GetOffset(ByVal count As Integer, ByVal c As Integer) As Double
If count = 0 Then
Return 0
End If
If count Mod 2 = 1 Then
' count = 7, c = 7
Dim middle As Integer = CInt(Math.Ceiling(count / 2))
' middle = 4
Dim stat As Integer = c - middle
' stat = 3
Return stat
Else
' count = 4, c = 1
Dim middle As Double = count / 2
' middle = 2
Dim stat As Double = c - middle - 0.5D
' stat = -1.5
Return stat
End If
End Function
Public Overrides Sub Update()
If Controls.Dismiss(True, True, True) = True Then
If Me._transitionOut = True Then
SoundManager.PlaySound("select")
Core.SetScreen(New TransitionScreen(Me, Me.PreScreen, Color.White, False))
Else
SoundManager.PlaySound("select")
Core.SetScreen(Me.PreScreen)
End If
End If
UpdateIntro()
If mLineLength = 100 Then
If Controls.Right(True, True, False, True, True, True) = True Then
Me.Page += 1
End If
If Controls.Left(True, True, False, True, True, True) = True Then
Me.Page -= 1
End If
If Controls.Accept(True, False, False) = True Then
If Me.Page = 0 Or Me.Page = 1 Then
If New Rectangle(Core.windowSize.Width - 70, CInt(Core.windowSize.Height / 2 - 32), 64, 64).Contains(MouseHandler.MousePosition) = True Then
SoundManager.PlaySound("select")
Me.Page += 1
End If
End If
If Me.Page = 1 Or Me.Page = 2 Then
SoundManager.PlaySound("select")
If New Rectangle(6, CInt(Core.windowSize.Height / 2 - 32), 64, 64).Contains(MouseHandler.MousePosition) = True Then
Me.Page -= 1
End If
End If
End If
Me.Page = Me.Page.Clamp(0, 2)
Select Case Me.Page
Case 0
UpdatePage1()
Case 1
UpdatePage2()
Case 2
UpdatePage3()
End Select
End If
PokedexScreen.TileOffset += 1
If PokedexScreen.TileOffset >= 64 Then
PokedexScreen.TileOffset = 0
End If
End Sub
Private Sub UpdateIntro()
If fadeMainImage < 255 Then
fadeMainImage += 10
If fadeMainImage >= 255 Then
fadeMainImage = 255
If playedCry = False Then
playedCry = True
SoundManager.PlayPokemonCry(Pokemon.Number)
End If
End If
Else
If vLineLength < 140 Then
vLineLength += 10
If vLineLength >= 140 Then
vLineLength = 140
End If
Else
If mLineLength < 100 Then
mLineLength += 10
If mLineLength >= 100 Then
mLineLength = 100
End If
End If
End If
End If
End Sub
Private Sub UpdatePage1()
If Controls.Accept(True, True, True) = True Then
SoundManager.PlaySound("select")
Me.FrontView = Not Me.FrontView
Me.GetYOffset()
End If
End Sub
Private Sub UpdatePage2()
If Me.HabitatList.Count > 0 Then
If Controls.Down(True, True, True, True, True, True) = True Then
Me.Cursor += 1
End If
If Controls.Up(True, True, True, True, True, True) = True Then
Me.Cursor -= 1
End If
If Me.Cursor > 4 Then
Me.Cursor = 4
Me.Scroll += 1
End If
If Me.Cursor < 0 Then
Me.Cursor = 0
Me.Scroll -= 1
End If
If Me.HabitatList.Count < 6 Then
Me.Scroll = 0
Else
Me.Scroll = Me.Scroll.Clamp(0, Me.HabitatList.Count - 5)
End If
If Me.HabitatList.Count < 5 Then
Me.Cursor = Me.Cursor.Clamp(0, Me.HabitatList.Count - 1)
Else
Me.Cursor = Me.Cursor.Clamp(0, 4)
End If
If Controls.Accept(True, False, False) = True Then
For i = Scroll To Scroll + 4
If i <= Me.HabitatList.Count - 1 Then
If New Rectangle(100, 160 + (i - Scroll) * 96, 640, 64).Contains(MouseHandler.MousePosition) = True Then
If i = Cursor + Scroll Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll)))
Else
Cursor = i - Scroll
End If
End If
End If
Next
End If
If Controls.Accept(False, True, True) = True Then
SoundManager.PlaySound("select")
Core.SetScreen(New PokedexScreen(Me, Nothing, Me.HabitatList(Cursor + Scroll)))
End If
End If
End Sub
Private Sub UpdatePage3()
If Controls.Up(True, False, True, False, False, False) = True Or KeyBoardHandler.KeyPressed(Keys.OemPlus) = True Then
Me.scale += 0.5F
End If
If Controls.Down(True, False, True, False, False, False) = True Or KeyBoardHandler.KeyPressed(Keys.OemMinus) = True Then
Me.scale -= 0.5F
End If
Me.scale = Me.scale.Clamp(0.5F, 4.0F)
End Sub
End Class