73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"aego/asset/importers/preset"
|
|
"sort"
|
|
|
|
"aego/asset/importers/atlas"
|
|
"aego/asset/importers/scenefile"
|
|
scriptImporter "aego/asset/importers/script"
|
|
texImporter "aego/asset/importers/texture"
|
|
"aego/asset/pipeline"
|
|
"aego/core/errs"
|
|
"aego/core/log"
|
|
"aego/engine/module"
|
|
"aego/script/workspace"
|
|
)
|
|
|
|
func CoreImporters() (*pipeline.ImporterRegistry, error) {
|
|
reg := pipeline.NewImporterRegistry()
|
|
for _, imp := range []pipeline.Importer{
|
|
atlas.Wrap(texImporter.New()),
|
|
scenefile.NewScene(),
|
|
scenefile.NewPrefab(),
|
|
preset.New(),
|
|
} {
|
|
if err := reg.Register(imp); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return reg, nil
|
|
}
|
|
|
|
func DevImporters(ws *workspace.Workspace, man *module.Manifest) (*pipeline.ImporterRegistry, error) {
|
|
imps, err := CoreImporters()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
env := &pipeline.DevEnv{Workspace: ws}
|
|
for _, h := range man.Dev {
|
|
fn, ok := h.Fn.(func(*pipeline.ImporterRegistry, *pipeline.DevEnv) error)
|
|
if !ok {
|
|
return nil, errs.New(errs.EngineModule, "dev hook of "+h.Owner+" has an unsupported type", log.F("module", h.Owner))
|
|
}
|
|
if err := fn(imps, env); err != nil {
|
|
return nil, errs.Wrap(err, errs.EngineModule, "dev hook of "+h.Owner+" failed").With(log.F("module", h.Owner))
|
|
}
|
|
}
|
|
return imps, nil
|
|
}
|
|
|
|
func ScriptErrors(pl *pipeline.Pipeline) []string {
|
|
seen := map[string]bool{}
|
|
var out []string
|
|
for _, a := range pl.Assets() {
|
|
if a.Importer != scriptImporter.ImporterID || a.Error == "" || seen[a.Error] {
|
|
continue
|
|
}
|
|
seen[a.Error] = true
|
|
out = append(out, a.Error)
|
|
}
|
|
sort.Strings(out)
|
|
return out
|
|
}
|
|
|
|
func ScriptImporter(imps *pipeline.ImporterRegistry) *scriptImporter.Importer {
|
|
imp, ok := imps.ByID(scriptImporter.ImporterID)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
si, _ := imp.(*scriptImporter.Importer)
|
|
return si
|
|
}
|