49 lines
1.1 KiB
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)
|
|
}
|