added welcome scene with text rendering using etxt
This commit is contained in:
BIN
assets/fonts/x12y20pxScanLine.ttf
Normal file
BIN
assets/fonts/x12y20pxScanLine.ttf
Normal file
Binary file not shown.
59
assets/loader-fonts.go
Normal file
59
assets/loader-fonts.go
Normal 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
|
||||
}
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user