Noah Petherbridge
864156da53
* Added a Settings window for game options, such as enabling the horizontal toolbars in Edit Mode. The Settings window also has a Controls tab showing the gameplay buttons and keyboard shortcuts. * The Settings window is available as a button on the home screen OR from the Edit->Settings menu in the EditScene. * Bugfix: using WASD to move the player character now works better and is considered by the game to be identical to the arrow key inputs. Boy now updates his animation based on these keys, and they register as boolean on/off keys instead of affected by key-repeat. * Refactor the boolProps: they are all part of usercfg now, and if you run e.g. "boolProp show-all-doodads true" and then cause the user settings to save to disk, that boolProp will be permanently enabled until turned off again.
74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package balance
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"git.kirsle.net/apps/doodle/pkg/usercfg"
|
|
)
|
|
|
|
/*
|
|
Boolprop is a boolean setting that can be toggled in the game using the
|
|
developer console. Many of these consist of usercfg settings that are
|
|
not exposed to the Settings UI window, and secret testing functions.
|
|
Where one points to usercfg, check usercfg.Settings for documentation
|
|
about what that boolean does.
|
|
*/
|
|
type Boolprop struct {
|
|
Name string
|
|
Get func() bool
|
|
Set func(bool)
|
|
}
|
|
|
|
// Boolprops are the map of available boolprops, shown in the dev
|
|
// console when you type: "boolProp list"
|
|
var Boolprops = map[string]Boolprop{
|
|
"show-hidden-doodads": {
|
|
Get: func() bool { return usercfg.Current.ShowHiddenDoodads },
|
|
Set: func(v bool) { usercfg.Current.ShowHiddenDoodads = v },
|
|
},
|
|
"write-lock-override": {
|
|
Get: func() bool { return usercfg.Current.WriteLockOverride },
|
|
Set: func(v bool) { usercfg.Current.WriteLockOverride = v },
|
|
},
|
|
"pretty-json": {
|
|
Get: func() bool { return usercfg.Current.JSONIndent },
|
|
Set: func(v bool) { usercfg.Current.JSONIndent = v },
|
|
},
|
|
"horizontal-toolbars": {
|
|
Get: func() bool { return usercfg.Current.HorizontalToolbars },
|
|
Set: func(v bool) { usercfg.Current.HorizontalToolbars = v },
|
|
},
|
|
}
|
|
|
|
// GetBoolProp reads the current value of a boolProp.
|
|
// Special value "list" will error out with a list of available props.
|
|
func GetBoolProp(name string) (bool, error) {
|
|
if name == "list" {
|
|
var keys []string
|
|
for k := range Boolprops {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
return false, fmt.Errorf(
|
|
"boolprops: %s",
|
|
strings.Join(keys, ", "),
|
|
)
|
|
}
|
|
if prop, ok := Boolprops[name]; ok {
|
|
return prop.Get(), nil
|
|
}
|
|
return false, errors.New("no such boolProp")
|
|
}
|
|
|
|
// BoolProp allows easily setting a boolProp by name.
|
|
func BoolProp(name string, v bool) error {
|
|
if prop, ok := Boolprops[name]; ok {
|
|
prop.Set(v)
|
|
return nil
|
|
}
|
|
return errors.New("no such boolProp")
|
|
}
|