bool QueryResourcesCB(void* caller, NetRequest* req) { SmartBody::SBScene* sbScene = SmartBody::SBScene::getScene(); std::vector<std::string> args = req->Args(); switch (req->Rid()) { case NetRequest::Get_Seq_Asset_Paths: for (size_t i = 0; i < args.size(); i++) sbScene->addAssetPath("script", args[i]); break; case NetRequest::Get_ME_Asset_Paths: for (size_t i = 0; i < args.size(); i++) sbScene->addAssetPath("motion", args[i]); break; case NetRequest::Get_Audio_Asset_Paths: for (size_t i = 0; i < args.size(); i++) sbScene->addAssetPath("audio", args[i]); break; case NetRequest::Get_Mesh_Asset_Paths: for (size_t i = 0; i < args.size(); i++) sbScene->addAssetPath("mesh", args[i]); break; case NetRequest::Get_Script_Names: break; case NetRequest::Get_Service_Names: break; case NetRequest::Get_Motion_Names: for (size_t i = 0; i < args.size(); i++) { SmartBody::SBMotion* motion = SmartBody::SBScene::getScene()->getAssetManager()->createMotion(args[i]); } break; case NetRequest::Get_Skeleton_Names: break; case NetRequest::Get_BoneMap_Names: break; case NetRequest::Get_EventHandler_Names: break; case NetRequest::Get_Scene_Scale: float scale = (float)vhcl::ToDouble(req->ArgsAsString()); sbScene->setScale(scale); break; } return true; }
int main_sb( int argc, char** argv ) { osg::ArgumentParser arguments( &argc, argv ); SmartBody::SBScene* scene = SmartBody::SBScene::getScene(); scene->setMediaPath( "./smartbody/" ); // data/ scene->addAssetPath( "motion", "ChrBrad" ); scene->addAssetPath( "mesh", "mesh"); scene->addAssetPath( "script", "scripts"); scene->loadAssets(); int numMotions = scene->getNumMotions(); std::cout << "Loaded motions: " << numMotions << std::endl; SmartBody::SBCharacter* character = scene->createCharacter( "mycharacter", "" ); SmartBody::SBSkeleton* skeleton = scene->createSkeleton( "ChrBrad.sk" ); character->setSkeleton( skeleton ); character->createStandardControllers(); SmartBody::SBSimulationManager* sim = scene->getSimulationManager(); sim->setupTimer(); osg::ref_ptr<osg::Group> root = new osg::Group; osgViewer::Viewer viewer; viewer.setCameraManipulator( new osgGA::TrackballManipulator ); viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); viewer.addEventHandler( new osgViewer::StatsHandler ); viewer.addEventHandler( new osgViewer::WindowSizeHandler ); viewer.setSceneData( root.get() ); viewer.setUpViewOnSingleScreen( 1 ); std::string ret = scene->getBmlProcessor()->execBML( "mycharacter", "<body posture=\"ChrBrad@Idle01\"/>" ); sim->start(); while ( !viewer.done() ) { scene->update(); int numCharacters = scene->getNumCharacters(); if (numCharacters == 0) return true; sim->updateTimer(); viewer.frame(); } sim->stop(); return 0; }