openquell/game/welcome_scene.go

137 lines
3.3 KiB
Go

package game
import (
"image/color"
"openquell/assets"
"github.com/ebitenui/ebitenui"
"github.com/ebitenui/ebitenui/image"
"github.com/ebitenui/ebitenui/widget"
"github.com/hajimehoshi/ebiten/v2"
)
type WelcomeScene struct {
Game *Game
Next SceneName
Whoami SceneName
UseCache bool
Ui *ebitenui.UI
}
func NewWelcomeScene(game *Game) Scene {
scene := &WelcomeScene{Whoami: Welcome, Game: game, Next: Welcome}
scene.SetupUI()
return scene
}
func (scene *WelcomeScene) SetNext(next SceneName) {
scene.Next = next
}
func (scene *WelcomeScene) GetNext() SceneName {
return scene.Next
}
func (scene *WelcomeScene) Update() error {
switch {
case ebiten.IsKeyPressed(ebiten.KeyEnter):
scene.SetNext(Select)
}
scene.Ui.Update()
return nil
}
func (scene *WelcomeScene) Draw(screen *ebiten.Image) {
screen.Clear()
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"]
blue := color.RGBA{0, 255, 128, 255}
uiContainer := widget.NewContainer(
widget.ContainerOpts.BackgroundImage(
image.NewNineSlice(background, [3]int{0, 1, 639}, [3]int{0, 1, 479})),
widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
)
rowContainer := widget.NewContainer(
widget.ContainerOpts.WidgetOpts(
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,
}
}