1
0
Fork 0
flightgear/src/Sound/fg_fx.cxx
curt 1c513868b7 Erik Hofman:
I changed the sound code to let it use FGCondition. This changes the
code and configuration files rather drastically. Furthermore I've added
an in-transit mode which plays the sound only when the tied property is
changing.

Changes:

Code:
* Added condition support to trigger an event
* Removed the <type> section from the main event definition
   (this could be done using conditions)
* Removed the abillity to use several events with the same name,
   instead it is required to use conditions.
* Updated the README.xmlsound

Base package:
* Changed the configuration files accordingly.
* Changed flaps and gear to use the new in-stransit mode.
* Changed the flps.wav file so it can be looped.
* Created a new gear.wav file (whcih can be looped)
   and a gear-lck.wav file for gear locking sound.

IMPORTANT:
To change existing configuration files to the new ones, it is important
to pack events with the same name together into one singel event, using
the condition specification. Also, when using special types (inverted,
flip-flop, raise or fall) these should be changed to a conditions also.
For more information, please look at
FLightGear/docs-mini/README.xmlsound and the supplied aircraft
configuration files located under FlightGear/Aircraft (espesially
c172/c172-sound.xml and c310/c310-sound.xml).
2002-05-09 04:24:39 +00:00

104 lines
2.4 KiB
C++

// fg_fx.cxx -- Sound effect management class implementation
//
// Started by David Megginson, October 2001
// (Reuses some code from main.cxx, probably by Curtis Olson)
//
// Copyright (C) 2001 Curtis L. Olson - curt@flightgear.org
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// 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.
//
// $Id$
#ifdef _MSC_VER
#pragma warning (disable: 4786)
#endif
#include <simgear/misc/props.hxx>
#include <simgear/misc/sg_path.hxx>
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/exception.hxx>
#ifdef __BORLANDC__
# define exception c_exception
#endif
#include <Main/fg_props.hxx>
#include "fg_fx.hxx"
#include "fg_sound.hxx"
FGFX::FGFX ()
{
}
FGFX::~FGFX ()
{
for (unsigned int i = 0; i < _sound.size(); i++ )
delete _sound[i];
}
void
FGFX::init()
{
SGPropertyNode * node = fgGetNode("/sim/sound", true);
int i;
string path_str = node->getStringValue("path");
SGPath path( globals->get_fg_root() );
if (path_str.empty()) {
SG_LOG(SG_GENERAL, SG_ALERT, "Incorrect path in configuration file.");
return;
}
path.append(path_str.c_str());
SG_LOG(SG_GENERAL, SG_INFO, "Reading Instrument " << node->getName()
<< " from " << path.str());
SGPropertyNode root;
try {
readProperties(path.str(), &root);
} catch (const sg_exception &e) {
SG_LOG(SG_GENERAL, SG_ALERT,
"Incorrect path specified in configuration file");
return;
}
node = root.getNode("fx");
for (i = 0; i < node->nChildren(); i++) {
FGSound *sound = new FGSound();
sound->init(node->getChild(i));
_sound.push_back(sound);
}
}
void
FGFX::bind ()
{
}
void
FGFX::unbind ()
{
}
void
FGFX::update (int dt)
{
for (unsigned int i = 0; i < _sound.size(); i++ )
_sound[i]->update(dt);
}
// end of fg_fx.cxx