#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
+#include <osgGA/KeySwitchMatrixManipulator>
+#include <osgGA/TrackballManipulator>
+#include <osgGA/FlightManipulator>
+#include <osgGA/DriveManipulator>
+#include <osgGA/TerrainManipulator>
#include <simgear/props/props.hxx>
+#include <simgear/props/props_io.hxx>
#include <simgear/misc/sg_path.hxx>
#include <simgear/scene/material/matlib.hxx>
#include <simgear/scene/tgdb/SGReaderWriterBTGOptions.hxx>
// ... for some reason, get rid of that FIXME!
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
+ // set up the camera manipulators.
+ osgGA::KeySwitchMatrixManipulator* keyswitchManipulator;
+ keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
+
+ osgGA::MatrixManipulator* mm = new osgGA::TrackballManipulator;
+ keyswitchManipulator->addMatrixManipulator('1', "Trackball", mm);
+ mm = new osgGA::FlightManipulator;
+ keyswitchManipulator->addMatrixManipulator('2', "Flight", mm);
+ mm = new osgGA::DriveManipulator;
+ keyswitchManipulator->addMatrixManipulator('3', "Drive", mm);
+ mm = new osgGA::TerrainManipulator;
+ keyswitchManipulator->addMatrixManipulator('4', "Terrain", mm);
+
+ viewer.setCameraManipulator(keyswitchManipulator);
+
// Usefull stats
viewer.addEventHandler(new osgViewer::HelpHandler);
viewer.addEventHandler(new osgViewer::StatsHandler);
if (fg_root_env)
fg_root = fg_root_env;
else
+#if defined(PKGDATADIR)
+ fg_root = PKGDATADIR;
+#else
fg_root = ".";
+#endif
+
+ osgDB::FilePathList filePathList;
+ filePathList.push_back(fg_root);
const char *fg_scenery_env = std::getenv("FG_SCENERY");
string_list path_list;
path.append("Scenery");
path_list.push_back(path.str());
}
- osgDB::FilePathList filePathList;
for (unsigned i = 0; i < path_list.size(); ++i) {
SGPath pt(path_list[i]), po(path_list[i]);
pt.append("Terrain");
}
SGSharedPtr<SGPropertyNode> props = new SGPropertyNode;
- props->getNode("sim/startup/season", true)->setStringValue("summer");
+ try {
+ SGPath preferencesFile = fg_root;
+ preferencesFile.append("preferences.xml");
+ readProperties(preferencesFile.str(), props);
+ } catch (...) {
+ // In case of an error, at least make summer :)
+ props->getNode("sim/startup/season", true)->setStringValue("summer");
+
+ std::cerr << "Problems loading FlightGear preferences.\n"
+ << "Probably FG_ROOT is not properly set." << std::endl;
+ }
SGMaterialLib* ml = new SGMaterialLib;
SGPath mpath(fg_root);
mpath.append("materials.xml");
std::cerr << "Problems loading FlightGear materials.\n"
<< "Probably FG_ROOT is not properly set." << std::endl;
}
+
+ // The file path list must be set in the registry.
+ osgDB::Registry::instance()->getDataFilePathList() = filePathList;
SGReaderWriterBTGOptions* btgOptions = new SGReaderWriterBTGOptions;
btgOptions->getDatabasePathList() = filePathList;