mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-28 22:26:30 -04:00
50d40fb5d3
* adding logger implementation to d2common * Adding file loader implementation The file loader works in terms of `Sources` and `Assets`. A `Source` is something like a filesystem that has a cache. An `Asset` is something that implements `io.ReadSeeker` and has a few methods of its own. There are currently `Source` implementations for MPQ archives and for the host filesystem, meaning that one can specify a directory on the host fs to load files from. `Sources` are added to a loader with `loader.AddSource(path)`, where `path` resolves somewhere on disk. In the case that the path points to an MPQ, then an MPQ `Source` is created and added to the loader. If `path` resolves to a directory, then a filesystem source is added. Files are loaded with `loader.Load("data/global/excel/monstats.txt")`, and the sources are searched in the order that they were added. * adding tests for d2common/logger_test.go * adding tests and testdata for d2loader * logger lint fixes, fixed missing test case * minor edits, lint fixes, changes some comments, embedded Logger into Loader * moved d2loader into d2common (I dont think it belonged in d2core) * removed my simple cache implementation in favor of our existing cache in d2common
45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package filesystem
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2loader/asset"
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2loader/asset/types"
|
|
)
|
|
|
|
// static check that Asset implements Asset
|
|
var _ asset.Asset = &Asset{}
|
|
|
|
// Asset represents an asset that is in the host filesystem
|
|
type Asset struct {
|
|
assetType types.AssetType
|
|
source *Source
|
|
path string
|
|
file *os.File
|
|
}
|
|
|
|
// Type returns the asset type
|
|
func (fsa *Asset) Type() types.AssetType {
|
|
return fsa.assetType
|
|
}
|
|
|
|
// Source returns the asset source that this asset was loaded from
|
|
func (fsa *Asset) Source() asset.Source {
|
|
return fsa.source
|
|
}
|
|
|
|
// Path returns the sub-path (within the asset source Root) for this asset
|
|
func (fsa *Asset) Path() string {
|
|
return fsa.path
|
|
}
|
|
|
|
// Read reads bytes into the given byte buffer
|
|
func (fsa *Asset) Read(p []byte) (n int, err error) {
|
|
return fsa.file.Read(p)
|
|
}
|
|
|
|
// Seek seeks within the file
|
|
func (fsa *Asset) Seek(offset int64, whence int) (int64, error) {
|
|
return fsa.file.Seek(offset, whence)
|
|
}
|