#include #include #include #include #include #include #include using namespace osg; extern Node *makeTerrain( void ); extern Node *makeTrees( void ); extern Node *makeTank( void ); extern Node *makeWindsocks( void ); extern Node *makeGliders( void ); extern Node *makeGlider( void ); extern Node *makeSky( void ); extern Node *makeBase( void ); extern Node *makeClouds( void ); static struct _nodes { char *name; Node *(*fptr)(void); } nodes[] = { { "terrain", makeTerrain }, { "tank", makeTank }, { "sky", makeSky }, { "base", makeBase }, { "trees", makeTrees }, // { "gliders", makeGliders }, // { "clouds", makeClouds }, { 0L, 0L } }; class ReaderWriterFLY : public osgDB::ReaderWriter { public: virtual const char* className() { return "FLY Database Reader"; } virtual bool acceptsExtension(const std::string& extension) { return osgDB::equalCaseInsensitive(extension,"fly"); } virtual ReadResult readNode(const std::string& fileName,const osgDB::ReaderWriter::Options*) { std::string ext = osgDB::getFileExtension(fileName); if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; char buff[256]; notify(INFO)<< "ReaderWriterFLY::readNode( "<name; nptr ++ ) { if( !strncmp( buff, nptr->name, strlen( nptr->name ) )) { Node *node = nptr->fptr(); node->setName( nptr->name ); grp->addChild( node ); break; } } } fclose( fp ); return grp; } }; // now register with osgDB::Registry to instantiate the above // reader/writer. osgDB::RegisterReaderWriterProxy g_readerWriter_FLY_Proxy;