Merge branch 'next' of git://gitorious.org/fg/simgear into next
This commit is contained in:
@@ -220,6 +220,8 @@
|
|||||||
<ClCompile Include="..\..\simgear\misc\tabbed_values.cxx" />
|
<ClCompile Include="..\..\simgear\misc\tabbed_values.cxx" />
|
||||||
<ClCompile Include="..\..\simgear\misc\texcoord.cxx" />
|
<ClCompile Include="..\..\simgear\misc\texcoord.cxx" />
|
||||||
<ClCompile Include="..\..\simgear\misc\zfstream.cxx" />
|
<ClCompile Include="..\..\simgear\misc\zfstream.cxx" />
|
||||||
|
<ClCompile Include="..\..\simgear\misc\ResourceManager.cxx" />
|
||||||
|
<ClCompile Include="..\..\simgear\misc\ResourceManager.hxx" />
|
||||||
<ClCompile Include="..\..\simgear\route\route.cxx" />
|
<ClCompile Include="..\..\simgear\route\route.cxx" />
|
||||||
<ClCompile Include="..\..\simgear\route\waypoint.cxx" />
|
<ClCompile Include="..\..\simgear\route\waypoint.cxx" />
|
||||||
<ClCompile Include="..\..\simgear\screen\extensions.cxx" />
|
<ClCompile Include="..\..\simgear\screen\extensions.cxx" />
|
||||||
|
|||||||
@@ -671,6 +671,14 @@
|
|||||||
RelativePath="..\..\simgear\misc\zfstream.hxx"
|
RelativePath="..\..\simgear\misc\zfstream.hxx"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\simgear\misc\ResourceManager.cxx"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\simgear\misc\ResourceManager.hxx"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Lib_sgroute"
|
Name="Lib_sgroute"
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ include_HEADERS = \
|
|||||||
interpolator.hxx \
|
interpolator.hxx \
|
||||||
stdint.hxx \
|
stdint.hxx \
|
||||||
PathOptions.hxx \
|
PathOptions.hxx \
|
||||||
sg_dir.hxx
|
sg_dir.hxx \
|
||||||
|
ResourceManager.hxx
|
||||||
|
|
||||||
libsgmisc_a_SOURCES = \
|
libsgmisc_a_SOURCES = \
|
||||||
sg_path.cxx \
|
sg_path.cxx \
|
||||||
@@ -24,7 +25,8 @@ libsgmisc_a_SOURCES = \
|
|||||||
zfstream.cxx \
|
zfstream.cxx \
|
||||||
interpolator.cxx \
|
interpolator.cxx \
|
||||||
PathOptions.cxx \
|
PathOptions.cxx \
|
||||||
sg_dir.cxx
|
sg_dir.cxx \
|
||||||
|
ResourceManager.cxx
|
||||||
|
|
||||||
#noinst_PROGRAMS = tabbed_value_test swap_test
|
#noinst_PROGRAMS = tabbed_value_test swap_test
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
// ResourceManager.cxx -- manage finding resources by names/paths
|
||||||
|
// Copyright (C) 2010 James Turner
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Library General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library 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
|
||||||
|
// Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
#include <simgear_config.h>
|
||||||
|
|
||||||
|
#include <simgear/misc/ResourceManager.hxx>
|
||||||
|
|
||||||
|
namespace simgear
|
||||||
|
{
|
||||||
|
|
||||||
|
static ResourceManager* static_manager = NULL;
|
||||||
|
|
||||||
|
ResourceManager::ResourceManager()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceManager* ResourceManager::instance()
|
||||||
|
{
|
||||||
|
if (!static_manager) {
|
||||||
|
static_manager = new ResourceManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* trivial provider using a fixed base path
|
||||||
|
*/
|
||||||
|
class BasePathProvider : public ResourceProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BasePathProvider(const SGPath& aBase, int aPriority) :
|
||||||
|
ResourceProvider(aPriority),
|
||||||
|
_base(aBase)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual SGPath resolve(const std::string& aResource, SGPath&) const
|
||||||
|
{
|
||||||
|
SGPath p(_base, aResource);
|
||||||
|
return p.exists() ? p : SGPath();
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
SGPath _base;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ResourceManager::addBasePath(const SGPath& aPath, Priority aPriority)
|
||||||
|
{
|
||||||
|
addProvider(new BasePathProvider(aPath, aPriority));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceManager::addProvider(ResourceProvider* aProvider)
|
||||||
|
{
|
||||||
|
ProviderVec::iterator it = _providers.begin();
|
||||||
|
for (; it != _providers.end(); ++it) {
|
||||||
|
if (aProvider->priority() > (*it)->priority()) {
|
||||||
|
_providers.insert(it, aProvider);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fell out of the iteration, goes to the end of the vec
|
||||||
|
_providers.push_back(aProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
SGPath ResourceManager::findPath(const std::string& aResource, SGPath aContext)
|
||||||
|
{
|
||||||
|
if (!aContext.isNull()) {
|
||||||
|
SGPath r(aContext, aResource);
|
||||||
|
if (r.exists()) {
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ProviderVec::iterator it = _providers.begin();
|
||||||
|
for (; it != _providers.end(); ++it) {
|
||||||
|
SGPath path = (*it)->resolve(aResource, aContext);
|
||||||
|
if (!path.isNull()) {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SGPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // of namespace simgear
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
// ResourceManager.hxx -- manage finding resources by names/paths
|
||||||
|
// Copyright (C) 2010 James Turner
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Library General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library 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
|
||||||
|
// Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef SG_RESOURCE_MANAGER_HXX
|
||||||
|
#define SG_RESOURCE_MANAGER_HXX
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <simgear/misc/sg_path.hxx>
|
||||||
|
|
||||||
|
namespace simgear
|
||||||
|
{
|
||||||
|
|
||||||
|
class ResourceProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* singleton management of resources
|
||||||
|
*/
|
||||||
|
class ResourceManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef enum {
|
||||||
|
PRIORITY_DEFAULT = 0,
|
||||||
|
PRIORITY_FALLBACK = -100,
|
||||||
|
PRIORITY_NORMAL = 100,
|
||||||
|
PRIORITY_HIGH = 1000
|
||||||
|
} Priority;
|
||||||
|
|
||||||
|
static ResourceManager* instance();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add a simple fixed resource location, to resolve against
|
||||||
|
*/
|
||||||
|
void addBasePath(const SGPath& aPath, Priority aPriority = PRIORITY_DEFAULT);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void addProvider(ResourceProvider* aProvider);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* given a resource name (or path), find the appropriate real resource
|
||||||
|
* path.
|
||||||
|
* @param aContext an optional current location to resolve relative names
|
||||||
|
* against (e.g a current directory)
|
||||||
|
*/
|
||||||
|
SGPath findPath(const std::string& aResource, SGPath aContext = SGPath());
|
||||||
|
|
||||||
|
private:
|
||||||
|
ResourceManager();
|
||||||
|
|
||||||
|
typedef std::vector<ResourceProvider*> ProviderVec;
|
||||||
|
ProviderVec _providers;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ResourceProvider
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual SGPath resolve(const std::string& aResource, SGPath& aContext) const = 0;
|
||||||
|
|
||||||
|
virtual int priority() const
|
||||||
|
{
|
||||||
|
return _priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ResourceProvider(int aPriority) :
|
||||||
|
_priority(aPriority)
|
||||||
|
{}
|
||||||
|
|
||||||
|
int _priority;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // of simgear namespace
|
||||||
|
|
||||||
|
#endif // of header guard
|
||||||
@@ -358,3 +358,8 @@ bool SGPath::isAbsolute() const
|
|||||||
|
|
||||||
return (path[0] == sgDirPathSep);
|
return (path[0] == sgDirPathSep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SGPath::isNull() const
|
||||||
|
{
|
||||||
|
return path.empty() || (path == "");
|
||||||
|
}
|
||||||
|
|||||||
@@ -166,6 +166,11 @@ public:
|
|||||||
* I.e starts with a directory seperator, or a single character + colon
|
* I.e starts with a directory seperator, or a single character + colon
|
||||||
*/
|
*/
|
||||||
bool isAbsolute() const;
|
bool isAbsolute() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check for default constructed path
|
||||||
|
*/
|
||||||
|
bool isNull() const;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void fix();
|
void fix();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <simgear/props/props_io.hxx>
|
#include <simgear/props/props_io.hxx>
|
||||||
#include <simgear/scene/model/model.hxx>
|
#include <simgear/scene/model/model.hxx>
|
||||||
#include <simgear/scene/model/ModelRegistry.hxx>
|
#include <simgear/scene/model/ModelRegistry.hxx>
|
||||||
|
#include <simgear/misc/ResourceManager.hxx>
|
||||||
|
|
||||||
#include "SGPagedLOD.hxx"
|
#include "SGPagedLOD.hxx"
|
||||||
#include "SGReaderWriterXML.hxx"
|
#include "SGReaderWriterXML.hxx"
|
||||||
@@ -47,7 +48,6 @@ ModelRegistryCallbackProxy<LoadOnlyCallback> g_xmlCallbackProxy("xml");
|
|||||||
|
|
||||||
SGPropertyNode_ptr SGModelLib::static_propRoot;
|
SGPropertyNode_ptr SGModelLib::static_propRoot;
|
||||||
SGModelLib::panel_func SGModelLib::static_panelFunc = NULL;
|
SGModelLib::panel_func SGModelLib::static_panelFunc = NULL;
|
||||||
SGModelLib::resolve_func SGModelLib::static_resolver = NULL;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// Implementation of SGModelLib.
|
// Implementation of SGModelLib.
|
||||||
@@ -67,33 +67,15 @@ void SGModelLib::setPanelFunc(panel_func pf)
|
|||||||
static_panelFunc = pf;
|
static_panelFunc = pf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGModelLib::setResolveFunc(resolve_func rf)
|
|
||||||
{
|
|
||||||
static_resolver = rf;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string SGModelLib::findDataFile(const std::string& file,
|
std::string SGModelLib::findDataFile(const std::string& file,
|
||||||
const osgDB::ReaderWriter::Options* opts,
|
const osgDB::ReaderWriter::Options* opts,
|
||||||
SGPath currentPath)
|
SGPath currentPath)
|
||||||
{
|
{
|
||||||
// if we have a valid current path, first attempt to resolve relative
|
SGPath p = ResourceManager::instance()->findPath(file, currentPath);
|
||||||
// to that path
|
if (p.exists()) {
|
||||||
if (currentPath.exists()) {
|
return p.str();
|
||||||
SGPath p = currentPath;
|
|
||||||
p.append(file);
|
|
||||||
if (p.exists()) {
|
|
||||||
return p.str();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// next try the resolve function if one has been defined
|
|
||||||
if (static_resolver) {
|
|
||||||
SGPath p = static_resolver(file);
|
|
||||||
if (p.exists()) {
|
|
||||||
return p.str();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// finally hand on to standard OSG behaviour
|
// finally hand on to standard OSG behaviour
|
||||||
return osgDB::findDataFile(file, opts);
|
return osgDB::findDataFile(file, opts);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,16 +44,12 @@ class SGModelLib
|
|||||||
public:
|
public:
|
||||||
typedef osg::Node *(*panel_func)(SGPropertyNode *);
|
typedef osg::Node *(*panel_func)(SGPropertyNode *);
|
||||||
|
|
||||||
typedef SGPath (*resolve_func)(const std::string& path);
|
|
||||||
|
|
||||||
static void init(const std::string &root_dir);
|
static void init(const std::string &root_dir);
|
||||||
|
|
||||||
static void setPropRoot(SGPropertyNode* root);
|
static void setPropRoot(SGPropertyNode* root);
|
||||||
|
|
||||||
static void setPanelFunc(panel_func pf);
|
static void setPanelFunc(panel_func pf);
|
||||||
|
|
||||||
static void setResolveFunc(resolve_func rf);
|
|
||||||
|
|
||||||
// Load a 3D model (any format)
|
// Load a 3D model (any format)
|
||||||
// data->modelLoaded() will be called after the model is loaded
|
// data->modelLoaded() will be called after the model is loaded
|
||||||
static osg::Node* loadModel(const std::string &path,
|
static osg::Node* loadModel(const std::string &path,
|
||||||
@@ -80,7 +76,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
static SGPropertyNode_ptr static_propRoot;
|
static SGPropertyNode_ptr static_propRoot;
|
||||||
static panel_func static_panelFunc;
|
static panel_func static_panelFunc;
|
||||||
static resolve_func static_resolver;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ int main( int argc, char *argv[] ) {
|
|||||||
smgr->set_position( SGVec3d::fromGeod(pos), pos );
|
smgr->set_position( SGVec3d::fromGeod(pos), pos );
|
||||||
smgr->activate();
|
smgr->activate();
|
||||||
|
|
||||||
SGSoundSample *sample1 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGPath srcDir(SRC_DIR);
|
||||||
|
|
||||||
|
SGSoundSample *sample1 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample1->set_volume(1.0);
|
sample1->set_volume(1.0);
|
||||||
sample1->set_pitch(1.0);
|
sample1->set_pitch(1.0);
|
||||||
sample1->play_looped();
|
sample1->play_looped();
|
||||||
@@ -35,7 +37,7 @@ int main( int argc, char *argv[] ) {
|
|||||||
printf("playing sample1\n");
|
printf("playing sample1\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
SGSoundSample *sample2 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample2 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample2->set_volume(0.5);
|
sample2->set_volume(0.5);
|
||||||
sample2->set_pitch(0.4);
|
sample2->set_pitch(0.4);
|
||||||
sample2->play_looped();
|
sample2->play_looped();
|
||||||
@@ -44,7 +46,7 @@ int main( int argc, char *argv[] ) {
|
|||||||
printf("playing sample2\n");
|
printf("playing sample2\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
SGSoundSample *sample3 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample3 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample3->set_volume(0.5);
|
sample3->set_volume(0.5);
|
||||||
sample3->set_pitch(0.8);
|
sample3->set_pitch(0.8);
|
||||||
sample3->play_looped();
|
sample3->play_looped();
|
||||||
@@ -53,7 +55,7 @@ int main( int argc, char *argv[] ) {
|
|||||||
printf("playing sample3\n");
|
printf("playing sample3\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
SGSoundSample *sample4 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample4 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample4->set_volume(0.5);
|
sample4->set_volume(0.5);
|
||||||
sample4->set_pitch(1.2);
|
sample4->set_pitch(1.2);
|
||||||
sample4->play_looped();
|
sample4->play_looped();
|
||||||
@@ -62,7 +64,7 @@ int main( int argc, char *argv[] ) {
|
|||||||
printf("playing sample4\n");
|
printf("playing sample4\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
SGSoundSample *sample5 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample5 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample5->set_volume(0.5);
|
sample5->set_volume(0.5);
|
||||||
sample5->set_pitch(1.6);
|
sample5->set_pitch(1.6);
|
||||||
sample5->play_looped();
|
sample5->play_looped();
|
||||||
@@ -71,7 +73,7 @@ int main( int argc, char *argv[] ) {
|
|||||||
printf("playing sample5\n");
|
printf("playing sample5\n");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
SGSoundSample *sample6 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample6 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample6->set_volume(0.5);
|
sample6->set_volume(0.5);
|
||||||
sample6->set_pitch(2.0);
|
sample6->set_pitch(2.0);
|
||||||
sample6->play_looped();
|
sample6->play_looped();
|
||||||
|
|||||||
@@ -25,8 +25,10 @@ int main( int argc, char *argv[] ) {
|
|||||||
smgr->set_volume(0.9);
|
smgr->set_volume(0.9);
|
||||||
smgr->activate();
|
smgr->activate();
|
||||||
|
|
||||||
|
SGPath srcDir(SRC_DIR);
|
||||||
|
|
||||||
printf("default position and orientation\n");
|
printf("default position and orientation\n");
|
||||||
SGSoundSample *sample1 = new SGSoundSample( SRC_DIR, "jet.wav" );
|
SGSoundSample *sample1 = new SGSoundSample("jet.wav", srcDir);
|
||||||
sample1->set_volume(1.0);
|
sample1->set_volume(1.0);
|
||||||
sample1->set_pitch(1.0);
|
sample1->set_pitch(1.0);
|
||||||
sample1->play_looped();
|
sample1->play_looped();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#include <simgear/structure/exception.hxx>
|
#include <simgear/structure/exception.hxx>
|
||||||
#include <simgear/misc/sg_path.hxx>
|
#include <simgear/misc/sg_path.hxx>
|
||||||
#include <simgear/math/SGMath.hxx>
|
#include <simgear/math/SGMath.hxx>
|
||||||
|
#include <simgear/misc/ResourceManager.hxx>
|
||||||
|
|
||||||
#include "soundmgr_openal.hxx"
|
#include "soundmgr_openal.hxx"
|
||||||
#include "sample_openal.hxx"
|
#include "sample_openal.hxx"
|
||||||
@@ -78,7 +79,7 @@ SGSoundSample::SGSoundSample() :
|
|||||||
}
|
}
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
SGSoundSample::SGSoundSample( const char *path, const char *file ) :
|
SGSoundSample::SGSoundSample(const char *file, const SGPath& currentDir) :
|
||||||
_absolute_pos(SGVec3d::zeros()),
|
_absolute_pos(SGVec3d::zeros()),
|
||||||
_relative_pos(SGVec3d::zeros()),
|
_relative_pos(SGVec3d::zeros()),
|
||||||
_direction(SGVec3d::zeros()),
|
_direction(SGVec3d::zeros()),
|
||||||
@@ -110,11 +111,8 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) :
|
|||||||
_static_changed(true),
|
_static_changed(true),
|
||||||
_is_file(true)
|
_is_file(true)
|
||||||
{
|
{
|
||||||
SGPath samplepath( path );
|
SGPath p = simgear::ResourceManager::instance()->findPath(file, currentDir);
|
||||||
if ( strlen(file) ) {
|
_refname = p.str();
|
||||||
samplepath.append( file );
|
|
||||||
}
|
|
||||||
_refname = samplepath.str();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
|
|||||||
@@ -60,11 +60,10 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param path Path name to sound
|
|
||||||
* @param file File name of sound
|
* @param file File name of sound
|
||||||
Buffer data is freed by the sample group
|
Buffer data is freed by the sample group
|
||||||
*/
|
*/
|
||||||
SGSoundSample( const char *path, const char *file );
|
SGSoundSample(const char *file, const SGPath& currentDir);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ SGXmlSound::~SGXmlSound()
|
|||||||
void
|
void
|
||||||
SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node,
|
SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node,
|
||||||
SGSampleGroup *sgrp, SGSampleGroup *avionics,
|
SGSampleGroup *sgrp, SGSampleGroup *avionics,
|
||||||
const string &path)
|
const SGPath& currentDir)
|
||||||
{
|
{
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -272,7 +272,7 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node,
|
|||||||
} else {
|
} else {
|
||||||
_sgrp = sgrp;
|
_sgrp = sgrp;
|
||||||
}
|
}
|
||||||
_sample = new SGSoundSample( path.c_str(), node->getStringValue("path", ""));
|
_sample = new SGSoundSample(node->getStringValue("path", ""), currentDir);
|
||||||
if (!_sample->file_path().exists()) {
|
if (!_sample->file_path().exists()) {
|
||||||
throw sg_io_exception("XML sound: couldn't find file: " + _sample->file_path().str());
|
throw sg_io_exception("XML sound: couldn't find file: " + _sample->file_path().str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public:
|
|||||||
* @param path The path where the audio files remain.
|
* @param path The path where the audio files remain.
|
||||||
*/
|
*/
|
||||||
virtual void init (SGPropertyNode *, SGPropertyNode *, SGSampleGroup *,
|
virtual void init (SGPropertyNode *, SGPropertyNode *, SGSampleGroup *,
|
||||||
SGSampleGroup *, const string &);
|
SGSampleGroup *, const SGPath& currentDir);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether an event has happened and if action has to be taken.
|
* Check whether an event has happened and if action has to be taken.
|
||||||
|
|||||||
Reference in New Issue
Block a user