1
0
Fork 0

feat(ui): menu should not call audio module directly, make it more modular with and onSelect event callback

This commit is contained in:
Henrik Hautakoski 2025-10-19 11:56:13 +02:00
parent 5f82162201
commit 4863afe5ca
3 changed files with 27 additions and 10 deletions

View file

@ -6,12 +6,13 @@ import (
"tetris/game"
"tetris/game/state"
"tetris/game/ui"
"tetris/game/uievents"
rl "github.com/gen2brain/raylib-go/raylib"
)
type MainMenu struct {
menu ui.Menu
menu *ui.Menu
}
func NewMainMenu(fsm state.Transitioner) *MainMenu {
@ -19,7 +20,7 @@ func NewMainMenu(fsm state.Transitioner) *MainMenu {
menu: ui.NewMenu([]ui.Widget{
ui.NewButton("Start", func() { fsm.Switch("gameplay") }),
ui.NewButton("Quit", func() { fsm.Switch("quit") }),
}),
}).OnSelect(uievents.MenuSelect),
}
}

View file

@ -1,23 +1,29 @@
package ui
import (
"tetris/assets"
"tetris/engine/audio"
rl "github.com/gen2brain/raylib-go/raylib"
)
type OnSelectCallback func()
type Menu struct {
selected int
entries []Widget
onSelect OnSelectCallback
}
func NewMenu(entries []Widget) Menu {
return Menu{
entries: entries,
func NewMenu(entries []Widget) *Menu {
return &Menu{
entries: entries,
onSelect: func() {},
}
}
func (menu *Menu) OnSelect(callback OnSelectCallback) *Menu {
menu.onSelect = callback
return menu
}
func (menu Menu) Entries() []Widget {
return menu.entries
}
@ -37,14 +43,14 @@ func (menu Menu) IsSelected(index int) bool {
func (menu *Menu) Next() {
if menu.selected+1 < len(menu.entries) {
menu.selected = menu.selected + 1
audio.Play(assets.SFX_MENU_SELECT)
menu.onSelect()
}
}
func (menu *Menu) Previous() {
if menu.selected-1 >= 0 {
menu.selected = menu.selected - 1
audio.Play(assets.SFX_MENU_SELECT)
menu.onSelect()
}
}

10
game/uievents/select.go Normal file
View file

@ -0,0 +1,10 @@
package uievents
import (
"tetris/assets"
"tetris/engine/audio"
)
func MenuSelect() {
audio.Play(assets.SFX_MENU_SELECT)
}