64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package assetMeta
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
type FileEntry struct {
|
|
NameHash int32
|
|
FileByteName string
|
|
Size int64
|
|
DataCount int32
|
|
DataEntries []DataEntry
|
|
Unk uint8
|
|
}
|
|
|
|
func FileEntryFromBytes(r io.Reader) (*FileEntry, error) {
|
|
var f FileEntry
|
|
|
|
if err := binary.Read(r, binary.BigEndian, &f.NameHash); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
buf := make([]byte, 16)
|
|
if _, err := io.ReadFull(r, buf); err != nil {
|
|
return nil, err
|
|
}
|
|
f.FileByteName = toHex(buf)
|
|
|
|
if err := binary.Read(r, binary.BigEndian, &f.Size); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := binary.Read(r, binary.BigEndian, &f.DataCount); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
f.DataEntries = make([]DataEntry, 0, f.DataCount)
|
|
for i := int32(0); i < f.DataCount; i++ {
|
|
entry, err := DataEntryFromBytes(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
f.DataEntries = append(f.DataEntries, *entry)
|
|
}
|
|
|
|
// read 1 byte
|
|
b := make([]byte, 1)
|
|
if _, err := r.Read(b); err != nil {
|
|
return nil, err
|
|
}
|
|
f.Unk = b[0]
|
|
|
|
return &f, nil
|
|
}
|
|
|
|
func toHex(buf []byte) string {
|
|
s := ""
|
|
for _, b := range buf {
|
|
s += fmt.Sprintf("%02x", b)
|
|
}
|
|
return s
|
|
}
|