openquell/assets/loader-sprites.go

59 lines
1.2 KiB
Go
Raw Normal View History

2024-02-06 15:26:20 +01:00
package assets
import (
"embed"
"fmt"
"image"
_ "image/png"
"log"
"os"
"path/filepath"
"strings"
"github.com/hajimehoshi/ebiten/v2"
)
// Maps image name to image data
type AssetRegistry map[string]*ebiten.Image
//go:embed levels/*.lvl sprites/*.png
var assetfs embed.FS
var Assets = LoadImages("sprites")
func LoadImages(dir string) AssetRegistry {
images := AssetRegistry{}
// we use embed.FS to iterate over all files in ./assets/
entries, err := assetfs.ReadDir(dir)
if err != nil {
log.Fatalf("failed to read assets dir %s: %s", dir, err)
}
for _, entry := range entries {
fmt.Println(entry.Name())
}
for _, imagefile := range entries {
path := filepath.Join("assets", dir, imagefile.Name())
fmt.Printf("LOADING %s ... ", path)
fd, err := os.Open(path)
if err != nil {
log.Fatalf("failed to open image file %s: %s", imagefile.Name(), err)
}
defer fd.Close()
name := strings.TrimSuffix(imagefile.Name(), ".png")
img, _, err := image.Decode(fd)
if err != nil {
log.Fatalf("failed to decode image %s: %s", imagefile.Name(), err)
}
images[name] = ebiten.NewImageFromImage(img)
fmt.Printf("done\n")
}
return images
}