X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fxmlsound.cxx;h=479e312361d34c7bd631e1266a7034f6f2cf4a0a;hb=6cd8db7b28b675f75ab22c2073832980d9f8d6a4;hp=04b8e06029a7b05fbe05c3768b12481bf5fd214b;hpb=191ee3a0edfb52444714c7a8a1fae64016bde1f5;p=simgear.git diff --git a/simgear/sound/xmlsound.cxx b/simgear/sound/xmlsound.cxx index 04b8e060..479e3123 100644 --- a/simgear/sound/xmlsound.cxx +++ b/simgear/sound/xmlsound.cxx @@ -82,7 +82,8 @@ SGXmlSound::~SGXmlSound() void SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, - SGSampleGroup *sgrp, const string &path) + SGSampleGroup *sgrp, SGSampleGroup *avionics, + const string &path) { // @@ -103,6 +104,11 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, _mode = SGXmlSound::ONCE; } + bool is_avionics = false; + const char *type_str = node->getStringValue("type", "fx"); + if ( !strcmp(type_str, "avionics") ) + is_avionics = true; + _property = root->getNode(node->getStringValue("property", ""), true); SGPropertyNode *condition = node->getChild("condition"); if (condition != NULL) @@ -168,9 +174,10 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, } - float reference_dist = node->getDoubleValue("reference-dist", 500.0); - float max_dist = node->getDoubleValue("max-dist", 3000.0); - + // rule of thumb: make reference distance a 100th of the maximum distance. + float reference_dist = node->getDoubleValue("reference-dist", 60.0); + float max_dist = node->getDoubleValue("max-dist", 6000.0); + // // set pitch properties // @@ -229,9 +236,9 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, SGVec3f offset_pos = SGVec3f::zeros(); SGPropertyNode_ptr prop = node->getChild("position"); if ( prop != NULL ) { - offset_pos[0] = prop->getDoubleValue("x", 0.0); + offset_pos[0] = -prop->getDoubleValue("x", 0.0); offset_pos[1] = -prop->getDoubleValue("y", 0.0); - offset_pos[2] = prop->getDoubleValue("z", 0.0); + offset_pos[2] = -prop->getDoubleValue("z", 0.0); } // @@ -243,9 +250,9 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, float outer_gain = 0.0; prop = node->getChild("orientation"); if ( prop != NULL ) { - dir = SGVec3f(prop->getFloatValue("y", 0.0), - prop->getFloatValue("z", 0.0), - prop->getFloatValue("x", 0.0)); + dir = SGVec3f(-prop->getFloatValue("x", 0.0), + -prop->getFloatValue("y", 0.0), + -prop->getFloatValue("z", 0.0)); inner = prop->getFloatValue("inner-angle", 360.0); outer = prop->getFloatValue("outer-angle", 360.0); outer_gain = prop->getFloatValue("outer-gain", 0.0); @@ -254,7 +261,11 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node, // // Initialize the sample // - _sgrp = sgrp; + if (is_avionics) { + _sgrp = avionics; + } else { + _sgrp = sgrp; + } _sample = new SGSoundSample( path.c_str(), node->getStringValue("path", "")); _sample->set_relative_position( offset_pos ); _sample->set_direction( dir );