added welcome scene with text rendering using etxt

This commit is contained in:
2024-02-14 19:35:36 +01:00
parent 48396e7e0a
commit 4f5bbdc56a
9 changed files with 159 additions and 18 deletions

Binary file not shown.

59
assets/loader-fonts.go Normal file
View File

@@ -0,0 +1,59 @@
package assets
import (
"log"
"github.com/tinne26/etxt"
)
var FontRenderer = LoadFonts("fonts")
const (
GameFont string = "x12y20pxScanLine"
FontSize int = 16
)
type Texter struct {
Renderer *etxt.Renderer
}
func LoadFonts(dir string) *Texter {
fontlib := etxt.NewFontLibrary()
_, _, err := fontlib.ParseEmbedDirFonts(dir, assetfs)
if err != nil {
log.Fatalf("Error while loading fonts: %s", err.Error())
}
if !fontlib.HasFont(GameFont) {
log.Fatal("missing font: " + GameFont)
}
err = fontlib.EachFont(checkMissingRunes)
if err != nil {
log.Fatal(err)
}
renderer := etxt.NewStdRenderer()
glyphsCache := etxt.NewDefaultCache(10 * 1024 * 1024) // 10MB
renderer.SetCacheHandler(glyphsCache.NewHandler())
renderer.SetFont(fontlib.GetFont(GameFont))
return &Texter{renderer}
}
// helper function used with FontLibrary.EachFont to make sure
// all loaded fonts contain the characters or alphabet we want
func checkMissingRunes(name string, font *etxt.Font) error {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
const symbols = "0123456789 .,;:!?-()[]{}_&#@"
missing, err := etxt.GetMissingRunes(font, letters+symbols)
if err != nil {
return err
}
if len(missing) > 0 {
log.Fatalf("Font '%s' missing runes: %s", name, string(missing))
}
return nil
}

View File

@@ -16,7 +16,7 @@ import (
// Maps image name to image data
type AssetRegistry map[string]*ebiten.Image
//go:embed levels/*.lvl sprites/*.png
//go:embed levels/*.lvl sprites/*.png fonts/*.ttf
var assetfs embed.FS
var Assets = LoadImages("sprites")