doodle/pkg/level/actor_options.go

49 lines
1.1 KiB
Go

package level
import (
"fmt"
"strconv"
"git.kirsle.net/SketchyMaze/doodle/pkg/log"
)
// Option for runtime, user configurable overrides of Doodad Options.
type Option struct {
Type string `json:"type"` // bool, str, int
Name string `json:"name"`
Value interface{} `json:"value"`
}
// SetOption sets an actor option, safely.
func (a *Actor) SetOption(name, dataType, v string) string {
if _, ok := a.Options[name]; !ok {
a.Options[name] = &Option{
Type: dataType,
Name: name,
}
}
return a.Options[name].Set(v)
}
// Set an option value. Generally do not call this yourself - use SetOption
// to safely set an option which will create the map value the first time.
func (o *Option) Set(v string) string {
switch o.Type {
case "bool":
o.Value = v == "true"
case "str":
o.Value = v
case "int":
if val, err := strconv.Atoi(v); err != nil {
log.Error("Actor Option.Set: not an int: %v", val)
o.Value = 0
} else {
o.Value = val
}
default:
log.Error("Actor Option.Set: don't know how to set a %s type", o.Type)
}
return fmt.Sprintf("%v", o.Value)
}