diff --git a/internal/conv/object.go b/internal/conv/object.go index 63eb6b0..7d831b2 100644 --- a/internal/conv/object.go +++ b/internal/conv/object.go @@ -1,6 +1,8 @@ package conv import ( + "image" + "github.com/hajimehoshi/ebiten" "code.ur.gs/lupine/ordoor/internal/data" @@ -41,29 +43,23 @@ func ConvertObject(rawObj *data.Object, name string) (*Object, error) { for i, rawSpr := range rawObj.Sprites { w := int(rawSpr.Width) h := int(rawSpr.Height) - data := spriteToData(name, i, rawSpr) - - image, err := ebiten.NewImage(w, h, ebiten.FilterDefault) + stdImage := spriteToImage(rawSpr) + ebitenImage, err := ebiten.NewImageFromImage(stdImage, ebiten.FilterDefault) if err != nil { return nil, err } - _ = image.ReplacePixels(data) - out.Sprites[i] = &Sprite{Width: w, Height: h, Image: image} + out.Sprites[i] = &Sprite{Width: w, Height: h, Image: ebitenImage} } return out, nil } -func spriteToData(name string, idx int, sprite *data.Sprite) []byte { - width := int(sprite.Width) - height := int(sprite.Height) - out := make([]byte, 0, 4*width*height) - - for _, palette := range sprite.Data { - color := data.ColorPalette[int(palette)] - out = append(out, color.R, color.G, color.B, color.A) +func spriteToImage(sprite *data.Sprite) image.Image { + return &image.Paletted{ + Pix: sprite.Data, + Stride: int(sprite.Width), + Rect: image.Rect(0, 0, int(sprite.Width), int(sprite.Height)), + Palette: data.ColorPalette, } - - return out } diff --git a/internal/data/palette.go b/internal/data/palette.go index 0135cb3..d32bceb 100644 --- a/internal/data/palette.go +++ b/internal/data/palette.go @@ -5,7 +5,7 @@ import "image/color" var ( Transparent = color.RGBA{R: 0, G: 0, B: 0, A: 0} - ColorPalette = []color.RGBA{ + ColorPalette = color.Palette{ Transparent, color.RGBA{R: 128, G: 0, B: 0, A: 255}, color.RGBA{R: 0, G: 128, B: 0, A: 255},