1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-26 17:15:24 +00:00

Sped up sprint loading time exponentially

This commit is contained in:
Tim Sarbin 2019-10-24 19:33:01 -04:00
parent 01524fdb1d
commit 036d35956e

View File

@ -80,42 +80,43 @@ func CreateSprite(data []byte, palette Palette) Sprite {
x := uint32(0) x := uint32(0)
y := uint32(result.Frames[i].Height - 1) y := uint32(result.Frames[i].Height - 1)
for true { go func(ix, dataPointer uint32) {
b := data[dataPointer] for true {
dataPointer++ b := data[dataPointer]
if b == 0x80 { dataPointer++
if y == 0 { if b == 0x80 {
break if y == 0 {
break
}
y--
x = 0
} else if (b & 0x80) > 0 {
transparentPixels := b & 0x7F
for ti := byte(0); ti < transparentPixels; ti++ {
result.Frames[ix].ImageData[x+(y*result.Frames[ix].Width)+uint32(ti)] = -1
}
x += uint32(transparentPixels)
} else {
for bi := 0; bi < int(b); bi++ {
result.Frames[ix].ImageData[x+(y*result.Frames[ix].Width)+uint32(bi)] = int16(data[dataPointer])
dataPointer++
}
x += uint32(b)
} }
y--
x = 0
} else if (b & 0x80) > 0 {
transparentPixels := b & 0x7F
for ti := byte(0); ti < transparentPixels; ti++ {
result.Frames[i].ImageData[x+(y*result.Frames[i].Width)+uint32(ti)] = -1
}
x += uint32(transparentPixels)
} else {
for bi := 0; bi < int(b); bi++ {
result.Frames[i].ImageData[x+(y*result.Frames[i].Width)+uint32(bi)] = int16(data[dataPointer])
dataPointer++
}
x += uint32(b)
} }
} result.Frames[ix].Image, _ = ebiten.NewImage(int(result.Frames[ix].Width), int(result.Frames[ix].Height), ebiten.FilterNearest)
result.Frames[i].Image, _ = ebiten.NewImage(int(result.Frames[i].Width), int(result.Frames[i].Height), ebiten.FilterNearest) newData := make([]byte, result.Frames[ix].Width*result.Frames[ix].Height*4)
newData := make([]byte, result.Frames[i].Width*result.Frames[i].Height*4) for ii := uint32(0); ii < result.Frames[ix].Width*result.Frames[ix].Height; ii++ {
for ii := uint32(0); ii < result.Frames[i].Width*result.Frames[i].Height; ii++ { if result.Frames[ix].ImageData[ii] == -1 {
if result.Frames[i].ImageData[ii] == -1 { continue
continue }
newData[ii*4] = palette.Colors[result.Frames[ix].ImageData[ii]].R
newData[(ii*4)+1] = palette.Colors[result.Frames[ix].ImageData[ii]].G
newData[(ii*4)+2] = palette.Colors[result.Frames[ix].ImageData[ii]].B
newData[(ii*4)+3] = 0xFF
} }
newData[ii*4] = palette.Colors[result.Frames[i].ImageData[ii]].R result.Frames[ix].Image.ReplacePixels(newData)
newData[(ii*4)+1] = palette.Colors[result.Frames[i].ImageData[ii]].G }(i, dataPointer)
newData[(ii*4)+2] = palette.Colors[result.Frames[i].ImageData[ii]].B
newData[(ii*4)+3] = 0xFF
}
result.Frames[i].Image.ReplacePixels(newData)
} }
return result return result
} }