X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAICarrier.cxx;h=fba537a6764c2021c0b21002df5b985e14458b01;hb=afbc360eeded20d4447ab005ee0e234a43f068cd;hp=a0dc5effdab0450e86dada91da9b3ff2f5c6a78f;hpb=a6db6d89ff41a619569e6433409e8bf62ff98499;p=flightgear.git diff --git a/src/AIModel/AICarrier.cxx b/src/AIModel/AICarrier.cxx index a0dc5effd..fba537a67 100644 --- a/src/AIModel/AICarrier.cxx +++ b/src/AIModel/AICarrier.cxx @@ -57,6 +57,9 @@ void FGAICarrier::readFromScenario(SGPropertyNode* scFileNode) { setMaxLong(scFileNode->getDoubleValue("max-long", 0)); setMinLong(scFileNode->getDoubleValue("min-long", 0)); setMPControl(scFileNode->getBoolValue("mp-control", false)); + setAIControl(scFileNode->getBoolValue("ai-control", false)); + setCallSign(scFileNode->getStringValue("callsign", "")); + SGPropertyNode* flols = scFileNode->getChild("flols-pos"); if (flols) { @@ -121,21 +124,25 @@ void FGAICarrier::setMPControl(bool c) { MPControl = c; } +void FGAICarrier::setAIControl(bool c) { + AIControl = c; +} + void FGAICarrier::update(double dt) { // Now update the position and heading. This will compute new hdg and // roll values required for the rotation speed computation. FGAIShip::update(dt); //automatic turn into wind with a target wind of 25 kts otd - //SG_LOG(SG_GENERAL, SG_ALERT, "AICarrier: MPControl " << MPControl ); - if (!MPControl){ + //SG_LOG(SG_GENERAL, SG_ALERT, "AICarrier: MPControl " << MPControl << " AIControl " << AIControl); + if (!MPControl && AIControl){ if(turn_to_launch_hdg){ TurnToLaunch(); } else if(turn_to_recovery_hdg ){ TurnToRecover(); - } else if(OutsideBox() || returning ) {// check that the carrier is inside - ReturnToBox(); // the operating box, + } else if(OutsideBox() || returning ) {// check that the carrier is inside + ReturnToBox(); // the operating box, } else { TurnToBase(); } @@ -168,10 +175,10 @@ void FGAICarrier::update(double dt) { eyeWrtCarrier = ec2body.transform(eyeWrtCarrier); // the eyepoints vector wrt the flols position SGVec3d eyeWrtFlols = eyeWrtCarrier - flols_off; - + // the distance from the eyepoint to the flols dist = norm(eyeWrtFlols); - + // now the angle, positive angles are upwards if (fabs(dist) < SGLimits::min()) { angle = 0; @@ -180,7 +187,7 @@ void FGAICarrier::update(double dt) { sAngle = SGMiscd::min(1, SGMiscd::max(-1, sAngle)); angle = SGMiscd::rad2deg(asin(sAngle)); } - + // set the value of source if ( angle <= 4.35 && angle > 4.01 ) source = 1; @@ -259,9 +266,9 @@ void FGAICarrier::bind() { props->tie("controls/start-pos-long-deg", SGRawValueMethods(pos, &SGGeod::getLongitudeDeg)); props->tie("controls/mp-control", - SGRawValuePointer(&MPControl)); - props->tie("velocities/speed-kts", - SGRawValuePointer(&speed)); + SGRawValuePointer(&MPControl)); + props->tie("controls/ai-control", + SGRawValuePointer(&AIControl)); props->tie("environment/surface-wind-speed-true-kts", SGRawValuePointer(&wind_speed_kts)); props->tie("environment/surface-wind-from-true-degs", @@ -317,7 +324,6 @@ void FGAICarrier::unbind() { props->untie("controls/flols/distance-m"); props->untie("controls/flols/angle-degs"); props->untie("controls/turn-to-launch-hdg"); - props->untie("velocities/speed-kts"); props->untie("environment/wind-speed-true-kts"); props->untie("environment/wind-from-true-degs"); props->untie("environment/rel-wind-from-degs"); @@ -333,6 +339,7 @@ void FGAICarrier::unbind() { props->untie("controls/constants/jbd/trans-time-s"); props->untie("controls/jbd-time-constant"); props->untie("controls/mp-control"); + props->untie("controls/ai-control"); props->untie("controls/turn-to-recovery-hdg"); props->untie("controls/turn-to-base-course"); } @@ -436,12 +443,12 @@ void FGAICarrier::TurnToRecover(){ if (wind_speed_kts < 3){ tgt_heading = base_course + 60; } else if (rel_wind < -9 && rel_wind >= -180){ - tgt_heading = wind_from_deg; + tgt_heading = wind_from_deg; } else if (rel_wind > -7 && rel_wind < 45){ tgt_heading = wind_from_deg + 60; } else if (rel_wind >=45 && rel_wind < 180){ tgt_heading = wind_from_deg + 45; - } else + } else tgt_heading = hdg; SG_NORMALIZE_RANGE(tgt_heading, 0.0, 360.0);