2020-06-06 12:43:02 +01:00
|
|
|
package assetstore
|
|
|
|
|
|
|
|
import (
|
|
|
|
"image"
|
|
|
|
"os"
|
|
|
|
|
2020-11-21 19:27:09 +00:00
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
2020-06-06 12:43:02 +01:00
|
|
|
_ "github.com/samuel/go-pcx/pcx" // PCX support
|
|
|
|
)
|
|
|
|
|
|
|
|
func (a *AssetStore) Image(name string) (*ebiten.Image, error) {
|
|
|
|
name = canonical(name)
|
|
|
|
if img, ok := a.images[name]; ok {
|
|
|
|
return img, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// baps, ordoor, geas store .pcx files in Pic
|
|
|
|
// TODO: SL stores .bmp files in Res
|
|
|
|
filename, err := a.lookup(name, "pcx", "Pic")
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
f, err := os.Open(filename)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
|
|
|
|
rawImg, _, err := image.Decode(f)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2020-11-21 19:27:09 +00:00
|
|
|
img := ebiten.NewImageFromImage(rawImg)
|
2020-06-06 12:43:02 +01:00
|
|
|
|
|
|
|
a.images[name] = img
|
|
|
|
return img, nil
|
|
|
|
}
|