P3D-Legacy/P3D/Resources/FontManager.vb

140 lines
6.3 KiB
VB.net

Public Class FontManager
Private Shared FontList As New Dictionary(Of String, FontContainer)
'we can maybe put language specific fonts in via localization system, we have a place to start at least
'this sub looks for all fonts that should be in the system (base files, mode files, pack files) and shoves them into FontList
Public Shared Sub LoadFonts()
FontList.Clear()
'because the pack manager will hoover up replacements from packs and mods already we just load every font name contained in our base files
For Each s As String In System.IO.Directory.GetFiles(GameController.GamePath & "\Content\Fonts\BMP")
If s.EndsWith(".xnb") = True Then
Dim name As String = s.Substring(0, s.Length - 4)
name = name.Substring(GameController.GamePath.Length + "\Content\Fonts\BMP\".Length)
If FontList.ContainsKey(name.ToLower()) = False Then
Dim font As SpriteFont = ContentPackManager.GetContentManager("Fonts\BMP\" & name, ".xnb").Load(Of SpriteFont)("Fonts\BMP\" & name)
FontList.Add(name.ToLower(), New FontContainer(name, font))
End If
End If
Next
'then look for ADDITIONAL fonts in packs, the ones that exist will have the user's prefered copy already
For Each c As String In Core.GameOptions.ContentPackNames
If System.IO.Directory.Exists(GameController.GamePath & "\ContentPacks\" & c & "\Content\Fonts\BMP") = True Then
For Each s As String In System.IO.Directory.GetFiles(GameController.GamePath & "\ContentPacks\" & c & "\Content\Fonts\BMP")
If s.EndsWith(".xnb") = True Then
Dim name As String = s.Substring(0, s.Length - 4)
name = name.Substring(GameController.GamePath.Length + "\Content\Fonts\BMP\".Length + "\ContentPacks\".Length + c.Length)
If FontList.ContainsKey(name.ToLower()) = False Then
Dim font As SpriteFont = ContentPackManager.GetContentManager("Fonts\BMP\" & name, ".xnb").Load(Of SpriteFont)("Fonts\BMP\" & name)
FontList.Add(name.ToLower(), New FontContainer(name, font))
End If
End If
Next
End If
Next
'if there's a game mode loaded, look in that too for additional fonts
If Not GameModeManager.ActiveGameMode.Name = "Kolben" Then
If Not GameModeManager.ActiveGameMode.ContentPath = "\Content\" Then
If System.IO.Directory.Exists(GameController.GamePath & GameModeManager.ActiveGameMode.ContentPath & "\Fonts\BMP") = True Then
For Each s As String In System.IO.Directory.GetFiles(GameController.GamePath & GameModeManager.ActiveGameMode.ContentPath & "\Fonts\BMP")
If s.EndsWith(".xnb") = True Then
Dim name As String = s.Substring(0, s.Length - 4)
name = name.Substring(GameController.GamePath.Length + "\Fonts\BMP\".Length + GameModeManager.ActiveGameMode.ContentPath.Length)
If FontList.ContainsKey(name.ToLower()) = False Then
Dim font As SpriteFont = ContentPackManager.GetContentManager("Fonts\BMP\" & name, ".xnb").Load(Of SpriteFont)("Fonts\BMP\" & name)
FontList.Add(name.ToLower(), New FontContainer(name, font))
End If
End If
Next
End If
End If
End If
End Sub
''' <summary>
''' Looks to see if a font is loaded. Code that uses this should generally check for a return of nothing, indicating the font does not exist.
''' </summary>
''' <param name="fontName">The name of the font.</param>
Public Shared Function GetFont(ByVal fontName As String) As SpriteFont
If FontList.ContainsKey(fontname.ToLower()) = True Then
Return FontList(fontname.ToLower()).SpriteFont
End If
Return Nothing
End Function
''' <summary>
''' Looks to see if a FontContainer is loaded. Code that uses this should generally check for a return of nothing, indicating the font does not exist.
''' </summary>
''' <param name="fontName">The name of the font.</param>
Public Shared Function GetFontContainer(ByVal fontName As String) As FontContainer
If FontList.ContainsKey(fontName.ToLower()) = True Then
Return FontList(fontName.ToLower())
End If
Return Nothing
End Function
Public Shared ReadOnly Property MainFont() As SpriteFont
Get
Return GetFont("mainfont")
End Get
End Property
Public Shared ReadOnly Property TextFont() As SpriteFont
Get
Return GetFont("textfont")
End Get
End Property
Public Shared ReadOnly Property InGameFont() As SpriteFont
Get
Return GetFont("ingame")
End Get
End Property
Public Shared ReadOnly Property MiniFont() As SpriteFont
Get
Return GetFont("minifont")
End Get
End Property
Public Shared ReadOnly Property ChatFont() As SpriteFont
Get
Return GetFont("chatfont")
End Get
End Property
Public Shared ReadOnly Property UnownFont() As SpriteFont
Get
Return GetFont("unown")
End Get
End Property
Public Shared ReadOnly Property BrailleFont() As SpriteFont
Get
Return GetFont("braille")
End Get
End Property
Private Shared loadedGameJoltFont As SpriteFont = Nothing
Private Shared hasLoadedGameJoltFont As Boolean = False
Public Shared ReadOnly Property GameJoltFont() As SpriteFont
Get
If hasLoadedGameJoltFont = True Then
While loadedGameJoltFont Is Nothing
'Idle around
End While
Return loadedGameJoltFont
Else
hasLoadedGameJoltFont = True
loadedGameJoltFont = Content.Load(Of SpriteFont)("Fonts\BMP\GameJolt")
loadedGameJoltFont.DefaultCharacter = " "c
Return loadedGameJoltFont
End If
End Get
End Property
End Class