1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2025-02-03 07:07:25 -05:00

cof: splited long Marshal method to avoid nolint:funlen

This commit is contained in:
M. Sz 2021-02-25 09:28:11 +01:00
parent d5d93df75c
commit b4cd34e351

View File

@ -80,24 +80,17 @@ type COF struct {
} }
// Unmarshal a byte slice to this COF // Unmarshal a byte slice to this COF
// nolint:funlen // no need to change
func (c *COF) Unmarshal(fileData []byte) error { func (c *COF) Unmarshal(fileData []byte) error {
streamReader := d2datautils.CreateStreamReader(fileData)
var b []byte
var err error var err error
b, err = streamReader.ReadBytes(numHeaderBytes) streamReader := d2datautils.CreateStreamReader(fileData)
headerBytes, err := streamReader.ReadBytes(numHeaderBytes)
if err != nil { if err != nil {
return err return err
} }
c.NumberOfLayers = int(b[headerNumLayers]) c.loadHeader(headerBytes)
c.FramesPerDirection = int(b[headerFramesPerDir])
c.NumberOfDirections = int(b[headerNumDirs])
c.unknownHeaderBytes = b[headerNumDirs+1 : headerSpeed]
c.Speed = int(b[headerSpeed])
c.unknownBodyBytes, err = streamReader.ReadBytes(numUnknownBodyBytes) c.unknownBodyBytes, err = streamReader.ReadBytes(numUnknownBodyBytes)
if err != nil { if err != nil {
@ -107,10 +100,44 @@ func (c *COF) Unmarshal(fileData []byte) error {
c.CofLayers = make([]CofLayer, c.NumberOfLayers) c.CofLayers = make([]CofLayer, c.NumberOfLayers)
c.CompositeLayers = make(map[d2enum.CompositeType]int) c.CompositeLayers = make(map[d2enum.CompositeType]int)
err = c.loadCOFLayers(streamReader)
if err != nil {
return err
}
animationFramesData, err := streamReader.ReadBytes(c.FramesPerDirection)
if err != nil {
return err
}
c.loadAnimationFrames(animationFramesData)
priorityLen := c.FramesPerDirection * c.NumberOfDirections * c.NumberOfLayers
c.Priority = make([][][]d2enum.CompositeType, c.NumberOfDirections)
priorityBytes, err := streamReader.ReadBytes(priorityLen)
if err != nil {
return err
}
c.loadPriority(priorityBytes)
return nil
}
func (c *COF) loadHeader(b []byte) {
c.NumberOfLayers = int(b[headerNumLayers])
c.FramesPerDirection = int(b[headerFramesPerDir])
c.NumberOfDirections = int(b[headerNumDirs])
c.unknownHeaderBytes = b[headerNumDirs+1 : headerSpeed]
c.Speed = int(b[headerSpeed])
}
func (c *COF) loadCOFLayers(streamReader *d2datautils.StreamReader) error {
for i := 0; i < c.NumberOfLayers; i++ { for i := 0; i < c.NumberOfLayers; i++ {
layer := CofLayer{} layer := CofLayer{}
b, err = streamReader.ReadBytes(numLayerBytes) b, err := streamReader.ReadBytes(numLayerBytes)
if err != nil { if err != nil {
return err return err
} }
@ -128,25 +155,18 @@ func (c *COF) Unmarshal(fileData []byte) error {
c.CompositeLayers[layer.Type] = i c.CompositeLayers[layer.Type] = i
} }
b, err = streamReader.ReadBytes(c.FramesPerDirection) return nil
if err != nil { }
return err
}
func (c *COF) loadAnimationFrames(b []byte) {
c.AnimationFrames = make([]d2enum.AnimationFrame, c.FramesPerDirection) c.AnimationFrames = make([]d2enum.AnimationFrame, c.FramesPerDirection)
for i := range b { for i := range b {
c.AnimationFrames[i] = d2enum.AnimationFrame(b[i]) c.AnimationFrames[i] = d2enum.AnimationFrame(b[i])
} }
}
priorityLen := c.FramesPerDirection * c.NumberOfDirections * c.NumberOfLayers func (c *COF) loadPriority(priorityBytes []byte) {
c.Priority = make([][][]d2enum.CompositeType, c.NumberOfDirections)
priorityBytes, err := streamReader.ReadBytes(priorityLen)
if err != nil {
return err
}
priorityIndex := 0 priorityIndex := 0
for direction := 0; direction < c.NumberOfDirections; direction++ { for direction := 0; direction < c.NumberOfDirections; direction++ {
@ -159,8 +179,6 @@ func (c *COF) Unmarshal(fileData []byte) error {
} }
} }
} }
return nil
} }
// Marshal this COF to a byte slice // Marshal this COF to a byte slice