doodle/pkg/balance/boolprops.go
Noah Petherbridge d694fcc7c2 Fix climbing on the right bug + eager-render boolprop
* New boolProp to help debug memory issues: eager-render, set it to
  false and the loadscreen will not eagerload Go images for all the
  level chunks.
* Finally fix the level collision bug where the player could climb walls
  to the right.
2022-04-09 18:21:26 -07:00

82 lines
2.2 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 },
},
"compress-drawings": {
Get: func() bool { return CompressDrawings },
Set: func(v bool) { CompressDrawings = v },
},
"eager-render": {
Get: func() bool { return EagerRenderLevelChunks },
Set: func(v bool) { EagerRenderLevelChunks = 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")
}