ci-platforms / darwin amd64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 15m28s
ci / release (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 7m47s
29 lines
697 B
Go
29 lines
697 B
Go
package asset
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"aego/format/aetext"
|
|
)
|
|
|
|
func PresetComponent(n *aetext.Node, name string) (*aetext.Node, error) {
|
|
var component *aetext.Node
|
|
if n != nil && n.Head == "prefab" && len(n.Blocks) == 1 && n.Blocks[0].Head == "node" {
|
|
for _, b := range n.Blocks[0].Blocks {
|
|
switch b.Head {
|
|
case "node":
|
|
return nil, errors.New("component preset contains a child node")
|
|
case "component":
|
|
if component != nil {
|
|
return nil, errors.New("expected a single preset component")
|
|
}
|
|
component = b
|
|
}
|
|
}
|
|
}
|
|
if component == nil || component.Label != name {
|
|
return nil, errors.New("preset does not match the requested component")
|
|
}
|
|
return component, nil
|
|
}
|