1
0
Fork 0

feat(ui): implement new ui system

This commit is contained in:
Henrik Hautakoski 2025-10-27 20:17:13 +01:00
parent d407eaad8b
commit 6cf0e4abb4
11 changed files with 430 additions and 113 deletions

View file

@ -6,33 +6,37 @@ import (
"tetris/game"
"tetris/game/state"
"tetris/game/ui"
"tetris/game/ui/layouts"
"tetris/game/ui/widgets"
"tetris/game/uievents"
rl "github.com/gen2brain/raylib-go/raylib"
)
type MainMenu struct {
menu *ui.Menu
list *layouts.ListBox
}
func NewMainMenu(fsm state.Transitioner) *MainMenu {
return &MainMenu{
menu: ui.NewMenu([]ui.Widget{
ui.NewButton("Start", func() { fsm.Switch("gameplay") }),
ui.NewButton("Quit", func() { fsm.Switch("quit") }),
}).OnSelect(uievents.MenuSelect),
list: layouts.NewListBox([]ui.InputWidget{
widgets.NewButton("Start", 32, func() { fsm.Switch("gameplay") }),
widgets.NewButton("Options", 32, func() { fsm.Switch("options") }),
widgets.NewButton("Quit", 32, func() { fsm.Switch("quit") }),
}).Spacing(10).
OnSelect(uievents.MenuSelect),
}
}
func (main *MainMenu) Enter() {
main.menu.Select(0)
main.list.Select(0)
}
func (MainMenu) Exit() {
}
func (menu *MainMenu) Update(fsm state.Transitioner, delta float32) {
menu.menu.HandleInput()
menu.list.HandleInput()
}
func (MainMenu) renderLogo(offset_x, offset_y int32) {
@ -57,19 +61,11 @@ func (MainMenu) renderLogo(offset_x, offset_y int32) {
}
}
func (menu MainMenu) renderEntries(offset_x, offset_y int32) {
y := offset_y
for i, entry := range menu.menu.Entries() {
entry.Draw(offset_x, y, menu.menu.IsSelected(i))
y += 40
}
}
func (menu MainMenu) Render() {
render.Begin(rl.Black)
menu.renderLogo(20, 150)
menu.renderEntries(340, 400)
menu.list.Draw(340, 400)
render.End()
}