1
0
Fork 0

Compare commits

...

3 commits

Author SHA1 Message Date
eb7486f57c feat(menu): play "menu enter" sound when button action is triggered 2025-10-28 09:52:58 +01:00
ef798896c3 feat(menu): use list.SetSelected() on Enter() so that no audio is played. 2025-10-28 09:47:50 +01:00
f3d7995bc2 feat(ui): add ListBox.SetSelected()
this function will set the selected widget without triggering a onSelect event.
2025-10-28 09:47:19 +01:00
2 changed files with 20 additions and 5 deletions

View file

@ -2,6 +2,7 @@ package handlers
import ( import (
"tetris/assets" "tetris/assets"
"tetris/engine/audio"
"tetris/engine/render" "tetris/engine/render"
"tetris/game" "tetris/game"
"tetris/game/state" "tetris/game/state"
@ -17,19 +18,26 @@ type MainMenu struct {
list *layouts.ListBox list *layouts.ListBox
} }
func enterState(fsm state.Transitioner, state string) func() {
return func() {
audio.Play(assets.SFX_MENU_ENTER)
fsm.Switch(state)
}
}
func NewMainMenu(fsm state.Transitioner) *MainMenu { func NewMainMenu(fsm state.Transitioner) *MainMenu {
return &MainMenu{ return &MainMenu{
list: layouts.NewListBox([]ui.InputWidget{ list: layouts.NewListBox([]ui.InputWidget{
widgets.NewButton("Start", 32, func() { fsm.Switch("gameplay") }), widgets.NewButton("Start", 32, enterState(fsm, "gameplay")),
widgets.NewButton("Options", 32, func() { fsm.Switch("options") }), widgets.NewButton("Options", 32, enterState(fsm, "options")),
widgets.NewButton("Quit", 32, func() { fsm.Switch("quit") }), widgets.NewButton("Quit", 32, enterState(fsm, "quit")),
}).Spacing(10). }).Spacing(10).
OnSelect(uievents.MenuSelect), OnSelect(uievents.MenuSelect),
} }
} }
func (main *MainMenu) Enter() { func (main *MainMenu) Enter() {
main.list.Select(0) main.list.SetSelected(0)
} }
func (MainMenu) Exit() { func (MainMenu) Exit() {

View file

@ -42,12 +42,19 @@ func (lb ListBox) Entries() []ui.InputWidget {
} }
func (lb *ListBox) Select(index int) { func (lb *ListBox) Select(index int) {
if lb.SetSelected(index) {
lb.onSelect()
}
}
func (lb *ListBox) SetSelected(index int) bool {
if index >= 0 && index < len(lb.entries) { if index >= 0 && index < len(lb.entries) {
lb.entries[lb.selected].SetFocus(false) lb.entries[lb.selected].SetFocus(false)
lb.selected = index lb.selected = index
lb.entries[lb.selected].SetFocus(true) lb.entries[lb.selected].SetFocus(true)
lb.onSelect() return true
} }
return false
} }
func (lb ListBox) Selected() ui.InputWidget { func (lb ListBox) Selected() ui.InputWidget {