''' ''' This class handles all actions regarding Badge loading and displaying. ''' Public Class Badge Public Enum HMMoves Surf Cut Strength Flash Fly Whirlpool Waterfall Ride Dive RockClimb End Enum Private Shared Badges As New List(Of BadgeDeclaration) ''' ''' This describes one Badge loaded by a GameMode with ID, Name, Texture and Arguments. ''' Private Class BadgeDeclaration Public ID As Integer = 0 Public Name As String = "" Public LevelCap As Integer = -1 Public HMs As New List(Of HMMoves) Public TextureRectangle As Rectangle = New Rectangle(0, 0, 50, 50) Public TexturePath As String = "GUI\Badges" Public Region As String = "Johto" Public Sub New(ByVal inputData As String) Dim data() As String = inputData.Split(CChar("|")) Me.ID = CInt(data(0)) Me.Name = data(1) If data.Count > 2 Then For i = 2 To data.Count - 1 Dim argName As String = data(i).Remove(data(i).IndexOf("=")) Dim argData As String = data(i).Remove(0, data(i).IndexOf("=") + 1) Select Case argName.ToLower() Case "level" Me.LevelCap = CInt(argData) Case "hm" Dim hms() As String = argData.Split(CChar(",")) For Each hm As String In hms Select Case hm.ToLower() Case "surf" Me.HMs.Add(HMMoves.Surf) Case "cut" Me.HMs.Add(HMMoves.Cut) Case "strength" Me.HMs.Add(HMMoves.Strength) Case "flash" Me.HMs.Add(HMMoves.Flash) Case "fly" Me.HMs.Add(HMMoves.Fly) Case "whirlpool" Me.HMs.Add(HMMoves.Whirlpool) Case "waterfall" Me.HMs.Add(HMMoves.Waterfall) Case "ride" Me.HMs.Add(HMMoves.Ride) Case "dive" Me.HMs.Add(HMMoves.Dive) Case "rockclimb" Me.HMs.Add(HMMoves.RockClimb) End Select Next Case "texture" Dim texData() As String = argData.Split(CChar(",")) Me.TexturePath = texData(0) Me.TextureRectangle = New Rectangle(CInt(texData(1)), CInt(texData(2)), CInt(texData(3)), CInt(texData(4))) Case "region" Me.Region = argData End Select Next End If End Sub End Class ''' ''' Loads the Badges. Only use after the GameMode got set. ''' Public Shared Sub Load() Badges.Clear() Dim file As String = GameModeManager.GetContentFilePath("Data\badges.dat") Security.FileValidation.CheckFileValid(file, False, "Badge.vb") Dim data() As String = System.IO.File.ReadAllLines(file) For Each line As String In data If line.Contains("|") = True AndAlso StringHelper.IsNumeric(line.GetSplit(0, "|")) = True Then Badges.Add(New BadgeDeclaration(line)) End If Next End Sub #Region "GetFunctions" ''' ''' Gets the Badge name. ''' ''' The ID of the Badge. Public Shared Function GetBadgeName(ByVal ID As Integer) As String For Each b As BadgeDeclaration In Badges If b.ID = ID Then If Localization.TokenExists("badge_" & b.ID.ToString) = True Then If GameModeManager.ActiveGameMode.IsDefaultGamemode = False Then If Localization.LocalizationTokens("badge_" & b.ID.ToString).IsGameModeToken = False Then Return b.Name Else Return Localization.GetString("badge_" & b.ID.ToString) End If Else Return Localization.GetString("badge_" & b.ID.ToString) End If Else Return b.Name End If End If Next Return "Plain" End Function ''' ''' Gets the badge texture. ''' ''' The ID of the badge. Public Shared Function GetBadgeTexture(ByVal ID As Integer) As Texture2D For Each b As BadgeDeclaration In Badges If b.ID = ID Then Return TextureManager.GetTexture(b.TexturePath, b.TextureRectangle, "") End If Next Return TextureManager.GetTexture("GUI\Badges", New Rectangle(0, 0, 50, 50), "") End Function ''' ''' Gets the highest level cap the player can use traded Pokémon on. ''' Public Shared Function GetLevelCap() As Integer Dim trainerBadges As List(Of Integer) = Core.Player.Badges Dim highestCap As Integer = 10 For Each b As BadgeDeclaration In Badges If b.LevelCap > highestCap And trainerBadges.Contains(b.ID) = True Then highestCap = b.LevelCap End If Next Return highestCap End Function ''' ''' Checks if the player is able to perform a certain Hidden Machine move. ''' ''' The Hidden Machine move the player tries to use. Public Shared Function CanUseHMMove(ByVal HM As HMMoves) As Boolean Dim trainerBadges As List(Of Integer) = Core.Player.Badges For Each b As BadgeDeclaration In Badges If b.HMs.Contains(HM) = True And trainerBadges.Contains(b.ID) = True Or b.ID = 0 Then Return True End If Next Return False End Function ''' ''' Gets the region. ''' ''' The index of the region in the Badges enumeration. Public Shared Function GetRegion(ByVal index As Integer) As String Dim regions As New List(Of String) For Each b As BadgeDeclaration In Badges If Not regions.Any(Function(m As String) m.ToLowerInvariant() = b.Region.ToLowerInvariant()) Then regions.Add(b.Region) End If Next If regions.Count - 1 >= index Then Return regions(index) Else Return "Johto" End If End Function ''' ''' Gets the amount of Badges in a certain region. ''' ''' The region to count the Badges. Public Shared Function GetBadgesCount(ByVal region As String) As Integer Dim c As Integer = 0 For Each b As BadgeDeclaration In Badges If b.Region.ToLower() = region.ToLower() Then c += 1 End If Next Return c End Function ''' ''' Returns the amount of regions that exists in total. ''' Public Shared Function GetRegionCount() As Integer Dim regions As New List(Of String) For Each b As BadgeDeclaration In Badges If Not regions.Any(Function(m As String) m.ToLowerInvariant() = b.Region.ToLowerInvariant()) Then regions.Add(b.Region) End If Next Return regions.Count End Function ''' ''' Gets the ID of a Badge. ''' ''' The region this Badge is from. ''' The index of this Badge. Public Shared Function GetBadgeID(ByVal region As String, ByVal index As Integer) As Integer Dim cBadges As New List(Of BadgeDeclaration) For Each b As BadgeDeclaration In Badges If b.Region.ToLower() = region.ToLower() Then cBadges.Add(b) End If Next If cBadges.Count - 1 >= index Then Return cBadges(index).ID Else Return 1 End If End Function ''' ''' Checks if the player has a certain Badge. ''' ''' The Badge ID to check for. Public Shared Function PlayerHasBadge(ByVal BadgeID As Integer) As Boolean Return Core.Player.Badges.Contains(BadgeID) End Function #End Region End Class