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 ''' ''' 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. ''' ''' The name of the font. 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 ''' ''' 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. ''' ''' The name of the font. 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