67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"tetris/assets"
|
|
"tetris/engine/audio"
|
|
"tetris/engine/core"
|
|
"tetris/engine/render"
|
|
"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 OptionsMenu struct {
|
|
sndVolume *widgets.Slider
|
|
list *layouts.ListBox
|
|
}
|
|
|
|
func soundVolumeChanged(widget *widgets.Slider) {
|
|
value := core.ByteToClampedFloat32(byte(widget.Value))
|
|
|
|
audio.SetVolume(value)
|
|
audio.Play(assets.SFX_MENU_SOUND_VOLUME_SELECT)
|
|
|
|
// Store in config and save
|
|
game.Config.SoundVolume = byte(widget.Value)
|
|
game.Config.Save()
|
|
}
|
|
|
|
func NewOptionsMenu() *OptionsMenu {
|
|
sndVolume := widgets.NewSlider(0, 255, 10).WithOnChange(soundVolumeChanged)
|
|
return &OptionsMenu{
|
|
sndVolume: sndVolume,
|
|
list: layouts.NewListBox([]ui.InputWidget{
|
|
layouts.NewInputControl(widgets.NewLabel("Sound Volume", 16), sndVolume),
|
|
}).Spacing(10).OnSelect(uievents.MenuSelect),
|
|
}
|
|
}
|
|
|
|
func (menu *OptionsMenu) Enter() {
|
|
vol := core.ClampedFloat32ToByte(audio.Volume())
|
|
menu.sndVolume.SetValue(int(vol))
|
|
}
|
|
|
|
func (OptionsMenu) Exit() {
|
|
}
|
|
|
|
func (menu *OptionsMenu) Update(fsm state.Transitioner, delta float32) {
|
|
if rl.IsKeyPressed(rl.KeyEscape) {
|
|
fsm.Switch("menu")
|
|
} else {
|
|
menu.list.HandleInput()
|
|
}
|
|
}
|
|
|
|
func (opt OptionsMenu) Render() {
|
|
render.Begin(rl.Black)
|
|
|
|
render.DrawTextCenter(340, 100, 32, "Options", rl.White)
|
|
opt.list.Draw(150, 200)
|
|
|
|
render.End()
|
|
}
|