fixed welcome layout and position

This commit is contained in:
Thomas von Dein 2024-02-17 19:28:56 +01:00
parent 3069d77189
commit 87a15ba74e
3 changed files with 111 additions and 22 deletions

View File

@ -11,13 +11,17 @@ import (
var FontRenderer = LoadFonts("fonts") var FontRenderer = LoadFonts("fonts")
const ( const (
GameFont string = "x12y20pxScanLine" GameFont string = "x12y20pxScanLine"
FontSize int = 16 FontSizeNormal int = 16
FontSizeBig int = 48
FontSizeSmall int = 8
) )
type Texter struct { type Texter struct {
Renderer *etxt.Renderer Renderer *etxt.Renderer
Font *font.Face FontNormal *font.Face
FontBig *font.Face
FontSmall *font.Face
} }
func LoadFonts(dir string) *Texter { func LoadFonts(dir string) *Texter {
@ -32,7 +36,19 @@ func LoadFonts(dir string) *Texter {
} }
gameface := truetype.NewFace(gamefont, &truetype.Options{ gameface := truetype.NewFace(gamefont, &truetype.Options{
Size: float64(FontSize), Size: float64(FontSizeNormal),
DPI: 72,
Hinting: font.HintingFull,
})
biggameface := truetype.NewFace(gamefont, &truetype.Options{
Size: float64(FontSizeBig),
DPI: 72,
Hinting: font.HintingFull,
})
smallgameface := truetype.NewFace(gamefont, &truetype.Options{
Size: float64(FontSizeSmall),
DPI: 72, DPI: 72,
Hinting: font.HintingFull, Hinting: font.HintingFull,
}) })
@ -58,7 +74,7 @@ func LoadFonts(dir string) *Texter {
renderer.SetCacheHandler(glyphsCache.NewHandler()) renderer.SetCacheHandler(glyphsCache.NewHandler())
renderer.SetFont(fontlib.GetFont(GameFont)) renderer.SetFont(fontlib.GetFont(GameFont))
return &Texter{Renderer: renderer, Font: &gameface} return &Texter{Renderer: renderer, FontNormal: &gameface, FontBig: &biggameface, FontSmall: &smallgameface}
} }
// helper function used with FontLibrary.EachFont to make sure // helper function used with FontLibrary.EachFont to make sure

View File

@ -61,7 +61,7 @@ func (scene *SelectScene) SetupUI() {
widget.ButtonOpts.Image(buttonImage), widget.ButtonOpts.Image(buttonImage),
widget.ButtonOpts.Text("Start new Game", *assets.FontRenderer.Font, &widget.ButtonTextColor{ widget.ButtonOpts.Text("Start new Game", *assets.FontRenderer.FontNormal, &widget.ButtonTextColor{
Idle: color.NRGBA{0xdf, 0xf4, 0xff, 0xff}, Idle: color.NRGBA{0xdf, 0xf4, 0xff, 0xff},
}), }),
@ -81,7 +81,6 @@ func (scene *SelectScene) SetupUI() {
rootContainer := widget.NewContainer( rootContainer := widget.NewContainer(
widget.ContainerOpts.BackgroundImage( widget.ContainerOpts.BackgroundImage(
// FIXME: see https://github.com/ebitenui/ebitenui/issues/118
image.NewNineSlice(assets.Assets["background-transparent"], [3]int{0, 1, 639}, [3]int{0, 1, 479})), image.NewNineSlice(assets.Assets["background-transparent"], [3]int{0, 1, 639}, [3]int{0, 1, 479})),
//widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(color.NRGBA{0x13, 0x1a, 0x22, 0xff})), //widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(color.NRGBA{0x13, 0x1a, 0x22, 0xff})),
//widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(color.NRGBA{0xff, 0x80, 0x00, 0x00})), //widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(color.NRGBA{0xff, 0x80, 0x00, 0x00})),

View File

@ -2,11 +2,12 @@ package game
import ( import (
"image/color" "image/color"
"log/slog"
"openquell/assets" "openquell/assets"
"github.com/ebitenui/ebitenui"
"github.com/ebitenui/ebitenui/image"
"github.com/ebitenui/ebitenui/widget"
"github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2"
"github.com/tinne26/etxt"
) )
type WelcomeScene struct { type WelcomeScene struct {
@ -14,10 +15,12 @@ type WelcomeScene struct {
Next SceneName Next SceneName
Whoami SceneName Whoami SceneName
UseCache bool UseCache bool
Ui *ebitenui.UI
} }
func NewWelcomeScene(game *Game) Scene { func NewWelcomeScene(game *Game) Scene {
scene := &WelcomeScene{Whoami: Welcome, Game: game, Next: Welcome} scene := &WelcomeScene{Whoami: Welcome, Game: game, Next: Welcome}
scene.SetupUI()
return scene return scene
} }
@ -32,31 +35,102 @@ func (scene *WelcomeScene) GetNext() SceneName {
func (scene *WelcomeScene) Update() error { func (scene *WelcomeScene) Update() error {
switch { switch {
case ebiten.IsKeyPressed(ebiten.KeyEnter): case ebiten.IsKeyPressed(ebiten.KeyEnter):
slog.Debug("welcome.Update() next")
scene.SetNext(Select) scene.SetNext(Select)
} }
scene.Ui.Update()
return nil return nil
} }
func (scene *WelcomeScene) Draw(screen *ebiten.Image) { func (scene *WelcomeScene) Draw(screen *ebiten.Image) {
screen.Clear() screen.Clear()
op := &ebiten.DrawImageOptions{} scene.Ui.Draw(screen)
/*
op := &ebiten.DrawImageOptions{}
background := assets.Assets["background-lila"]
screen.DrawImage(background, op)
blue := color.RGBA{0, 255, 128, 255}
assets.FontRenderer.Renderer.SetTarget(screen)
assets.FontRenderer.Renderer.SetColor(blue)
assets.FontRenderer.Renderer.SetAlign(etxt.YCenter, etxt.XCenter)
assets.FontRenderer.Renderer.SetSizePx(45)
assets.FontRenderer.Renderer.Draw("Welcome to Open Quell!", 320, 200)
assets.FontRenderer.Renderer.SetAlign(etxt.Top, etxt.Left)
assets.FontRenderer.Renderer.SetSizePx(32)
assets.FontRenderer.Renderer.Draw("[press enter to start]", 100, 300)
*/
}
func (scene *WelcomeScene) SetupUI() {
buttonImage, _ := loadButtonImage()
background := assets.Assets["background-lila"] background := assets.Assets["background-lila"]
screen.DrawImage(background, op)
blue := color.RGBA{0, 255, 128, 255} blue := color.RGBA{0, 255, 128, 255}
assets.FontRenderer.Renderer.SetTarget(screen) uiContainer := widget.NewContainer(
assets.FontRenderer.Renderer.SetColor(blue) widget.ContainerOpts.BackgroundImage(
assets.FontRenderer.Renderer.SetAlign(etxt.YCenter, etxt.XCenter) image.NewNineSlice(background, [3]int{0, 1, 639}, [3]int{0, 1, 479})),
assets.FontRenderer.Renderer.SetSizePx(45) widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
assets.FontRenderer.Renderer.Draw("Welcome to Open Quell!", 320, 200) )
assets.FontRenderer.Renderer.SetAlign(etxt.Top, etxt.Left) rowContainer := widget.NewContainer(
assets.FontRenderer.Renderer.SetSizePx(32) widget.ContainerOpts.WidgetOpts(
assets.FontRenderer.Renderer.Draw("[press enter to start]", 100, 300) widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
HorizontalPosition: widget.AnchorLayoutPositionCenter,
VerticalPosition: widget.AnchorLayoutPositionCenter,
}),
),
widget.ContainerOpts.Layout(widget.NewRowLayout(
widget.RowLayoutOpts.Direction(widget.DirectionVertical),
widget.RowLayoutOpts.Padding(widget.NewInsetsSimple(20)),
widget.RowLayoutOpts.Spacing(20),
)),
)
button := widget.NewButton(
widget.ButtonOpts.WidgetOpts(
widget.WidgetOpts.LayoutData(widget.RowLayoutData{
Position: widget.RowLayoutPositionCenter,
Stretch: false,
MaxWidth: 200,
MaxHeight: 100,
}),
),
widget.ButtonOpts.Image(buttonImage),
widget.ButtonOpts.Text("Start", *assets.FontRenderer.FontNormal, &widget.ButtonTextColor{
Idle: color.NRGBA{0xdf, 0xf4, 0xff, 0xff},
}),
widget.ButtonOpts.TextPadding(widget.Insets{
Left: 30,
Right: 30,
Top: 5,
Bottom: 5,
}),
widget.ButtonOpts.ClickedHandler(func(args *widget.ButtonClickedEventArgs) {
scene.SetNext(Play)
}),
)
label := widget.NewText(
widget.TextOpts.Text("Welcome to OpenQuell", *assets.FontRenderer.FontBig, blue),
widget.TextOpts.Position(widget.TextPositionCenter, widget.TextPositionCenter),
)
rowContainer.AddChild(label)
rowContainer.AddChild(button)
uiContainer.AddChild(rowContainer)
scene.Ui = &ebitenui.UI{
Container: uiContainer,
}
} }