goap/nsUndefined.go
2025-04-09 16:41:53 +02:00

66 lines
1.5 KiB
Go

package goap
type UDIdData struct {
Next BaseApChain
Id string
}
func (u *UDIdData) GetSelfOrBase() (BaseApChain, bool) {
return u.Next, true
}
func (b *UDIdData) MarshalToMap() map[string]any {
return appendWithKey(b.Next.MarshalToMap(), KEY_ID, b.Id)
}
func ParseUDIdData(raw map[string]any, next BaseApChain) (BaseApChain, error) {
rawId, ok := raw[KEY_ID]
if !ok {
return nil, NoRequiredFieldError{KEY_ID}
}
id, ok := rawId.(string)
if !ok {
return nil, BadFieldValueError[string]{KEY_ID, rawId, ""}
}
delete(raw, KEY_ID)
return &UDIdData{
Next: next,
Id: id,
}, nil
}
func AppendUDIdData(base BaseApChain, id string) BaseApChain {
return &UDIdData{base, id}
}
type UDTypeData struct {
Next BaseApChain
Type string
}
func (u *UDTypeData) GetSelfOrBase() (BaseApChain, bool) {
return u.Next, true
}
func (u *UDTypeData) MarshalToMap() map[string]any {
return appendWithKey(u.Next.MarshalToMap(), KEY_TYPE, []any{u.Type})
}
func ParseUDTypeData(raw map[string]any, next BaseApChain) (BaseApChain, error) {
rawObjType, ok := raw[KEY_TYPE]
if !ok {
return nil, NoRequiredFieldError{KEY_TYPE}
}
objType, ok := rawObjType.([]string)
if !ok {
return nil, BadFieldValueError[[]string]{KEY_TYPE, rawObjType, []string{}}
}
if len(objType) != 1 {
return nil, BadFieldArrayLengthError{KEY_TYPE, 1, len(objType)}
}
return &UDTypeData{Next: next, Type: objType[0]}, nil
}
func AppendUDTypeData(base BaseApChain, typeString string) BaseApChain {
return &UDTypeData{base, typeString}
}