1
0
Fork 0
tetris-go/game/ui/menu.go

65 lines
1.1 KiB
Go

package ui
import (
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,
onSelect: func() {},
}
}
func (menu *Menu) OnSelect(callback OnSelectCallback) *Menu {
menu.onSelect = callback
return menu
}
func (menu Menu) Entries() []Widget {
return menu.entries
}
func (menu *Menu) Select(index int) {
menu.selected = min(index, len(menu.entries)-1)
}
func (menu Menu) Selected() Widget {
return menu.entries[menu.selected]
}
func (menu Menu) IsSelected(index int) bool {
return menu.selected == index
}
func (menu *Menu) Next() {
if menu.selected+1 < len(menu.entries) {
menu.selected = menu.selected + 1
menu.onSelect()
}
}
func (menu *Menu) Previous() {
if menu.selected-1 >= 0 {
menu.selected = menu.selected - 1
menu.onSelect()
}
}
func (menu *Menu) HandleInput() {
if rl.IsKeyPressed(rl.KeyDown) {
menu.Next()
} else if rl.IsKeyPressed(rl.KeyUp) {
menu.Previous()
} else {
menu.Selected().HandleInput()
}
}