gameimagelibtexture.vb.svn-base

来自「MirUnleashed vb.net Module modMain」· SVN-BASE 代码 · 共 145 行

SVN-BASE
145
字号
'### Visual Basic.NET and Direct X9 Legend of MiR Project ###'
'### Mir Unleashed Client GIL Texture Module ###'
'### http://www.lomcn.co.uk ###' '### Credits to TrueADM and DeathWish ###'

'This basically loads the .GIL and .GIX textures so that they can be drawn.
'Modifications will be made to this later on to improve loading times etc.

Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D

Module GameImageLibTexture

    Private CurrentDetailsName, NeededDetails As String
    Private Details() As String


    Private Structure strctLibrary
        Public LibraryDetails As String
        Public CurrentLibraryName As String
    End Structure

    Private Library As strctLibrary

    Public TextureCheck(10, 100) As Short

    Private BitmapStream As System.IO.FileStream

    Public Function LoadTextureFromFile(ByVal Filename As String, ByVal ImageNumber As Long, ByVal LibraryType As Integer, ByVal ObjectsExtra As Integer, Optional ByVal ReturnDimensions As Boolean = False) As Texture

        'TextureCheck(LibraryType, ImageNumber) = TextureCheck(LibraryType, ImageNumber) + 1

        'If TextureCheck(LibraryType, ImageNumber) = TextureCheck(LibraryType, ImageNumber) = 2 Then
        'MsgBox("Texture Bug! Texture: " & LibraryType & ", " & ImageNumber)
        'End If

        Filename = My.Application.Info.DirectoryPath & "\Data\" & Filename
        SetLibraryDetails(LibraryType, ObjectsExtra, Filename)

        If Not CurrentDetailsName = System.IO.Path.GetFileNameWithoutExtension(Filename) Then
            Details = Split(Library.LibraryDetails, vbCrLf) '#### MODIFY THIS TO IMPROVE LOAD IMAGES SPEED ####'
            CurrentDetailsName = System.IO.Path.GetFileNameWithoutExtension(Filename)

        End If

        If Not Details(ImageNumber) Is Nothing Then NeededDetails = Details(ImageNumber) Else NeededDetails = -1
        Dim fOffset As Long = GetTok(NeededDetails, 1, "|")
        Dim fLength As Long = GetTok(NeededDetails, 2, "|")
        Dim Height As Integer = GetTok(NeededDetails, 4, "|")
        Dim Width As Integer = GetTok(NeededDetails, 5, "|")

        If NeededDetails = "-1" Or fOffset = -1 Or fLength = -1 Or Height = -1 Or Width = -1 Then
            Return Nothing
        End If
        If Height <= 1 And Width <= 1 Then
            Return Nothing
        End If


        If BitmapStream Is Nothing Then
            BitmapStream = New System.IO.FileStream(Filename, IO.FileMode.Open, IO.FileAccess.Read)
        End If
        If Not System.IO.Path.GetFileName(BitmapStream.Name) = Filename Then
            BitmapStream.Close()
            BitmapStream = New System.IO.FileStream(Filename, IO.FileMode.Open, IO.FileAccess.Read)
        End If

        Dim Image(fLength) As Byte
        BitmapStream.Seek(fOffset, IO.SeekOrigin.Begin)
        BitmapStream.Read(Image, 0, fLength)

        'Dim Stream As New System.IO.MemoryStream(Image, False)

        'File.OpenRead(fileName))

        Dim Stream As New System.IO.MemoryStream(Image, False)

        'make new Array

        'LoadTextureFromFile = TextureLoader.FromStream(D3D, Stream, 0, 0, 1, Usage.None, Format.Unknown, Pool.Managed, Filter.None, Filter.None, 0, Color.Black.ToArgb)
        If Filename.Contains("Interface2") Or Filename.Contains("Glow") Then
            LoadTextureFromFile = TextureLoader.FromStream(D3D, Stream, Width, Height, 0, 0, Format.A8B8G8R8, Pool.Managed, Filter.None, Filter.Linear, Color.Black.ToArgb)
            Stream.Close()
        Else
            LoadTextureFromFile = TextureLoader.FromStream(D3D, Stream, Width, Height, 0, 0, Format.A8B8G8R8, Pool.Managed, Filter.None, Filter.Linear, Color.Magenta.ToArgb)
            Stream.Close()
        End If

    End Function


    Private libGUI As strctLibrary
    Private libTiles As strctLibrary
    Private LibGUI2 As strctLibrary


    Public Sub SetLibraryDetails(ByVal LibraryType As Integer, ByVal ObjectsExtra As Integer, ByVal Filename As String)
        Select Case LibraryType
            Case 0
                If Not Library.CurrentLibraryName = System.IO.Path.GetFileNameWithoutExtension(Filename) Then
                    Dim FileStream As New System.IO.FileStream(My.Application.Info.DirectoryPath & "\Data\" & System.IO.Path.GetFileNameWithoutExtension(Filename) & ".gix", IO.FileMode.Open)
                    Dim Data(FileStream.Length) As Byte
                    FileStream.Read(Data, 0, FileStream.Length)
                    FileStream.Close()

                    Library.LibraryDetails = System.Text.Encoding.ASCII.GetString(Data)
                    Library.CurrentLibraryName = System.IO.Path.GetFileNameWithoutExtension(Filename)
                End If
            Case 1
                If libGUI.LibraryDetails = "" Then
                    Dim FileStream As New System.IO.FileStream(My.Application.Info.DirectoryPath & "\Data\" & System.IO.Path.GetFileNameWithoutExtension(Filename) & ".gix", IO.FileMode.Open)
                    Dim Data(FileStream.Length) As Byte
                    FileStream.Read(Data, 0, FileStream.Length)
                    FileStream.Close()

                    libGUI.LibraryDetails = System.Text.Encoding.ASCII.GetString(Data)
                    Library.LibraryDetails = libGUI.LibraryDetails
                Else
                    Library.LibraryDetails = libGUI.LibraryDetails
                End If
            Case 2
                If LibGUI2.LibraryDetails = "" Then
                    Dim FileStream As New System.IO.FileStream(My.Application.Info.DirectoryPath & "\Data\" & System.IO.Path.GetFileNameWithoutExtension(Filename) & ".gix", IO.FileMode.Open)
                    Dim Data(FileStream.Length) As Byte
                    FileStream.Read(Data, 0, FileStream.Length)
                    FileStream.Close()

                    LibGUI2.LibraryDetails = System.Text.Encoding.ASCII.GetString(Data)
                    Library.LibraryDetails = LibGUI2.LibraryDetails
                Else
                    Library.LibraryDetails = LibGUI2.LibraryDetails
                End If
        End Select
    End Sub


    Public Function GetTok(ByVal Data As String, ByVal I As Integer, ByVal Delim As String) As String
        Dim DataArray() As String = Split(Data, Delim)
        If I < DataArray.Length Then
            Return DataArray(I)
        End If
        Return "-1" '"failure"
    End Function

End Module

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?