70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package dcc
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
type Sprite struct {
|
|
}
|
|
|
|
type extents struct {
|
|
x1 int32
|
|
y1 int32
|
|
x2 int32
|
|
y2 int32
|
|
}
|
|
|
|
type fileHeader struct {
|
|
Signature uint8
|
|
Version uint8
|
|
DirCount uint8
|
|
FramesPerDir uint32
|
|
Tag uint32
|
|
FinalDc6Size uint32
|
|
}
|
|
|
|
type directionHeader struct {
|
|
CodedSize uint32
|
|
HasRawPixelEncoding bool
|
|
CompressEqualCells bool
|
|
Variable0Bits uint32
|
|
WidthBits uint32
|
|
HeightBits uint32
|
|
OffsetXBits int32
|
|
OffsetYBits int32
|
|
OptionalBytesBits uint32
|
|
CodedBytesBits uint32
|
|
}
|
|
|
|
type frameHeader struct {
|
|
Variable0 uint32
|
|
Width uint32
|
|
Height uint32
|
|
OffsetX int32
|
|
OffsetY int32
|
|
OptionalBytes uint32
|
|
CodedBytes uint32
|
|
FrameBottomUp bool
|
|
Extents extents
|
|
}
|
|
|
|
func NewFromReader(reader io.ReadSeeker) (*Sprite, error) {
|
|
var fileHead fileHeader
|
|
if err := binary.Read(reader, binary.LittleEndian, &fileHead); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
dirOffsets := make([]uint32, fileHead.DirCount)
|
|
for i := 0; i < int(fileHead.DirCount); i++ {
|
|
if err := binary.Read(reader, binary.LittleEndian, &dirOffsets[i]); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
fmt.Printf("%+v\n", fileHead)
|
|
fmt.Printf("%+v\n", dirOffsets)
|
|
return nil, nil
|
|
}
|