X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIStorm.cxx;h=fded8012d9ef85e4ed623c4bd0adb2cda146d860;hb=47a7952f893dcb3d0b1372907cac375fedf81703;hp=15d8c4fe395747cfb51fcd070b9c7259c5845aea;hpb=4b5a80129d17ab3b7282ce485574a02953d49bf3;p=flightgear.git diff --git a/src/AIModel/AIStorm.cxx b/src/AIModel/AIStorm.cxx index 15d8c4fe3..fded8012d 100644 --- a/src/AIModel/AIStorm.cxx +++ b/src/AIModel/AIStorm.cxx @@ -16,29 +16,26 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #ifdef HAVE_CONFIG_H # include #endif -#include #include
#include
#include #include #include #include +#include -SG_USING_STD(string); +using std::string; #include "AIStorm.hxx" -FGAIStorm::FGAIStorm(FGAIManager* mgr) { - manager = mgr; - _type_str = "thunderstorm"; - _otype = otStorm; +FGAIStorm::FGAIStorm() : FGAIBase(otStorm) { delay = 3.6; subflashes = 1; timer = 0.0; @@ -65,9 +62,19 @@ FGAIStorm::FGAIStorm(FGAIManager* mgr) { FGAIStorm::~FGAIStorm() { } +void FGAIStorm::readFromScenario(SGPropertyNode* scFileNode) { + if (!scFileNode) + return; -bool FGAIStorm::init() { - return FGAIBase::init(); + FGAIBase::readFromScenario(scFileNode); + + setDiameter(scFileNode->getDoubleValue("diameter-ft", 0.0)/6076.11549); + setHeight(scFileNode->getDoubleValue("height-msl", 5000.0)); + setStrengthNorm(scFileNode->getDoubleValue("strength-norm", 1.0)); +} + +bool FGAIStorm::init(bool search_in_AI_path) { + return FGAIBase::init(search_in_AI_path); } void FGAIStorm::bind() { @@ -88,8 +95,6 @@ void FGAIStorm::update(double dt) { void FGAIStorm::Run(double dt) { - FGAIStorm::dt = dt; - double speed_north_deg_sec; double speed_east_deg_sec; @@ -100,8 +105,8 @@ void FGAIStorm::Run(double dt) { * speed * 1.686 / ft_per_deg_lon; // set new position - pos.setlat( pos.lat() + speed_north_deg_sec * dt); - pos.setlon( pos.lon() + speed_east_deg_sec * dt); + pos.setLatitudeDeg( pos.getLatitudeDeg() + speed_north_deg_sec * dt); + pos.setLongitudeDeg( pos.getLongitudeDeg() + speed_east_deg_sec * dt); // do calculations for weather radar display UpdateRadar(manager); @@ -153,13 +158,13 @@ void FGAIStorm::Run(double dt) { double user_altitude = manager->get_user_altitude(); // calculate range to target in feet and nautical miles - double lat_range = fabs(pos.lat() - user_latitude) * ft_per_deg_lat; - double lon_range = fabs(pos.lon() - user_longitude) * ft_per_deg_lon; + double lat_range = fabs(pos.getLatitudeDeg() - user_latitude) * ft_per_deg_lat; + double lon_range = fabs(pos.getLongitudeDeg() - user_longitude) * ft_per_deg_lon; double range_ft = sqrt(lat_range*lat_range + lon_range*lon_range); range = range_ft / 6076.11549; if (range < (diameter * 0.5) && - user_altitude > (altitude - 1000.0) && + user_altitude > (altitude_ft - 1000.0) && user_altitude < height) { turb_mag_node->setDoubleValue(strength_norm); turb_rate_node->setDoubleValue(0.5);