void ModelViewerModule::Init(const rArrayString& args) { auto createControllerFunc = [&](const rString& name, rEngine* engine, ruiDocument* document) { return new ModelViewerController(_skeletonGeometry.get(), name, engine, document); }; auto deleteControllerFunc = [](ruiController* controller) { delete controller; }; _engine->ui->RegisterControllerClass("ModelViewerController", createControllerFunc, deleteControllerFunc); Model* model = nullptr; rString file, archive; ParseArgs(args, file, archive); if (!archive.empty()) { _engine->resources->OpenArchive(archive); model = _engine->content->Models()->LoadFromResource(file, "model"); } else { auto fileSystemRef = _engine->filesystem->OpenReadFileRef(file); ModelData modelData; modelData.Read(*fileSystemRef); _engine->filesystem->CloseReadFileRef(fileSystemRef); model = _engine->content->Models()->LoadFromData(modelData, "model"); } if (model->GetSkeleton()) { rPawn* pawn = new rPawn(model, "model", _engine); _skeletonGeometry.reset(new SkeletonGeometry(_engine, pawn)); _engine->scene->AddActor(pawn); } else { rProp* prop = new rProp(model, "model", _engine); _engine->scene->AddActor(prop); } rViewport* mainViewport = CreateView(model, _engine); _engine->ui->LoadUiDocument("C:/development/recondite/samples/modelviewer/modelviewer/modelviewer.xml", mainViewport); }