X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fxmlsound.cxx;h=479e312361d34c7bd631e1266a7034f6f2cf4a0a;hb=6cd8db7b28b675f75ab22c2073832980d9f8d6a4;hp=45b303a19735588c2ee51c81b54c6415b09763c5;hpb=76c79dba8e9c14d06356d6ceb227d2c9490b9d24;p=simgear.git diff --git a/simgear/sound/xmlsound.cxx b/simgear/sound/xmlsound.cxx index 45b303a1..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,32 +236,36 @@ 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); } // // Orientation // - SGVec3d dir = SGVec3d::zeros(); + SGVec3f dir = SGVec3f::zeros(); float inner = 360.0; float outer = 360.0; float outer_gain = 0.0; prop = node->getChild("orientation"); if ( prop != NULL ) { - dir = SGVec3d(prop->getDoubleValue("y", 0.0), - prop->getDoubleValue("z", 0.0), - prop->getDoubleValue("x", 0.0)); - inner = prop->getDoubleValue("inner-angle", 360.0); - outer = prop->getDoubleValue("outer-angle", 360.0); - outer_gain = prop->getDoubleValue("outer-gain", 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); } // // 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 );