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, } }