X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScripting%2FNasalPositioned.cxx;h=1d2b41402a28a71b02f12e0266a2f66463f20af4;hb=accdf97785593046744cebbcdc467b4e52a86ebd;hp=11ca31bf72e7c5ae98880b3d1ebf62a6357c5abe;hpb=f0011bc759b2c0bf70e1628ce5eb9c26a27b83c8;p=flightgear.git diff --git a/src/Scripting/NasalPositioned.cxx b/src/Scripting/NasalPositioned.cxx index 11ca31bf7..1d2b41402 100644 --- a/src/Scripting/NasalPositioned.cxx +++ b/src/Scripting/NasalPositioned.cxx @@ -124,6 +124,17 @@ static naRef stringToNasal(naContext c, const std::string& s) s.length()); } +static bool convertToNum(naRef v, double& result) +{ + naRef n = naNumValue(v); + if (naIsNil(n)) { + return false; // couldn't convert + } + + result = n.num; + return true; +} + static WayptFlag wayptFlagFromString(const char* s) { if (!strcmp(s, "sid")) return WPT_DEPARTURE; @@ -2186,20 +2197,13 @@ static naRef f_leg_setSpeed(naContext c, naRef me, int argc, naRef* args) if (!leg) { naRuntimeError(c, "leg.setSpeed called on non-flightplan-leg object"); } - - if (argc < 2) { - naRuntimeError(c, "bad arguments to leg.setSpeed"); - } - - RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1])); - if (naIsNum(args[0])) { - leg->setSpeed(rr, args[0].num); - } else if (naIsString(args[0])) { - leg->setSpeed(rr, simgear::strutils::to_int(naStr_data(args[0]))); - } else { - naRuntimeError(c, "bad speed value for leg.setSpeed"); - } + + double speed = 0.0; + if ((argc < 2) || !convertToNum(args[0], speed)) + naRuntimeError(c, "bad arguments to setSpeed"); + RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1])); + leg->setSpeed(rr, speed); return naNil(); } @@ -2211,18 +2215,12 @@ static naRef f_leg_setAltitude(naContext c, naRef me, int argc, naRef* args) naRuntimeError(c, "leg.setAltitude called on non-flightplan-leg object"); } - if (argc < 2) { - naRuntimeError(c, "bad arguments to leg.setAltitude"); - } - + double alt = 0.0; + if ((argc < 2) || !convertToNum(args[0], alt)) + naRuntimeError(c, "bad arguments to leg.setAltitude"); + RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1])); - if (naIsNum(args[0])) { - leg->setAltitude(rr, args[0].num); - } else if (naIsString(args[0])) { - leg->setAltitude(rr, simgear::strutils::to_int(naStr_data(args[0]))); - } else { - naRuntimeError(c, "bad value for setAltitude"); - } + leg->setAltitude(rr, alt); return naNil(); }