From b75e1af83856c916744062475f71a96e765e9d7e Mon Sep 17 00:00:00 2001 From: curt Date: Mon, 4 Jun 2001 21:38:44 +0000 Subject: [PATCH] More tweaks related to David's input patches. --- src/Main/fg_commands.cxx | 43 ++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index b544f79cb..860f9a1f9 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -13,6 +13,16 @@ #include "globals.hxx" +/** + * Built-in command: do nothing. + */ +static bool +do_null (const SGPropertyNode * arg) +{ + return true; +} + + /** * Built-in command: exit FlightGear. * @@ -59,7 +69,7 @@ do_screen_capture (const SGPropertyNode * arg) static bool do_property_toggle (const SGPropertyNode * arg) { - string propname = arg->getStringValue("property", ""); + const string & propname = arg->getStringValue("property", ""); if (propname == "") return false; @@ -77,7 +87,7 @@ do_property_toggle (const SGPropertyNode * arg) static bool do_property_assign (const SGPropertyNode * arg) { - string propname = arg->getStringValue("property", ""); + const string & propname = arg->getStringValue("property", ""); if (propname == "") return false; @@ -111,7 +121,7 @@ do_property_assign (const SGPropertyNode * arg) static bool do_property_adjust (const SGPropertyNode * arg) { - string propname = arg->getStringValue("property", ""); + const string & propname = arg->getStringValue("property", ""); if (propname == "") return false; @@ -150,19 +160,38 @@ do_property_adjust (const SGPropertyNode * arg) static bool do_property_swap (const SGPropertyNode * arg) { - string propname1 = arg->getStringValue("property[0]", ""); - string propname2 = arg->getStringValue("property[1]", ""); + const string &propname1 = arg->getStringValue("property[0]", ""); + const string &propname2 = arg->getStringValue("property[1]", ""); if (propname1 == "" || propname2 == "") return false; SGPropertyNode * node1 = fgGetNode(propname1, true); SGPropertyNode * node2 = fgGetNode(propname2, true); - string tmp = node1->getStringValue(); + const string & tmp = node1->getStringValue(); return (node1->setUnknownValue(node2->getStringValue()) && node2->setUnknownValue(tmp)); } +/** + * Set a property to an axis or other moving input. + * + * property: the name of the property to set. + * setting: the current input setting, usually between -1.0 and 1.0. + * offset: the offset to shift by, before applying the factor. + * factor: the factor to multiply by (use negative to reverse). + */ +static bool +do_property_scale (const SGPropertyNode * arg) +{ + const string &propname = arg->getStringValue("property"); + double setting = arg->getDoubleValue("setting", 0.0); + double offset = arg->getDoubleValue("offset", 0.0); + double factor = arg->getDoubleValue("factor", 1.0); + return fgSetDouble(propname, (setting + offset) * factor); +} + + /** * Table of built-in commands. @@ -174,6 +203,7 @@ static struct { const char * name; SGCommandMgr::command_t command; } built_ins [] = { + "null", do_null, "exit", do_exit, "view-cycle", do_view_cycle, "screen-capture", do_screen_capture, @@ -181,6 +211,7 @@ static struct { "property-assign", do_property_assign, "property-adjust", do_property_adjust, "property-swap", do_property_swap, + "property-scale", do_property_scale, 0, 0 // zero-terminated }; -- 2.39.5