1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-06 19:44:15 -04:00
OpenDiablo2/d2common/d2loader/asset/types/source_types.go
lord 7f6ae1b785
improve AssetManager implementation (#728)
* improve AssetManager implementation

Notable changes are:
 * removed the individual managers inside of d2asset, only one asset manager
 * AssetManager now has caches for the types of files it loads
 * created a type for TextDictionary (the txt file structs)
 * fixed a file path bug in d2loader Source
 * fixed a asset stream bug in d2loader Asset
 * d2loader.Loader now needs a d2config.Config on creation (for resolving locale files)
 * updated the mpq file in d2asset test data, added test case for "sub-directory"
 * added a Data method to d2asset.Asset. The data is cached on first full read.
 * renamed ArchiveDataStream to DataStream in d2interface
 * moved palette utility func out of d2asset and into d2util
 * bugfix for MacOS mpq loader issue

* minor lint fixes

* removed obsolete interfaces from d2interface

* lint fixes, added data caching to filesystem asset

* adding comment for mpq asset close

* adding comment for mpq asset close
2020-09-14 14:47:11 -04:00

48 lines
1013 B
Go

package types
import (
"path/filepath"
"strings"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
)
// SourceType represents the type of the asset source
type SourceType int
// Asset sources
const (
AssetSourceUnknown SourceType = iota
AssetSourceFileSystem
AssetSourceMPQ
)
// Ext2SourceType returns the SourceType from the given file extension
func Ext2SourceType(ext string) SourceType {
ext = strings.ToLower(ext)
ext = strings.ReplaceAll(ext, ".", "")
lookup := map[string]SourceType{
"mpq": AssetSourceMPQ,
}
if knownType, found := lookup[ext]; found {
return knownType
}
return AssetSourceUnknown
}
// CheckSourceType attempts to determine the source type of the source
func CheckSourceType(path string) SourceType {
// on MacOS, the MPQ's from blizzard don't have file extensions
// so we just attempt to init the file as an mpq
if _, err := d2mpq.Load(path); err == nil {
return AssetSourceMPQ
}
ext := filepath.Ext(path)
return Ext2SourceType(ext)
}