56 lines
1.2 KiB
Go
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
|
|
}
|