package main import ( "fmt" "log" "muhq.space/muhqs-game/go/activities" "muhq.space/muhqs-game/go/ui" ) type settings struct { gameplay map[string]any } func newSettings() *settings { return &settings{ gameplay: map[string]any{ "autoProgressPrompt": true, }, } } func newSettingsMenu(g *Game) *activities.ButtonList { var bl *activities.ButtonList s := g.settings labels := make([]string, 0, len(s.gameplay)) handlers := make([]func(*ui.SimpleButton), 0, len(s.gameplay)) for k, v := range s.gameplay { name := "gameplay." + k labels = append(labels, fmt.Sprintf("%s: %v", name, v)) handlers = append(handlers, func(btn *ui.SimpleButton) { switch typedVal := v.(type) { case bool: s.gameplay[k] = !typedVal default: log.Panicf("Unhandled settings %s type %T", name, typedVal) } btn.UpdateLabel(fmt.Sprintf("%s: %v", name, s.gameplay[k])) }) } bl = activities.NewButtonList(g.Width, g.Height, labels, handlers) return bl }