#include <simgear/math/sg_random.h>
#include <simgear/misc/sgstream.hxx>
#include <simgear/misc/sg_path.hxx>
+#include <simgear/scene/material/mat.hxx>
// #include <Include/general.hxx>
// #include <Airports/simple.hxx>
#endif
}
-
/**
* Set a few fail-safe default property values.
*
fgSetBool("/sim/rendering/shading", true);
fgSetBool("/sim/rendering/skyblend", true);
fgSetBool("/sim/rendering/textures", true);
+ fgTie( "/sim/rendering/filtering", SGGetTextureFilter, SGSetTextureFilter, false);
+ fgSetInt("/sim/rendering/filtering", 1);
fgSetBool("/sim/rendering/wireframe", false);
fgSetBool("/sim/rendering/horizon-effect", false);
fgSetBool("/sim/rendering/enhanced-lighting", false);
static bool
add_channel( const string& type, const string& channel_str ) {
SG_LOG(SG_GENERAL, SG_INFO, "Channel string = " << channel_str );
-
globals->get_channel_options_list()->push_back( type + "," + channel_str );
-
- // cout << "here" << endl;
-
return true;
}
{"enable-skyblend", false, OPTION_BOOL, "/sim/rendering/skyblend", true, "", 0 },
{"disable-textures", false, OPTION_BOOL, "/sim/rendering/textures", false, "", 0 },
{"enable-textures", false, OPTION_BOOL, "/sim/rendering/textures", true, "", 0 },
+ {"texture-filtering", false, OPTION_INT, "/sim/rendering/filtering", 1, "", 0 },
{"disable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", false, "", 0 },
{"enable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", true, "", 0 },
{"geometry", true, OPTION_FUNC, "", false, "", fgOptGeometry },
};
+// Set a property for the --prop: option. Syntax: --prop:[<type>:]<name>=<value>
+// <type> can be "double" etc. but also only the first letter "d".
+// Examples: --prop:alpha=1 --prop:bool:beta=true --prop:d:gamma=0.123
+static bool
+set_property(const string& arg)
+{
+ string::size_type pos = arg.find('=');
+ if (pos == arg.npos || pos == 0 || pos + 1 == arg.size())
+ return false;
+
+ string name = arg.substr(0, pos);
+ string value = arg.substr(pos + 1);
+ string type;
+ pos = name.find(':');
+
+ if (pos != name.npos && pos != 0 && pos + 1 != name.size()) {
+ type = name.substr(0, pos);
+ name = name.substr(pos + 1);
+ }
+ SGPropertyNode *n = fgGetNode(name.c_str(), true);
+
+ if (type.empty())
+ return n->setUnspecifiedValue(value.c_str());
+ else if (type == "s" || type == "string")
+ return n->setStringValue(value.c_str());
+ else if (type == "d" || type == "double")
+ return n->setDoubleValue(strtod(value.c_str(), 0));
+ else if (type == "f" || type == "float")
+ return n->setFloatValue(atof(value.c_str()));
+ else if (type == "l" || type == "long")
+ return n->setLongValue(strtol(value.c_str(), 0, 0));
+ else if (type == "i" || type == "int")
+ return n->setIntValue(atoi(value.c_str()));
+ else if (type == "b" || type == "bool")
+ return n->setBoolValue(value == "true" || atoi(value.c_str()) != 0);
+
+ return false;
+}
+
+
// Parse a single option
static int
parse_option (const string& arg)
} else if ( arg.find( "--show-aircraft") == 0) {
return(FG_OPTIONS_SHOW_AIRCRAFT);
} else if ( arg.find( "--prop:" ) == 0 ) {
- string assign = arg.substr(7);
- string::size_type pos = assign.find('=');
- if ( pos == arg.npos || pos == 0 || pos + 1 == assign.size() ) {
- SG_LOG( SG_GENERAL, SG_ALERT, "Bad property assignment: " << arg );
+ if (!set_property(arg.substr(7))) {
+ SG_LOG( SG_GENERAL, SG_ALERT, "Bad property assignment: " << arg );
return FG_OPTIONS_ERROR;
- } else {
- string name = assign.substr(0, pos);
- string value = assign.substr(pos + 1);
- fgSetString(name.c_str(), value.c_str());
}
} else if ( arg.find( "--" ) == 0 ) {
size_t pos = arg.find( '=' );
msg += tmp + '\n';
msg.append(32, ' ');
}
- char cstr[96];
- if (tmp.size() <= 25) {
- snprintf(cstr, 96, " --%-27s", tmp.c_str());
- } else {
- snprintf(cstr, 96, "\n --%s\n%32c", tmp.c_str(), ' ');
- }
-
// There may be more than one <description> tag assosiated
// with one option