152 lines
7.3 KiB
VB.net
152 lines
7.3 KiB
VB.net
Public Class ContentPackManager
|
|
|
|
Private Shared TextureReplacements As New Dictionary(Of TextureSource, TextureSource)
|
|
Private Shared FilesExist As New Dictionary(Of String, Boolean)
|
|
Private Shared TextureResolutions As New Dictionary(Of String, Single)
|
|
|
|
Public Shared Sub Load(ByVal ContentPackFile As String)
|
|
If System.IO.Directory.Exists(GameController.GamePath & "\ContentPacks") = True Then
|
|
If System.IO.File.Exists(ContentPackFile) = True Then
|
|
Dim Lines() As String = System.IO.File.ReadAllLines(ContentPackFile)
|
|
For Each Line As String In Lines
|
|
If Line.GetSplit(0, "|").ToLower = "waterspeed" Then
|
|
GameModeManager.ForceWaterSpeed = CInt(Line.GetSplit(1, "|"))
|
|
Else
|
|
Select Case Line.CountSplits("|")
|
|
Case 2 'ResolutionChange
|
|
Dim TextureName As String = Line.GetSplit(0, "|")
|
|
Dim Resolution As Single = CSng(Line.GetSplit(1, "|").Replace(".", GameController.DecSeparator))
|
|
|
|
If TextureResolutions.ContainsKey(TextureName) = False Then
|
|
TextureResolutions.Add(TextureName, Resolution)
|
|
End If
|
|
Case 4 'TextureReplacement
|
|
Dim oldTextureName As String = Line.GetSplit(0, "|")
|
|
Dim newTextureName As String = Line.GetSplit(2, "|")
|
|
Dim oRS As String = Line.GetSplit(1, "|") 'oRS = oldRectangleSource
|
|
Dim nRS As String = Line.GetSplit(3, "|") 'nRS = newRectangleSource
|
|
|
|
Dim oldTextureSource As New TextureSource(oldTextureName, New Rectangle(CInt(oRS.GetSplit(0)), CInt(oRS.GetSplit(1)), CInt(oRS.GetSplit(2)), CInt(oRS.GetSplit(3))))
|
|
Dim newTextureSource As New TextureSource(newTextureName, New Rectangle(CInt(nRS.GetSplit(0)), CInt(nRS.GetSplit(1)), CInt(nRS.GetSplit(2)), CInt(nRS.GetSplit(3))))
|
|
|
|
If TextureReplacements.ContainsKey(oldTextureSource) = False Then
|
|
TextureReplacements.Add(oldTextureSource, newTextureSource)
|
|
End If
|
|
End Select
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Function GetTextureReplacement(ByVal TexturePath As String, ByVal r As Rectangle) As TextureSource
|
|
Dim TextureSource As New TextureSource(TexturePath, r)
|
|
For i = 0 To TextureReplacements.Count - 1
|
|
If TextureReplacements.Keys(i).IsEqual(TextureSource) = True Then
|
|
Return TextureReplacements.Values(i)
|
|
End If
|
|
Next
|
|
Return TextureSource
|
|
End Function
|
|
|
|
Public Shared Function GetTextureResolution(ByVal TextureName As String) As Single
|
|
For i = 0 To TextureResolutions.Count - 1
|
|
If TextureResolutions.Keys(i).ToLower() = TextureName.ToLower() Then
|
|
Return TextureResolutions.Values(i)
|
|
End If
|
|
Next
|
|
|
|
Return 1
|
|
End Function
|
|
|
|
Public Shared Function GetContentManager(ByVal file As String, ByVal fileEndings As String) As ContentManager
|
|
Dim contentPath As String = ""
|
|
If Core.GameOptions.ContentPackNames.Count() > 0 Then
|
|
For Each c As String In Core.GameOptions.ContentPackNames
|
|
contentPath = "ContentPacks\" & c
|
|
|
|
For Each fileEnding As String In fileEndings.Split(CChar(","))
|
|
If FilesExist.ContainsKey(GameController.GamePath & "\" & contentPath & "\" & file & fileEnding) = False Then
|
|
FilesExist.Add(GameController.GamePath & "\" & contentPath & "\" & file & fileEnding, System.IO.File.Exists(GameController.GamePath & "\" & contentPath & "\" & file & fileEnding))
|
|
End If
|
|
|
|
If FilesExist(GameController.GamePath & "\" & contentPath & "\" & file & fileEnding) = True Then
|
|
Return New ContentManager(Core.GameInstance.Services, contentPath)
|
|
End If
|
|
Next
|
|
Next
|
|
End If
|
|
|
|
Dim gameMode As GameMode = GameModeManager.ActiveGameMode
|
|
If gameMode.ContentPath <> "\Content\" And gameMode.ContentPath <> "" Then
|
|
Dim gameModePath As String = GameController.GamePath & "\" & gameMode.ContentPath
|
|
For Each fileEnding As String In fileEndings.Split(CChar(","))
|
|
If System.IO.File.Exists(gameModePath & file & fileEnding) = True Then
|
|
Return New ContentManager(Core.GameInstance.Services, gameMode.ContentPath.Remove(0, 1))
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Return New ContentManager(Core.GameInstance.Services, "Content")
|
|
End Function
|
|
|
|
Public Shared Sub CreateContentPackFolder()
|
|
If System.IO.Directory.Exists(GameController.GamePath & "\ContentPacks") = False Then
|
|
System.IO.Directory.CreateDirectory(GameController.GamePath & "\ContentPacks")
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Function GetContentPackInfo(ByVal ContentPackName As String) As String()
|
|
If System.IO.File.Exists(GameController.GamePath & "\ContentPacks\" & ContentPackName & "\info.dat") = False Then
|
|
Dim s As String = "1.00" & Environment.NewLine & "Pokémon3D" & Environment.NewLine & "[Add information here!]"
|
|
System.IO.File.WriteAllText(GameController.GamePath & "\ContentPacks\" & ContentPackName & "\info.dat", s)
|
|
End If
|
|
Return System.IO.File.ReadAllLines(GameController.GamePath & "\ContentPacks\" & ContentPackName & "\info.dat")
|
|
End Function
|
|
|
|
Public Shared Sub Clear()
|
|
TextureReplacements.Clear()
|
|
TextureResolutions.Clear()
|
|
FilesExist.Clear()
|
|
MusicManager.Clear()
|
|
SoundManager.Clear()
|
|
ModelManager.Clear()
|
|
TextureManager.TextureList.Clear()
|
|
TextureManager.TextureRectList.Clear()
|
|
Water.ClearAnimationResources()
|
|
Whirlpool.LoadedWaterTemp = False
|
|
Waterfall.ClearAnimationResources()
|
|
AnimatedBlock.ClearAnimationResources()
|
|
|
|
Logger.Debug("---Cleared ContentPackManager---")
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Public Class TextureSource
|
|
|
|
Public TexturePath As String = ""
|
|
Public TextureRectangle As Rectangle
|
|
|
|
Public Sub New(ByVal TexturePath As String, ByVal TextureRectangle As Rectangle)
|
|
Me.TexturePath = TexturePath
|
|
Me.TextureRectangle = TextureRectangle
|
|
End Sub
|
|
|
|
Public Function GetString() As String
|
|
Return TexturePath & "," & TextureRectangle.X & "," & TextureRectangle.Y & "," & TextureRectangle.Width & "," & TextureRectangle.Height
|
|
End Function
|
|
|
|
Public Function IsEqual(ByVal TextureSource As TextureSource) As Boolean
|
|
If Me.TexturePath.ToLower() = TextureSource.TexturePath.ToLower() And Me.TextureRectangle = TextureSource.TextureRectangle Then
|
|
Return True
|
|
End If
|
|
|
|
Return False
|
|
End Function
|
|
|
|
Public Function IsEqual(ByVal TexturePath As String, ByVal TextureRectangle As Rectangle) As Boolean
|
|
Return IsEqual(New TextureSource(TexturePath, TextureRectangle))
|
|
End Function
|
|
|
|
End Class |