246 lines
9.0 KiB
VB.net
246 lines
9.0 KiB
VB.net
''' <summary>
|
|
''' This class handles all actions regarding Badge loading and displaying.
|
|
''' </summary>
|
|
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)
|
|
|
|
''' <summary>
|
|
''' This describes one Badge loaded by a GameMode with ID, Name, Texture and Arguments.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Loads the Badges. Only use after the GameMode got set.
|
|
''' </summary>
|
|
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"
|
|
|
|
''' <summary>
|
|
''' Gets the Badge name.
|
|
''' </summary>
|
|
''' <param name="ID">The ID of the Badge.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Gets the badge texture.
|
|
''' </summary>
|
|
''' <param name="ID">The ID of the badge.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Gets the highest level cap the player can use traded Pokémon on.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Checks if the player is able to perform a certain Hidden Machine move.
|
|
''' </summary>
|
|
''' <param name="HM">The Hidden Machine move the player tries to use.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Gets the region.
|
|
''' </summary>
|
|
''' <param name="index">The index of the region in the Badges enumeration.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Gets the amount of Badges in a certain region.
|
|
''' </summary>
|
|
''' <param name="region">The region to count the Badges.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Returns the amount of regions that exists in total.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Gets the ID of a Badge.
|
|
''' </summary>
|
|
''' <param name="region">The region this Badge is from.</param>
|
|
''' <param name="index">The index of this Badge.</param>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Checks if the player has a certain Badge.
|
|
''' </summary>
|
|
''' <param name="BadgeID">The Badge ID to check for.</param>
|
|
Public Shared Function PlayerHasBadge(ByVal BadgeID As Integer) As Boolean
|
|
Return Core.Player.Badges.Contains(BadgeID)
|
|
End Function
|
|
|
|
#End Region
|
|
|
|
End Class |