Files
rabbitroller/lib/assets.go
T
2026-05-28 19:27:23 +02:00

56 lines
1.2 KiB
Go

package lib
import (
"bytes"
"fmt"
"image/png"
"io/fs"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/text/v2"
"golang.org/x/image/font/gofont/gobold"
)
type Assets struct {
Bg *ebiten.Image
Scooter *ebiten.Image
Rabbit [4]*ebiten.Image
HudFont *text.GoTextFace
}
func LoadAssets(assetsFS fs.FS) (*Assets, error) {
src, err := text.NewGoTextFaceSource(bytes.NewReader(gobold.TTF))
if err != nil {
return nil, fmt.Errorf("load font: %w", err)
}
a := &Assets{
HudFont: &text.GoTextFace{Source: src, Size: 8},
}
if a.Bg, err = loadImage(assetsFS, "assets/background.png"); err != nil {
return nil, err
}
if a.Scooter, err = loadImage(assetsFS, "assets/scooter.png"); err != nil {
return nil, err
}
for i := range a.Rabbit {
name := fmt.Sprintf("assets/rabbit_f%d.png", i)
if a.Rabbit[i], err = loadImage(assetsFS, name); err != nil {
return nil, err
}
}
return a, nil
}
func loadImage(assetsFS fs.FS, name string) (*ebiten.Image, error) {
f, err := assetsFS.Open(name)
if err != nil {
return nil, fmt.Errorf("open %s: %w", name, err)
}
defer f.Close()
img, err := png.Decode(f)
if err != nil {
return nil, fmt.Errorf("decode %s: %w", name, err)
}
return ebiten.NewImageFromImage(img), nil
}