doodle/pkg/balance/boolprops.go
Noah Petherbridge 8603c43c58 Gzip Compression for Levels and Doodads
* Levels and Doodad files will be written in gzip-compressed JSON format
* `boolProp compress-drawings false` to disable compression and save as
  classic JSON format directly
* The game can still read uncompressed JSON files

The file size savings on some built-in assets:

* Tutorial 2.level: 2.2M -> 414K (82% smaller)
* warp-door-orange.doodad: 105K -> 17K (84% smaller)
2021-07-13 20:06:57 -07:00

78 lines
2.0 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 },
},
}
// 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")
}