feat(ui): menu should not call audio module directly, make it more modular with and onSelect event callback
This commit is contained in:
parent
bcd6025aa3
commit
a1756549f9
3 changed files with 27 additions and 10 deletions
|
|
@ -6,12 +6,13 @@ import (
|
||||||
"tetris/game"
|
"tetris/game"
|
||||||
"tetris/game/state"
|
"tetris/game/state"
|
||||||
"tetris/game/ui"
|
"tetris/game/ui"
|
||||||
|
"tetris/game/uievents"
|
||||||
|
|
||||||
rl "github.com/gen2brain/raylib-go/raylib"
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MainMenu struct {
|
type MainMenu struct {
|
||||||
menu ui.Menu
|
menu *ui.Menu
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMainMenu(fsm state.Transitioner) *MainMenu {
|
func NewMainMenu(fsm state.Transitioner) *MainMenu {
|
||||||
|
|
@ -19,7 +20,7 @@ func NewMainMenu(fsm state.Transitioner) *MainMenu {
|
||||||
menu: ui.NewMenu([]ui.Widget{
|
menu: ui.NewMenu([]ui.Widget{
|
||||||
ui.NewButton("Start", func() { fsm.Switch("gameplay") }),
|
ui.NewButton("Start", func() { fsm.Switch("gameplay") }),
|
||||||
ui.NewButton("Quit", func() { fsm.Switch("quit") }),
|
ui.NewButton("Quit", func() { fsm.Switch("quit") }),
|
||||||
}),
|
}).OnSelect(uievents.MenuSelect),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,29 @@
|
||||||
package ui
|
package ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"tetris/assets"
|
|
||||||
"tetris/engine/audio"
|
|
||||||
|
|
||||||
rl "github.com/gen2brain/raylib-go/raylib"
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type OnSelectCallback func()
|
||||||
|
|
||||||
type Menu struct {
|
type Menu struct {
|
||||||
selected int
|
selected int
|
||||||
entries []Widget
|
entries []Widget
|
||||||
|
onSelect OnSelectCallback
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMenu(entries []Widget) Menu {
|
func NewMenu(entries []Widget) *Menu {
|
||||||
return Menu{
|
return &Menu{
|
||||||
entries: entries,
|
entries: entries,
|
||||||
|
onSelect: func() {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (menu *Menu) OnSelect(callback OnSelectCallback) *Menu {
|
||||||
|
menu.onSelect = callback
|
||||||
|
return menu
|
||||||
|
}
|
||||||
|
|
||||||
func (menu Menu) Entries() []Widget {
|
func (menu Menu) Entries() []Widget {
|
||||||
return menu.entries
|
return menu.entries
|
||||||
}
|
}
|
||||||
|
|
@ -37,14 +43,14 @@ func (menu Menu) IsSelected(index int) bool {
|
||||||
func (menu *Menu) Next() {
|
func (menu *Menu) Next() {
|
||||||
if menu.selected+1 < len(menu.entries) {
|
if menu.selected+1 < len(menu.entries) {
|
||||||
menu.selected = menu.selected + 1
|
menu.selected = menu.selected + 1
|
||||||
audio.Play(assets.SFX_MENU_SELECT)
|
menu.onSelect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (menu *Menu) Previous() {
|
func (menu *Menu) Previous() {
|
||||||
if menu.selected-1 >= 0 {
|
if menu.selected-1 >= 0 {
|
||||||
menu.selected = menu.selected - 1
|
menu.selected = menu.selected - 1
|
||||||
audio.Play(assets.SFX_MENU_SELECT)
|
menu.onSelect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
10
game/uievents/select.go
Normal file
10
game/uievents/select.go
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
package uievents
|
||||||
|
|
||||||
|
import (
|
||||||
|
"tetris/assets"
|
||||||
|
"tetris/engine/audio"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MenuSelect() {
|
||||||
|
audio.Play(assets.SFX_MENU_SELECT)
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue