mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-27 17:46:18 +00:00
merge from default
--HG-- branch : branch-features-geqt-plugin
This commit is contained in:
commit
edbb168912
78 changed files with 1106 additions and 363 deletions
|
@ -153,6 +153,7 @@ code/nelns/build/*
|
|||
code/snowballs/build/*
|
||||
code/ryzom/build/*
|
||||
code/build/*
|
||||
code/build-2010/*
|
||||
build/*
|
||||
install/*
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/3d/ps_located.h"
|
||||
#include "nel/3d/ps_attrib.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
|
||||
|
||||
|
@ -63,13 +64,13 @@ public:
|
|||
virtual void step(TPSProcessPass pass);
|
||||
|
||||
/// set the name of the sound
|
||||
void setSoundName(const NLMISC::TStringId &soundName)
|
||||
void setSoundName(const NLMISC::CSheetId &soundName)
|
||||
{
|
||||
_SoundName = soundName;
|
||||
}
|
||||
|
||||
/// get the name of the sound
|
||||
const NLMISC::TStringId &getSoundName(void) const
|
||||
const NLMISC::CSheetId &getSoundName(void) const
|
||||
{
|
||||
return _SoundName;
|
||||
}
|
||||
|
@ -161,7 +162,7 @@ protected:
|
|||
void removeAllSources();
|
||||
|
||||
CPSAttrib<UPSSoundInstance *> _Sounds;
|
||||
NLMISC::TStringId _SoundName;
|
||||
NLMISC::CSheetId _SoundName;
|
||||
float _Gain;
|
||||
CPSAttribMaker<float> * _GainScheme;
|
||||
float _Pitch;
|
||||
|
|
|
@ -162,7 +162,7 @@ public:
|
|||
|
||||
|
||||
/// inherited from IPSSoundServer
|
||||
UPSSoundInstance *createSound(const NLMISC::TStringId &soundName, bool spawned = true)
|
||||
UPSSoundInstance *createSound(const NLMISC::CSheetId &soundName, bool spawned = true)
|
||||
{
|
||||
if (!_AudioMixer)
|
||||
return NULL;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include <string>
|
||||
|
||||
namespace NLMISC
|
||||
|
@ -50,7 +51,7 @@ struct UPSSoundServer
|
|||
* \param spawn true if the sound must be spawned e.g it continues after this interface is removed
|
||||
* \param cb useful only for spawned sound, it tells when a spawned sound has been removed
|
||||
*/
|
||||
virtual UPSSoundInstance *createSound(const NLMISC::TStringId &soundName, bool spawn = false) = 0;
|
||||
virtual UPSSoundInstance *createSound(const NLMISC::CSheetId &soundName, bool spawn = false) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -60,6 +60,12 @@ public :
|
|||
*/
|
||||
explicit CSheetId( const std::string& sheetName );
|
||||
|
||||
/**
|
||||
* Constructor, uses defaultType as extension when sheetName
|
||||
* contains no file extension.
|
||||
*/
|
||||
explicit CSheetId( const std::string& sheetName, const std::string &defaultType );
|
||||
|
||||
// build from a string and returns true if the build succeed
|
||||
bool buildSheetId(const std::string& sheetName);
|
||||
|
||||
|
@ -141,6 +147,7 @@ public :
|
|||
* Serial
|
||||
*/
|
||||
void serial(NLMISC::IStream &f) throw(NLMISC::EStream);
|
||||
void serialString(NLMISC::IStream &f, const std::string &defaultType = "") throw(NLMISC::EStream);
|
||||
|
||||
/**
|
||||
* Display the list of valid sheet ids with their associated file names
|
||||
|
@ -221,7 +228,16 @@ private :
|
|||
static void loadSheetAlias ();
|
||||
static void cbFileChange (const std::string &filename);
|
||||
|
||||
/**
|
||||
* When initialized without sheet_id.bin, the sheet id are assigned
|
||||
* dynamically. Separate maps are used, because in sheet_id.bin
|
||||
* mode it uses static maps optimized during load.
|
||||
*/
|
||||
static bool _DontHaveSheetKnowledge;
|
||||
static std::map<std::string, uint32> _DevTypeNameToId;
|
||||
/// outer vector is type, inner vector is sheet id
|
||||
static std::vector<std::vector<std::string> > _DevSheetIdToName;
|
||||
static std::map<std::string, uint32> _DevSheetNameToId;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -48,6 +48,19 @@ typedef sint64 TTicks;
|
|||
class CTime
|
||||
{
|
||||
public:
|
||||
struct CTimerInfo
|
||||
{
|
||||
/// Returns if there is a high precision timer that can be used.
|
||||
bool IsHighPrecisionAvailable;
|
||||
/// If a CPU specific timer is used and the values are not consistent accross threads.
|
||||
bool RequiresSingleCore;
|
||||
/// The resolution of the high resolution timer.
|
||||
TTicks HighPrecisionResolution;
|
||||
};
|
||||
|
||||
/** Get advanced information on the used timers.
|
||||
*/
|
||||
static void probeTimerInfo(CTimerInfo &result);
|
||||
|
||||
/** Return the number of second since midnight (00:00:00), January 1, 1970,
|
||||
* coordinated universal time, according to the system clock.
|
||||
|
@ -71,9 +84,9 @@ public:
|
|||
* the value can jump backwards if the system time is changed by a user or a NTP time sync process.
|
||||
* The value is different on 2 different computers; use the CUniTime class to get a universal
|
||||
* time that is the same on all computers.
|
||||
* \warning On Win32, the value is on 32 bits only. It wraps around to 0 every about 49.71 days.
|
||||
* \warning On Win32, the value is on 32 bits only, and uses the low-res timer unless probeTimerInfo was called and a high resolution timer can be used. It wraps around to 0 every about 49.71 days.
|
||||
*/
|
||||
static TTime getLocalTime ();
|
||||
static TTime getLocalTime();
|
||||
|
||||
/** Return the time in processor ticks. Use it for profile purpose.
|
||||
* If the performance time is not supported on this hardware, it returns 0.
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <nel/misc/time_nl.h>
|
||||
#include <nel/misc/stream.h>
|
||||
#include <nel/misc/singleton.h>
|
||||
#include <nel/misc/sheet_id.h>
|
||||
#include <nel/sound/u_audio_mixer.h>
|
||||
#include <nel/georges/u_form.h>
|
||||
|
||||
|
@ -180,7 +181,7 @@ public:
|
|||
// Load environment sounds ; treeRoot can be null if you don't want an access to the envsounds
|
||||
// virtual void loadEnvSounds( const char *filename, UEnvSound **treeRoot=NULL );
|
||||
/// Get a TSoundId from a name (returns NULL if not found)
|
||||
virtual TSoundId getSoundId( const NLMISC::TStringId &name );
|
||||
virtual TSoundId getSoundId( const NLMISC::CSheetId &name );
|
||||
|
||||
/// Gets the group controller for the given group tree path with separator '/', if it doesn't exist yet it will be created.
|
||||
/// Examples: "music", "effects", "dialog", "music/background", "music/loading", "music/player", etcetera
|
||||
|
@ -192,7 +193,7 @@ public:
|
|||
* pass a callback function that will be called (if not NULL) just before deleting the spawned
|
||||
* source.
|
||||
*/
|
||||
virtual USource *createSource( const NLMISC::TStringId &name, bool spawn=false, TSpawnEndCallback cb=NULL, void *cbUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL);
|
||||
virtual USource *createSource( const NLMISC::CSheetId &name, bool spawn=false, TSpawnEndCallback cb=NULL, void *cbUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL);
|
||||
/// Add a logical sound source (by sound id). To remove a source, just delete it. See createSource(const char*)
|
||||
virtual USource *createSource( TSoundId id, bool spawn=false, TSpawnEndCallback cb=NULL, void *cbUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL);
|
||||
/// Add a source which was created by an EnvSound
|
||||
|
@ -223,7 +224,7 @@ public:
|
|||
|
||||
|
||||
/// Return the names of the sounds (call this method after loadSounds())
|
||||
virtual void getSoundNames( std::vector<NLMISC::TStringId> &names ) const;
|
||||
virtual void getSoundNames( std::vector<NLMISC::CSheetId> &names ) const;
|
||||
/// Return the number of mixing tracks (voices)
|
||||
virtual uint getPolyphony() const { return (uint)_Tracks.size(); }
|
||||
/// Return the number of sources instance.
|
||||
|
@ -444,7 +445,7 @@ private:
|
|||
/// Witch parameter to control
|
||||
TControledParamId ParamId;
|
||||
/// The controled sounds names.
|
||||
std::vector<NLMISC::TStringId> SoundNames;
|
||||
std::vector<NLMISC::CSheetId> SoundNames;
|
||||
/// Current parameter value
|
||||
float Value;
|
||||
/// All the sources controled by this variable
|
||||
|
|
|
@ -64,22 +64,12 @@ public:
|
|||
/// Associtation clas for storage of sound / filter.
|
||||
struct TSoundInfo
|
||||
{
|
||||
NLMISC::TStringId SoundName;
|
||||
NLMISC::CSheetId SoundName;
|
||||
UAudioMixer::TBackgroundFlags Filter;
|
||||
|
||||
void serial(NLMISC::IStream &s)
|
||||
{
|
||||
std::string soundName;
|
||||
if (s.isReading())
|
||||
{
|
||||
s.serial(soundName);
|
||||
SoundName = NLMISC::CStringMapper::map(soundName);
|
||||
}
|
||||
else
|
||||
{
|
||||
soundName = NLMISC::CStringMapper::unmap(SoundName);
|
||||
s.serial(soundName);
|
||||
}
|
||||
SoundName.serialString(s, "sound");
|
||||
s.serial(Filter);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -229,7 +229,7 @@ private:
|
|||
struct TSoundData
|
||||
{
|
||||
/// The name of the sound.
|
||||
NLMISC::TStringId SoundName;
|
||||
NLMISC::CSheetId SoundName;
|
||||
/// The reference to the sound.
|
||||
CSound *Sound;
|
||||
/// A source instance of the sound (may be NULL).
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
|
@ -253,9 +254,9 @@ private:
|
|||
/// The current cluster playing source indexed with sound group id
|
||||
TClusterSoundCont _Sources;
|
||||
|
||||
typedef CHashMap<NLMISC::TStringId, NLMISC::TStringId, NLMISC::CStringIdHashMapTraits> TStringStringMap;
|
||||
typedef CHashMap<NLMISC::TStringId, NLMISC::CSheetId, NLMISC::CStringIdHashMapTraits> TStringSheetMap;
|
||||
/// The sound_group to sound assoc
|
||||
TStringStringMap _SoundGroupToSound;
|
||||
TStringSheetMap _SoundGroupToSound;
|
||||
};
|
||||
|
||||
} // NLSOUND
|
||||
|
|
|
@ -52,8 +52,8 @@ public:
|
|||
|
||||
const std::vector<uint32> &getSoundSeq() const { return _SoundSeq;}
|
||||
const std::vector<uint32> &getDelaySeq() const { return _DelaySeq;}
|
||||
NLMISC::TStringId getSound(uint index) const { return !_Sounds.empty() ? _Sounds[index%_Sounds.size()]:0;}
|
||||
const std::vector<NLMISC::TStringId> &getSounds() const { return _Sounds;}
|
||||
NLMISC::CSheetId getSound(uint index) const { return !_Sounds.empty() ? _Sounds[index%_Sounds.size()]:NLMISC::CSheetId::Unknown;}
|
||||
const std::vector<NLMISC::CSheetId> &getSounds() const { return _Sounds;}
|
||||
|
||||
uint32 getFadeLength() const { return _XFadeLength;}
|
||||
|
||||
|
@ -87,7 +87,7 @@ private:
|
|||
virtual float getMaxDistance() const;
|
||||
|
||||
TPATTERN_MODE _PatternMode;
|
||||
std::vector<NLMISC::TStringId> _Sounds;
|
||||
std::vector<NLMISC::CSheetId> _Sounds;
|
||||
float _TicksPerSeconds;
|
||||
std::vector<uint32> _SoundSeq;
|
||||
/// Sequence of delay in millisec.
|
||||
|
|
|
@ -133,7 +133,7 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
|
||||
virtual void addSound(CSound *sound, const std::string &baseName)
|
||||
{
|
||||
const std::string &patternName = NLMISC::CStringMapper::unmap(sound->getName());
|
||||
const std::string &patternName = sound->getName().toString(); /*NLMISC::CStringMapper::unmap(sound->getName())*/;
|
||||
nlassert(patternName.size() >= baseName.size());
|
||||
|
||||
std::string arg;
|
||||
|
@ -172,7 +172,7 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
|
||||
if (i != NbJoker)
|
||||
return;
|
||||
nlassertex(i==NbJoker, ("Error while adding sound '%s' into context sound container", NLMISC::CStringMapper::unmap(sound->getName()).c_str()));
|
||||
nlassertex(i==NbJoker, ("Error while adding sound '%s' into context sound container", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/));
|
||||
|
||||
sint randomValue = 0;
|
||||
if (UseRandom)
|
||||
|
@ -187,7 +187,7 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
}
|
||||
else if (!arg.empty())
|
||||
{
|
||||
nlassertex (!ok, ("Error while adding sound '%s' into context sound container", NLMISC::CStringMapper::unmap(sound->getName()).c_str()));
|
||||
nlassertex (!ok, ("Error while adding sound '%s' into context sound container", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/));
|
||||
// end of the argument.
|
||||
NLMISC::fromString(arg, randomValue);
|
||||
arg.clear();
|
||||
|
@ -199,13 +199,13 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
// read the potential last arg.
|
||||
if (!arg.empty())
|
||||
{
|
||||
nlassertex (!ok, ("Error while adding sound '%s' into context sound container", NLMISC::CStringMapper::unmap(sound->getName()).c_str()));
|
||||
nlassertex (!ok, ("Error while adding sound '%s' into context sound container", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/));
|
||||
// end of the argument.
|
||||
NLMISC::fromString(arg, randomValue);
|
||||
arg.clear();
|
||||
ok = true;
|
||||
}
|
||||
nlassertex (ok, ("Error while adding sound '%s' into context sound container", NLMISC::CStringMapper::unmap(sound->getName()).c_str()));
|
||||
nlassertex (ok, ("Error while adding sound '%s' into context sound container", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/));
|
||||
|
||||
}
|
||||
else
|
||||
|
@ -221,9 +221,9 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
if (!ret.second)
|
||||
{
|
||||
typename THashContextSound::iterator it = _ContextSounds.find(cm);
|
||||
nlassertex(it != _ContextSounds.end(), ("Error wile adding soudn '%s' into context sound container", NLMISC::CStringMapper::unmap(sound->getName()).c_str()));
|
||||
nlassertex(it != _ContextSounds.end(), ("Error wile adding soudn '%s' into context sound container", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/));
|
||||
|
||||
nlwarning("Sound %s has the same context matcher as the sound %s", NLMISC::CStringMapper::unmap(sound->getName()).c_str(), NLMISC::CStringMapper::unmap(it->second->getName()).c_str());
|
||||
nlwarning("Sound %s has the same context matcher as the sound %s", sound->getName().toString().c_str()/*NLMISC::CStringMapper::unmap(sound->getName()).c_str()*/, it->second->getName().toString().c_str() /*NLMISC::CStringMapper::unmap(it->second->getName()).c_str()*/);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,7 +249,7 @@ class CContextSoundContainer : public IContextSoundContainer
|
|||
typename THashContextSound::const_iterator first(_ContextSounds.begin()), last(_ContextSounds.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
subsounds.push_back(std::make_pair(NLMISC::CStringMapper::unmap(first->second->getName()), first->second));
|
||||
subsounds.push_back(std::make_pair(first->second->getName().toString()/*NLMISC::CStringMapper::unmap(first->second->getName())*/, first->second));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/sound/u_source.h"
|
||||
#include "nel/georges/u_form_elm.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include <string>
|
||||
|
||||
namespace NLSOUND {
|
||||
|
@ -35,7 +36,7 @@ class CGroupController;
|
|||
|
||||
/// Sound names hash map
|
||||
//typedef std::hash_map<std::string, CSound*> TSoundMap;
|
||||
typedef CHashMap<NLMISC::TStringId, CSound*, NLMISC::CStringIdHashMapTraits> TSoundMap;
|
||||
typedef CHashMap<NLMISC::CSheetId, CSound*, NLMISC::CStringIdHashMapTraits> TSoundMap;
|
||||
|
||||
/// Sound names set (for ambiant sounds)
|
||||
typedef std::set<CSound*> TSoundSet;
|
||||
|
@ -53,7 +54,7 @@ class CSound
|
|||
friend class CAudioMixerUser;
|
||||
public:
|
||||
/// Factory for specialized sound.
|
||||
static CSound *createSound(const std::string &filename, NLGEORGES::UFormElm& formRoot);
|
||||
static CSound *createSound(const std::string &name, NLGEORGES::UFormElm& formRoot);
|
||||
|
||||
enum TSOUND_TYPE
|
||||
{
|
||||
|
@ -99,7 +100,7 @@ public:
|
|||
/// Return the length of the sound in ms
|
||||
virtual uint32 getDuration() = 0;
|
||||
/// Return the name (must be unique)
|
||||
const NLMISC::TStringId& getName() const { return _Name; }
|
||||
const NLMISC::CSheetId& getName() const { return _Name; }
|
||||
|
||||
/// Return the min distance (if detailed()) (default 1.0f if not implemented by sound type)
|
||||
virtual float getMinDistance() const { return _MinDist; }
|
||||
|
@ -121,7 +122,8 @@ public:
|
|||
|
||||
bool operator<( const CSound& otherSound ) const
|
||||
{
|
||||
return NLMISC::CStringMapper::unmap(_Name) < NLMISC::CStringMapper::unmap(otherSound._Name);
|
||||
//return NLMISC::CStringMapper::unmap(_Name) < NLMISC::CStringMapper::unmap(otherSound._Name);
|
||||
return _Name.toString() < otherSound._Name.toString();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
@ -142,7 +144,7 @@ protected:
|
|||
float _MaxDist;
|
||||
|
||||
// Sound name.
|
||||
NLMISC::TStringId _Name;
|
||||
NLMISC::CSheetId _Name;
|
||||
/// An optional user var controler.
|
||||
NLMISC::TStringId _UserVarControler;
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/3d/cluster.h"
|
||||
#include "nel/sound/u_source.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
|
||||
namespace NLMISC
|
||||
|
@ -31,7 +32,7 @@ namespace NLMISC
|
|||
namespace NLSOUND {
|
||||
|
||||
|
||||
typedef std::set<NLMISC::TStringId> TMarkerSoundSet;
|
||||
typedef std::set<NLMISC::CSheetId> TMarkerSoundSet;
|
||||
|
||||
class UAudioMixer;
|
||||
|
||||
|
@ -50,13 +51,13 @@ public:
|
|||
virtual float getTime() const { return _Time; }
|
||||
|
||||
/** Add a new sound in the set of to-be-played sounds for this marker */
|
||||
virtual void addSound(const NLMISC::TStringId &soundName);
|
||||
virtual void addSound(const NLMISC::CSheetId &soundName);
|
||||
|
||||
/** Remove a sound */
|
||||
virtual void removeSound(const NLMISC::TStringId &soundName);
|
||||
virtual void removeSound(const NLMISC::CSheetId &soundName);
|
||||
|
||||
/** Return the set of sounds of this marker */
|
||||
virtual void getSounds(std::vector<NLMISC::TStringId> &sounds);
|
||||
virtual void getSounds(std::vector<NLMISC::CSheetId> &sounds);
|
||||
|
||||
/** Play all the sounds of this marker */
|
||||
virtual void play(UAudioMixer* mixer, NL3D::CCluster *cluster, CSoundContext &context);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/sound/audio_mixer_user.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include <string>
|
||||
|
||||
namespace NLSOUND {
|
||||
|
@ -67,16 +68,16 @@ public:
|
|||
bool isLoaded();
|
||||
|
||||
/// Return a sound corresponding to a name.
|
||||
CSound *getSound(const NLMISC::TStringId &name);
|
||||
CSound *getSound(const NLMISC::CSheetId &sheetId);
|
||||
|
||||
/// Return the names of the sounds
|
||||
void getNames( std::vector<NLMISC::TStringId> &names );
|
||||
void getNames( std::vector<NLMISC::CSheetId> &sheetIds );
|
||||
|
||||
/// Return the number of sounds in this bank.
|
||||
uint countSounds();
|
||||
|
||||
void addSound(CSound *sound);
|
||||
void removeSound(const NLMISC::TStringId &name);
|
||||
void removeSound(const NLMISC::CSheetId &sheetId);
|
||||
|
||||
|
||||
private:
|
||||
|
@ -88,7 +89,8 @@ private:
|
|||
typedef CHashMap<NLMISC::TStringId, TSimpleSoundContainer, NLMISC::CStringIdHashMapTraits> TBufferAssocContainer;
|
||||
/// Sound names hash map
|
||||
// typedef std::hash_map<std::string, CSound*> TSoundTable;
|
||||
typedef CHashMap<NLMISC::TStringId, CSound*, NLMISC::CStringIdHashMapTraits> TSoundTable;
|
||||
// typedef CHashMap<NLMISC::CSheetId, CSound*, NLMISC::CSheetIdHashMapTraits> TSoundTable;
|
||||
typedef std::vector<CSound *> TSoundTable; // list the sheets by shortId of the sheetId
|
||||
|
||||
/// Assoc from buffer to sound. Used for sound unloading.
|
||||
TBufferAssocContainer _BufferAssoc;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "nel/3d/cluster.h"
|
||||
#include "nel/sound/sound.h"
|
||||
#include "nel/sound/group_controller.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
namespace NLSOUND {
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include "nel/sound/u_source.h"
|
||||
#include "nel/sound/u_group_controller.h"
|
||||
#include "nel/ligo/primitive.h"
|
||||
|
@ -284,7 +285,7 @@ public:
|
|||
//@}
|
||||
|
||||
/// Get a TSoundId from a name (returns NULL if not found)
|
||||
virtual TSoundId getSoundId( const NLMISC::TStringId &name ) = 0;
|
||||
virtual TSoundId getSoundId( const NLMISC::CSheetId &name ) = 0;
|
||||
|
||||
/// Gets the group controller for the given group tree path with separator '/', if it doesn't exist yet it will be created.
|
||||
/// Examples: "music", "effects", "dialog", "music/background", "music/loading", "music/player", etcetera
|
||||
|
@ -296,7 +297,7 @@ public:
|
|||
* pass a callback function that will be called (if not NULL) just before deleting the spawned
|
||||
* source.
|
||||
*/
|
||||
virtual USource *createSource(const NLMISC::TStringId &name, bool spawn=false, TSpawnEndCallback cb=NULL, void *callbackUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL) = 0;
|
||||
virtual USource *createSource(const NLMISC::CSheetId &name, bool spawn=false, TSpawnEndCallback cb=NULL, void *callbackUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL) = 0;
|
||||
/// Add a logical sound source (by sound id). To remove a source, just delete it. See createSource(const char*)
|
||||
virtual USource *createSource(TSoundId id, bool spawn=false, TSpawnEndCallback cb=NULL, void *callbackUserParam = NULL, NL3D::CCluster *cluster = 0, CSoundContext *context = 0, UGroupController *groupController = NULL) = 0;
|
||||
|
||||
|
@ -320,7 +321,7 @@ public:
|
|||
//@{
|
||||
//@name Statistic and utility methods
|
||||
/// Fill a vector with the names of all loaded sounds.
|
||||
virtual void getSoundNames( std::vector<NLMISC::TStringId> &names ) const = 0;
|
||||
virtual void getSoundNames( std::vector<NLMISC::CSheetId> &names ) const = 0;
|
||||
/// Return the number of mixing tracks (voices)
|
||||
virtual uint getPolyphony() const = 0;
|
||||
/// Return the number of sources
|
||||
|
|
|
@ -49,6 +49,7 @@ void Init()
|
|||
{
|
||||
try
|
||||
{
|
||||
CSheetId::initWithoutSheet();
|
||||
|
||||
CPath::addSearchPath(NL_SOUND_DATA"/data", true, false);
|
||||
|
||||
|
@ -100,7 +101,7 @@ USource *OnAddSource( const char *name, float x, float y, float z )
|
|||
/*
|
||||
* Create a source with sound 'name', and set some of its initial properties, if successful
|
||||
*/
|
||||
USource *source = AudioMixer->createSource( CStringMapper::map(name) );
|
||||
USource *source = AudioMixer->createSource(CSheetId(name, "sound"));
|
||||
if ( source != NULL )
|
||||
{
|
||||
source->setPos( CVector(x,y,z) );
|
||||
|
|
|
@ -62,6 +62,7 @@ static void initSample()
|
|||
{
|
||||
if (!INelContext::isContextInitialised())
|
||||
new CApplicationContext();
|
||||
CSheetId::initWithoutSheet();
|
||||
CPath::addSearchPath(NL_SOUND_DATA"/data", true, false);
|
||||
|
||||
printf("Sample demonstrating OGG playback using stream file .sound sheets.");
|
||||
|
@ -97,7 +98,7 @@ static void initSample()
|
|||
|
||||
//NLMISC::CHTimer::startBench();
|
||||
|
||||
s_Source = s_AudioMixer->createSource(CStringMapper::map("stream_file"));
|
||||
s_Source = s_AudioMixer->createSource(CSheetId("stream_file.sound"));
|
||||
nlassert(s_Source);
|
||||
s_StreamFileSource = dynamic_cast<CStreamFileSource *>(s_Source);
|
||||
nlassert(s_StreamFileSource);
|
||||
|
|
|
@ -59,6 +59,7 @@ static void initSample()
|
|||
{
|
||||
if (!INelContext::isContextInitialised())
|
||||
new CApplicationContext();
|
||||
CSheetId::initWithoutSheet();
|
||||
CPath::addSearchPath(NL_SOUND_DATA"/database/build/", true, false);
|
||||
|
||||
printf("Sample demonstrating OGG playback using UStreamSource.");
|
||||
|
@ -87,7 +88,7 @@ static void initSample()
|
|||
|
||||
//NLMISC::CHTimer::startBench();
|
||||
|
||||
USource *source = s_AudioMixer->createSource(CStringMapper::map("default_stream"));
|
||||
USource *source = s_AudioMixer->createSource(CSheetId("default_stream.sound"));
|
||||
nlassert(source);
|
||||
s_StreamSource = dynamic_cast<UStreamSource *>(source);
|
||||
nlassert(s_StreamSource);
|
||||
|
|
|
@ -868,6 +868,13 @@ bool CDriverD3D::uploadTextureInternal (ITexture& tex, CRect& rect, uint8 destMi
|
|||
D3DFORMAT destFormat, D3DFORMAT srcFormat)
|
||||
{
|
||||
H_AUTO_D3D(CDriverD3D_uploadTextureInternal)
|
||||
|
||||
if (rect.Width == 0 || rect.Height == 0)
|
||||
{
|
||||
nlwarning("Rectangle width or height cannot be 0");
|
||||
return false;
|
||||
}
|
||||
|
||||
// The D3D texture
|
||||
CTextureDrvInfosD3D* d3dtext = getTextureD3D(tex);
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ CPointLight::CPointLight() : _LightedModels(/*&_LightedModelListMemory*/)
|
|||
_Diffuse= _Specular= CRGBA::White;
|
||||
|
||||
// Default setup. this is arbitrary
|
||||
_Type= PointLight;
|
||||
_AttenuationBegin= 10;
|
||||
_AttenuationEnd= 30;
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ CPSSound::CPSSound() : _Gain(1.f),
|
|||
{
|
||||
NL_PS_FUNC(CPSSound_CPSSound)
|
||||
if (CParticleSystem::getSerializeIdentifierFlag()) _Name = std::string("sound");
|
||||
_SoundName = NLMISC::CStringMapper::emptyId();
|
||||
_SoundName = NLMISC::CSheetId::Unknown /*NLMISC::CStringMapper::emptyId()*/;
|
||||
}
|
||||
|
||||
// ***************************************************************************************************
|
||||
|
@ -261,17 +261,16 @@ void CPSSound::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
|
|||
CPSLocatedBindable::serial(f);
|
||||
// version 3 : added option to keep original pitch from the .sound
|
||||
sint ver = f.serialVersion(3);
|
||||
if (f.isReading())
|
||||
{
|
||||
std::string soundName;
|
||||
f.serial(soundName);
|
||||
_SoundName = NLMISC::CStringMapper::map(soundName);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string soundName = NLMISC::CStringMapper::unmap(_SoundName);
|
||||
f.serial(soundName);
|
||||
}
|
||||
|
||||
// FIXME: CPSSound is reserialized from the _ParticleSystemProto
|
||||
// cache when a non-_Shared particle system is instanced, this
|
||||
// causes unnecessary sheet id lookups from string.
|
||||
// SLN1: Serialize as uint32, but this requires the editor to know
|
||||
// the correct sheet id (and thus requires a built sheet_id.bin).
|
||||
// SLN2: Create a tool that reserializes all ps with sound sheet id
|
||||
// instead of sheet names, based on a global flag, and serialize
|
||||
// a flag that specifies if the ps is serialized with id or name.
|
||||
_SoundName.serialString(f, "sound");
|
||||
|
||||
sint32 nbSounds;
|
||||
bool hasScheme;
|
||||
|
|
|
@ -623,7 +623,7 @@ void CRenderTrav::changeLightSetup(CLightContribution *lightContribution, bool
|
|||
uint i;
|
||||
|
||||
// if same lightContribution, no-op.
|
||||
if(_CacheLightContribution == lightContribution && _LastLocalAttenuation == useLocalAttenuation)
|
||||
if (_CacheLightContribution == lightContribution && (lightContribution == NULL || _LastLocalAttenuation == useLocalAttenuation))
|
||||
return;
|
||||
// else, must setup the lights into driver.
|
||||
else
|
||||
|
|
|
@ -512,7 +512,8 @@ void CVisualCollisionMesh::receiveShadowMap(const NLMISC::CMatrix &instanceMatr
|
|||
}
|
||||
|
||||
// if triangle not clipped, add the triangle
|
||||
if( (triFlag & NL3D_VCM_SHADOW_NUM_CLIP_PLANE_MASK)==0 )
|
||||
// if( (triFlag & NL3D_VCM_SHADOW_NUM_CLIP_PLANE_MASK)==0 )
|
||||
if (triFlag == 0) // previous line not useful due to init
|
||||
{
|
||||
// Add the 3 index to the index buffer.
|
||||
ibPtr[currentTriIdx++]= (uint16) triId[0];
|
||||
|
|
|
@ -100,7 +100,7 @@ CFixedSizeAllocator::CChunk::~CChunk()
|
|||
nlassert(NumFreeObjs == 0);
|
||||
nlassert(Allocator->_NumChunks > 0);
|
||||
-- (Allocator->_NumChunks);
|
||||
delete Mem;
|
||||
delete[] Mem;
|
||||
}
|
||||
|
||||
// *****************************************************************************************************************
|
||||
|
|
|
@ -34,16 +34,16 @@ struct CPMainThread : public CPThread
|
|||
{
|
||||
CPMainThread() : CPThread(NULL, 0)
|
||||
{
|
||||
if(pthread_key_create(&threadSpecificKey, NULL) != 0)
|
||||
if(pthread_key_create(&threadSpecificKey, NULL) != 0)
|
||||
throw EThread("cannot create thread specific storage key.");
|
||||
|
||||
if(pthread_setspecific(threadSpecificKey, this) != 0)
|
||||
throw EThread("cannot set main thread ptr in thread specific storage.");
|
||||
}
|
||||
|
||||
~CPMainThread()
|
||||
~CPMainThread()
|
||||
{
|
||||
if(pthread_key_delete(threadSpecificKey) != 0)
|
||||
if(pthread_key_delete(threadSpecificKey) != 0)
|
||||
throw EThread("cannot delete thread specific storage key.");
|
||||
}
|
||||
};
|
||||
|
@ -139,7 +139,7 @@ void CPThread::start()
|
|||
/* setting the size of the stack also */
|
||||
ret = pthread_attr_setstacksize(&tattr, _StackSize);
|
||||
}
|
||||
|
||||
|
||||
bool detach_old_thread = false;
|
||||
pthread_t old_thread_handle;
|
||||
if (_State != ThreadStateNone)
|
||||
|
@ -221,6 +221,9 @@ void CPThread::wait ()
|
|||
bool CPThread::setCPUMask(uint64 cpuMask)
|
||||
{
|
||||
#ifdef __USE_GNU
|
||||
|
||||
nlwarning("This code does not work. May cause a segmentation fault...");
|
||||
|
||||
sint res = pthread_setaffinity_np(_ThreadHandle, sizeof(uint64), (const cpu_set_t*)&cpuMask);
|
||||
|
||||
if (res)
|
||||
|
@ -228,9 +231,14 @@ bool CPThread::setCPUMask(uint64 cpuMask)
|
|||
nlwarning("pthread_setaffinity_np() returned %d", res);
|
||||
return false;
|
||||
}
|
||||
#endif // __USE_GNU
|
||||
|
||||
return true;
|
||||
|
||||
#else // __USE_GNU
|
||||
|
||||
return false;
|
||||
|
||||
#endif // __USE_GNU
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -238,9 +246,12 @@ bool CPThread::setCPUMask(uint64 cpuMask)
|
|||
*/
|
||||
uint64 CPThread::getCPUMask()
|
||||
{
|
||||
uint64 cpuMask = 1;
|
||||
|
||||
#ifdef __USE_GNU
|
||||
|
||||
nlwarning("This code does not work. May cause a segmentation fault...");
|
||||
|
||||
uint64 cpuMask = 0;
|
||||
|
||||
sint res = pthread_getaffinity_np(_ThreadHandle, sizeof(uint64), (cpu_set_t*)&cpuMask);
|
||||
|
||||
if (res)
|
||||
|
@ -248,9 +259,14 @@ uint64 CPThread::getCPUMask()
|
|||
nlwarning("pthread_getaffinity_np() returned %d", res);
|
||||
return 0;
|
||||
}
|
||||
#endif // __USE_GNU
|
||||
|
||||
return cpuMask;
|
||||
|
||||
#else // __USE_GNU
|
||||
|
||||
return 0;
|
||||
|
||||
#endif // __USE_GNU
|
||||
}
|
||||
|
||||
void CPThread::setPriority(TThreadPriority priority)
|
||||
|
@ -311,9 +327,9 @@ IProcess *IProcess::getCurrentProcess ()
|
|||
*/
|
||||
uint64 CPProcess::getCPUMask()
|
||||
{
|
||||
uint64 cpuMask = 1;
|
||||
|
||||
#ifdef __USE_GNU
|
||||
|
||||
uint64 cpuMask = 0;
|
||||
sint res = sched_getaffinity(getpid(), sizeof(uint64), (cpu_set_t*)&cpuMask);
|
||||
|
||||
if (res)
|
||||
|
@ -321,15 +337,21 @@ uint64 CPProcess::getCPUMask()
|
|||
nlwarning("sched_getaffinity() returned %d, errno = %d: %s", res, errno, strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
#endif // __USE_GNU
|
||||
|
||||
return cpuMask;
|
||||
|
||||
#else // __USE_GNU
|
||||
|
||||
return 0;
|
||||
|
||||
#endif // __USE_GNU
|
||||
}
|
||||
|
||||
/// set the CPU mask
|
||||
bool CPProcess::setCPUMask(uint64 cpuMask)
|
||||
{
|
||||
#ifdef __USE_GNU
|
||||
|
||||
sint res = sched_setaffinity(getpid(), sizeof(uint64), (const cpu_set_t*)&cpuMask);
|
||||
|
||||
if (res)
|
||||
|
@ -337,9 +359,14 @@ bool CPProcess::setCPUMask(uint64 cpuMask)
|
|||
nlwarning("sched_setaffinity() returned %d, errno = %d: %s", res, errno, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
#endif // __USE_GNU
|
||||
|
||||
return true;
|
||||
|
||||
#else // __USE_GNU
|
||||
|
||||
return false;
|
||||
|
||||
#endif // __USE_GNU
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ CFileContainer::~CFileContainer()
|
|||
{
|
||||
if( _AllFileNames )
|
||||
{
|
||||
delete _AllFileNames;
|
||||
delete[] _AllFileNames;
|
||||
_AllFileNames = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,15 @@ vector<std::string> CSheetId::_FileExtensions;
|
|||
bool CSheetId::_Initialised=false;
|
||||
bool CSheetId::_RemoveUnknownSheet=true;
|
||||
bool CSheetId::_DontHaveSheetKnowledge = false;
|
||||
std::map<std::string, uint32> CSheetId::_DevTypeNameToId;
|
||||
std::vector<std::vector<std::string> > CSheetId::_DevSheetIdToName;
|
||||
std::map<std::string, uint32> CSheetId::_DevSheetNameToId;
|
||||
|
||||
#define NL_TEMP_YUBO_NO_SOUND_SHEET_ID
|
||||
|
||||
#ifdef NL_TEMP_YUBO_NO_SOUND_SHEET_ID
|
||||
namespace { bool a_NoSoundSheetId = false; const uint32 a_NoSoundSheetType = 80; }
|
||||
#endif
|
||||
|
||||
const CSheetId CSheetId::Unknown(0);
|
||||
|
||||
|
@ -101,8 +110,27 @@ CSheetId::CSheetId( const string& sheetName )
|
|||
*this = Unknown;
|
||||
}
|
||||
|
||||
// nldebug("LIST_SHEET_ID: %s (%s)", toString().c_str(), sheetName.c_str());
|
||||
|
||||
} // CSheetId //
|
||||
|
||||
CSheetId::CSheetId( const std::string& sheetName, const std::string &defaultType )
|
||||
{
|
||||
// Don't use this function without defaultType, use the one above.
|
||||
nlassert(defaultType.size() != 0);
|
||||
|
||||
if (sheetName.rfind('.') == std::string::npos)
|
||||
{
|
||||
std::string withType = sheetName + "." + defaultType;
|
||||
*this = CSheetId(withType);
|
||||
// nldebug("SHEETID: Constructing CSheetId from name '%s' without explicit type, defaulting as '%s' to '%s'", sheetName.c_str(), defaultType.c_str(), withType.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
*this = CSheetId(sheetName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
// Build
|
||||
|
@ -111,7 +139,46 @@ CSheetId::CSheetId( const string& sheetName )
|
|||
bool CSheetId::buildSheetId(const std::string& sheetName)
|
||||
{
|
||||
nlassert(_Initialised);
|
||||
nlassert(!_DontHaveSheetKnowledge);
|
||||
|
||||
// When no sheet_id.bin is loaded, use dynamically assigned IDs.
|
||||
if (_DontHaveSheetKnowledge)
|
||||
{
|
||||
std::string sheetNameLc = toLower(sheetName);
|
||||
std::map<std::string, uint32>::iterator it = _DevSheetNameToId.find(sheetNameLc);
|
||||
if (it == _DevSheetNameToId.end())
|
||||
{
|
||||
// Create a new dynamic sheet ID.
|
||||
// nldebug("SHEETID: Creating a dynamic sheet id for '%s'", sheetName.c_str());
|
||||
std::string sheetType = CFile::getExtension(sheetNameLc);
|
||||
std::string sheetName = CFile::getFilenameWithoutExtension(sheetNameLc);
|
||||
std::map<std::string, uint32>::iterator tit = _DevTypeNameToId.find(sheetType);
|
||||
uint32 typeId;
|
||||
if (tit == _DevTypeNameToId.end())
|
||||
{
|
||||
_FileExtensions.push_back(sheetType);
|
||||
_DevSheetIdToName.push_back(std::vector<std::string>());
|
||||
typeId = _FileExtensions.size() - 1;
|
||||
_DevTypeNameToId[sheetType] = typeId;
|
||||
std::string unknownNewType = std::string("unknown." + sheetType);
|
||||
_DevSheetIdToName[typeId].push_back(unknownNewType);
|
||||
_Id.IdInfos.Type = typeId;
|
||||
_Id.IdInfos.Id = _DevSheetIdToName[typeId].size() - 1;
|
||||
_DevSheetNameToId[unknownNewType] = _Id.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
typeId = tit->second;
|
||||
_Id.IdInfos.Type = typeId;
|
||||
}
|
||||
_DevSheetIdToName[typeId].push_back(sheetNameLc);
|
||||
_Id.IdInfos.Id = _DevSheetIdToName[typeId].size() - 1;
|
||||
// nldebug("SHEETID: Type %i, id %i, sheetid %i", _Id.IdInfos.Type, _Id.IdInfos.Id, _Id.Id);
|
||||
_DevSheetNameToId[sheetNameLc] = _Id.Id;
|
||||
return true;
|
||||
}
|
||||
_Id.Id = it->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
// try looking up the sheet name in _SheetNameToId
|
||||
CStaticMap<CChar,uint32,CCharComp>::const_iterator itId;
|
||||
|
@ -143,6 +210,26 @@ bool CSheetId::buildSheetId(const std::string& sheetName)
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NL_TEMP_YUBO_NO_SOUND_SHEET_ID
|
||||
if (a_NoSoundSheetId && sheetName.find(".sound") != std::string::npos)
|
||||
{
|
||||
std::string sheetNameLc = toLower(sheetName);
|
||||
std::map<std::string, uint32>::iterator it = _DevSheetNameToId.find(sheetNameLc);
|
||||
if (it == _DevSheetNameToId.end())
|
||||
{
|
||||
// nldebug("SHEETID: Creating a temporary sheet id for '%s'", sheetName.c_str());
|
||||
_DevSheetIdToName[0].push_back(sheetName);
|
||||
_Id.IdInfos.Type = a_NoSoundSheetType;
|
||||
_Id.IdInfos.Id = _DevSheetIdToName[0].size() - 1;
|
||||
_DevSheetNameToId[sheetNameLc] = _Id.Id;
|
||||
return true;
|
||||
}
|
||||
_Id.Id = it->second;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -283,7 +370,11 @@ void CSheetId::init(bool removeUnknownSheet)
|
|||
{
|
||||
// allow multiple calls to init in case libraries depending on sheetid call this init from their own
|
||||
if (_Initialised)
|
||||
{
|
||||
if (_DontHaveSheetKnowledge)
|
||||
nlinfo("SHEETID: CSheetId is already initialized without sheet_id.bin");
|
||||
return;
|
||||
}
|
||||
|
||||
// CFile::addFileChangeCallback ("sheet_id.bin", cbFileChange);
|
||||
|
||||
|
@ -292,13 +383,40 @@ void CSheetId::init(bool removeUnknownSheet)
|
|||
loadSheetId ();
|
||||
_Initialised=true;
|
||||
|
||||
#ifdef NL_TEMP_YUBO_NO_SOUND_SHEET_ID
|
||||
if (typeFromFileExtension("sound") == std::numeric_limits<uint32>::max())
|
||||
{
|
||||
nlwarning("SHEETID: Loading without known sound sheet id, please update sheet_id.bin with .sound sheets");
|
||||
nlassert(_FileExtensions.size() == 1 << (NL_SHEET_ID_TYPE_BITS));
|
||||
nlassert(_FileExtensions[a_NoSoundSheetType].empty());
|
||||
_FileExtensions[a_NoSoundSheetType] == "sound";
|
||||
_DevSheetIdToName.push_back(std::vector<std::string>());
|
||||
_DevSheetIdToName[0].push_back("unknown.sound");
|
||||
TSheetId id;
|
||||
id.IdInfos.Type = a_NoSoundSheetType;
|
||||
id.IdInfos.Id = _DevSheetIdToName[0].size() - 1;
|
||||
nlassert(id.IdInfos.Id == 0);
|
||||
_DevSheetNameToId["unknown.sound"] = id.Id;
|
||||
a_NoSoundSheetId = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // init //
|
||||
|
||||
void CSheetId::initWithoutSheet()
|
||||
{
|
||||
if (_Initialised)
|
||||
{
|
||||
nlassert(_DontHaveSheetKnowledge);
|
||||
return;
|
||||
}
|
||||
|
||||
_Initialised = true;
|
||||
_DontHaveSheetKnowledge = true;
|
||||
|
||||
// Initialize id 0,0 as unknown.unknown
|
||||
CSheetId unknownunknown = CSheetId("unknown.unknown");
|
||||
nlassert(unknownunknown == CSheetId::Unknown);
|
||||
}
|
||||
|
||||
|
||||
|
@ -310,6 +428,10 @@ void CSheetId::initWithoutSheet()
|
|||
void CSheetId::uninit()
|
||||
{
|
||||
delete [] _AllStrings.Ptr;
|
||||
_FileExtensions.clear();
|
||||
_DevTypeNameToId.clear();
|
||||
_DevSheetIdToName.clear();
|
||||
_DevSheetNameToId.clear();
|
||||
} // uninit //
|
||||
|
||||
//-----------------------------------------------
|
||||
|
@ -343,23 +465,12 @@ CSheetId& CSheetId::operator=( const CSheetId& sheetId )
|
|||
//-----------------------------------------------
|
||||
CSheetId& CSheetId::operator=( const string& sheetName )
|
||||
{
|
||||
nlassert(_Initialised);
|
||||
nlassert(!_DontHaveSheetKnowledge);
|
||||
|
||||
CStaticMap<CChar,uint32,CCharComp>::const_iterator itId;
|
||||
CChar c;
|
||||
c.Ptr = new char [sheetName.size()+1];
|
||||
strcpy(c.Ptr, sheetName.c_str());
|
||||
toLower(c.Ptr);
|
||||
if (!buildSheetId(sheetName))
|
||||
*this = Unknown;
|
||||
|
||||
// nldebug("LIST_SHEET_ID: %s (%s)", toString().c_str(), sheetName.c_str());
|
||||
|
||||
itId = _SheetNameToId.find (c);
|
||||
delete [] c.Ptr;
|
||||
if( itId != _SheetNameToId.end() )
|
||||
{
|
||||
_Id.Id = (*itId).second;
|
||||
return *this;
|
||||
}
|
||||
*this = Unknown;
|
||||
return *this;
|
||||
|
||||
} // operator= //
|
||||
|
@ -407,6 +518,13 @@ bool CSheetId::operator < (const CSheetId& sheetRef ) const
|
|||
string CSheetId::toString(bool ifNotFoundUseNumericId) const
|
||||
{
|
||||
if (!_Initialised) init(false);
|
||||
|
||||
if (_DontHaveSheetKnowledge)
|
||||
{
|
||||
// FIXME: When someone punches in a fake sheet id this will
|
||||
// fail.
|
||||
return _DevSheetIdToName[_Id.IdInfos.Type][_Id.IdInfos.Id];
|
||||
}
|
||||
|
||||
CStaticMap<uint32,CChar>::const_iterator itStr = _SheetIdToName.find (_Id.Id);
|
||||
if( itStr != _SheetIdToName.end() )
|
||||
|
@ -415,6 +533,12 @@ string CSheetId::toString(bool ifNotFoundUseNumericId) const
|
|||
}
|
||||
else
|
||||
{
|
||||
#ifdef NL_TEMP_YUBO_NO_SOUND_SHEET_ID
|
||||
if (a_NoSoundSheetId && _Id.IdInfos.Type == a_NoSoundSheetType)
|
||||
{
|
||||
return _DevSheetIdToName[0][_Id.IdInfos.Id];
|
||||
}
|
||||
#endif
|
||||
// This nlwarning is commented out because the loggers are mutexed, therefore
|
||||
// you couldn't use toString() within a nlwarning().
|
||||
//nlwarning("<CSheetId::toString> The sheet %08x is not in sheet_id.bin",_Id.Id);
|
||||
|
@ -432,6 +556,8 @@ string CSheetId::toString(bool ifNotFoundUseNumericId) const
|
|||
|
||||
void CSheetId::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
|
||||
{
|
||||
nlassert(!_DontHaveSheetKnowledge);
|
||||
|
||||
f.serial( _Id.Id );
|
||||
|
||||
#ifdef NL_DEBUG_SHEET_ID
|
||||
|
@ -443,6 +569,24 @@ void CSheetId::serial(NLMISC::IStream &f) throw(NLMISC::EStream)
|
|||
#endif
|
||||
}
|
||||
|
||||
void CSheetId::serialString(NLMISC::IStream &f, const std::string &defaultType) throw(NLMISC::EStream)
|
||||
{
|
||||
nlassert(_Initialised);
|
||||
|
||||
if (f.isReading())
|
||||
{
|
||||
std::string sheetName;
|
||||
f.serial(sheetName);
|
||||
*this = CSheetId(sheetName, defaultType);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if this assert fails, you may be using an outdated id bin
|
||||
nlassert(*this != CSheetId::Unknown);
|
||||
std::string sheetName = toString();
|
||||
f.serial(sheetName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------
|
||||
|
|
|
@ -32,9 +32,262 @@
|
|||
#include "nel/misc/time_nl.h"
|
||||
#include "nel/misc/sstring.h"
|
||||
|
||||
#include <nel/misc/thread.h>
|
||||
|
||||
namespace NLMISC
|
||||
{
|
||||
|
||||
namespace {
|
||||
#ifdef NL_OS_WINDOWS
|
||||
bool a_HaveQueryPerformance = false;
|
||||
LARGE_INTEGER a_QueryPerformanceFrequency;
|
||||
#endif
|
||||
#ifdef NL_OS_UNIX
|
||||
# if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
|
||||
# if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0)
|
||||
# define NL_MONOTONIC_CLOCK
|
||||
# endif
|
||||
# endif
|
||||
# ifdef NL_MONOTONIC_CLOCK
|
||||
bool a_CheckedMonotonicClock = false;
|
||||
bool a_HasMonotonicClock = false;
|
||||
uint64 a_MonotonicClockFrequency = 0;
|
||||
uint64 a_MonotonicClockResolutionNs = 0;
|
||||
bool hasMonotonicClock()
|
||||
{
|
||||
if (!a_CheckedMonotonicClock)
|
||||
{
|
||||
/* Initialize the local time engine.
|
||||
* On Unix, this method will find out if the Monotonic Clock is supported
|
||||
* (seems supported by kernel 2.6, not by kernel 2.4). See getLocalTime().
|
||||
*/
|
||||
struct timespec tv;
|
||||
if ((clock_gettime( CLOCK_MONOTONIC, &tv ) == 0) &&
|
||||
(clock_getres( CLOCK_MONOTONIC, &tv ) == 0))
|
||||
{
|
||||
// nldebug( "Monotonic local time supported (resolution %.6f ms)", ((float)tv.tv_sec)*1000.0f + ((float)tv.tv_nsec)/1000000.0f );
|
||||
|
||||
if (tv.tv_sec > 0)
|
||||
{
|
||||
nlwarning("Monotonic clock not ok, resolution > 1s");
|
||||
a_HasMonotonicClock = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint64 nsPerTick = tv.tv_nsec;
|
||||
uint64 nsPerSec = 1000000000L;
|
||||
uint64 tickPerSec = nsPerSec / nsPerTick;
|
||||
a_MonotonicClockFrequency = tickPerSec;
|
||||
a_MonotonicClockResolutionNs = nsPerTick;
|
||||
a_HasMonotonicClock = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
a_HasMonotonicClock = false;
|
||||
}
|
||||
a_CheckedMonotonicClock = true;
|
||||
}
|
||||
return a_HasMonotonicClock;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void CTime::probeTimerInfo(CTime::CTimerInfo &result)
|
||||
{
|
||||
breakable
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
LARGE_INTEGER winPerfFreq;
|
||||
LARGE_INTEGER winPerfCount;
|
||||
DWORD lowResTime;
|
||||
if (!QueryPerformanceFrequency(&winPerfFreq))
|
||||
{
|
||||
nldebug("Cannot query performance frequency");
|
||||
result.IsHighPrecisionAvailable = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.HighPrecisionResolution = winPerfFreq.QuadPart;
|
||||
}
|
||||
if (winPerfFreq.QuadPart == 1000)
|
||||
{
|
||||
nldebug("Higher precision timer not available, OS defaulted to GetTickCount");
|
||||
result.IsHighPrecisionAvailable = false;
|
||||
}
|
||||
if (!QueryPerformanceCounter(&winPerfCount))
|
||||
{
|
||||
nldebug("Cannot query performance counter");
|
||||
result.IsHighPrecisionAvailable = false;
|
||||
result.HighPrecisionResolution = 1000;
|
||||
}
|
||||
a_HaveQueryPerformance = result.IsHighPrecisionAvailable;
|
||||
a_QueryPerformanceFrequency.QuadPart = winPerfFreq.QuadPart;
|
||||
if (!result.IsHighPrecisionAvailable)
|
||||
{
|
||||
lowResTime = timeGetTime();
|
||||
}
|
||||
#else
|
||||
|
||||
// Other platforms are awesome. Generic implementation for now.
|
||||
TTime localTime = getLocalTime();
|
||||
result.IsHighPrecisionAvailable = true;
|
||||
result.HighPrecisionResolution = 0;
|
||||
|
||||
# ifdef NL_MONOTONIC_CLOCK
|
||||
timespec monoClock;
|
||||
if (hasMonotonicClock())
|
||||
{
|
||||
clock_gettime(CLOCK_MONOTONIC, &monoClock);
|
||||
result.HighPrecisionResolution = a_MonotonicClockFrequency;
|
||||
}
|
||||
else
|
||||
{
|
||||
nldebug("Monotonic clock not available");
|
||||
}
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
uint64 cpuMask = IProcess::getCurrentProcess()->getCPUMask();
|
||||
#ifdef NL_OS_WINDOWS
|
||||
uint64 threadMask = IThread::getCurrentThread()->getCPUMask(); // broken on linux, don't expect it to work anywhere
|
||||
#else
|
||||
uint64 threadMask = cpuMask;
|
||||
#endif
|
||||
|
||||
uint identical = 0; // Identical stamps may indicate the os handling backwards glitches.
|
||||
uint backwards = 0; // Happens when the timers are not always in sync and the implementation is faulty.
|
||||
uint regular = 0; // How many times the number advanced normally.
|
||||
uint skipping = 0; // Does not really mean anything necessarily.
|
||||
uint frequencybug = 0; // Should never happen.
|
||||
// uint badcore = 0; // Affinity does not work.
|
||||
|
||||
// Cycle 32 times trough all cores, and verify if the timing remains consistent.
|
||||
for (uint i = 32; i; --i)
|
||||
{
|
||||
uint64 currentBit = 1;
|
||||
for (uint j = 64; j; --j)
|
||||
{
|
||||
if (cpuMask & currentBit)
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
if (!IThread::getCurrentThread()->setCPUMask(currentBit))
|
||||
#else
|
||||
if (!IProcess::getCurrentProcess()->setCPUMask(currentBit))
|
||||
#endif
|
||||
break; // Thread was set to last cpu.
|
||||
#ifdef NL_OS_WINDOWS
|
||||
// Make sure the thread is rescheduled.
|
||||
SwitchToThread();
|
||||
Sleep(0);
|
||||
// Verify the core
|
||||
/* Can only verify on 2003, Vista and higher.
|
||||
if (1 << GetCurrentProcessorNumber() != currentBit)
|
||||
++badcore;
|
||||
*/
|
||||
// Check if the timer is still sane.
|
||||
if (result.IsHighPrecisionAvailable)
|
||||
{
|
||||
LARGE_INTEGER winPerfFreqN;
|
||||
LARGE_INTEGER winPerfCountN;
|
||||
QueryPerformanceFrequency(&winPerfFreqN);
|
||||
if (winPerfFreqN.QuadPart != winPerfFreq.QuadPart)
|
||||
++frequencybug;
|
||||
QueryPerformanceCounter(&winPerfCountN);
|
||||
if (winPerfCountN.QuadPart == winPerfCount.QuadPart)
|
||||
++identical;
|
||||
if (winPerfCountN.QuadPart < winPerfCount.QuadPart || winPerfCountN.QuadPart - winPerfCount.QuadPart < 0)
|
||||
++backwards;
|
||||
if (winPerfCountN.QuadPart - winPerfCount.QuadPart > winPerfFreq.QuadPart / 20) // 50ms skipping check
|
||||
++skipping;
|
||||
else if (winPerfCountN.QuadPart > winPerfCount.QuadPart)
|
||||
++regular;
|
||||
winPerfCount.QuadPart = winPerfCountN.QuadPart;
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD lowResTimeN;
|
||||
lowResTimeN = timeGetTime();
|
||||
if (lowResTimeN == lowResTime)
|
||||
++identical;
|
||||
if (lowResTimeN < lowResTime || lowResTimeN - lowResTime < 0)
|
||||
++backwards;
|
||||
if (lowResTimeN - lowResTime > 50)
|
||||
++skipping;
|
||||
else if (lowResTimeN > lowResTime)
|
||||
++regular;
|
||||
lowResTime = lowResTimeN;
|
||||
}
|
||||
#else
|
||||
#ifdef NL_OS_UNIX
|
||||
sched_yield();
|
||||
#else
|
||||
nlSleep(0);
|
||||
#endif
|
||||
# ifdef NL_MONOTONIC_CLOCK
|
||||
if (hasMonotonicClock())
|
||||
{
|
||||
timespec monoClockN;
|
||||
clock_gettime(CLOCK_MONOTONIC, &monoClockN);
|
||||
if (monoClock.tv_sec == monoClockN.tv_sec && monoClock.tv_nsec == monoClockN.tv_nsec)
|
||||
++identical;
|
||||
if (monoClockN.tv_sec < monoClock.tv_sec || (monoClock.tv_sec == monoClockN.tv_sec && monoClockN.tv_nsec < monoClock.tv_nsec))
|
||||
++backwards;
|
||||
if (monoClock.tv_sec == monoClockN.tv_sec && (monoClockN.tv_nsec - monoClock.tv_nsec > 50000000L))
|
||||
++skipping;
|
||||
else if ((monoClock.tv_sec == monoClockN.tv_sec && monoClock.tv_nsec < monoClockN.tv_nsec) || monoClock.tv_sec < monoClockN.tv_sec)
|
||||
++regular;
|
||||
monoClock.tv_sec = monoClockN.tv_sec;
|
||||
monoClock.tv_nsec = monoClockN.tv_nsec;
|
||||
}
|
||||
else
|
||||
# endif
|
||||
{
|
||||
TTime localTimeN = getLocalTime();
|
||||
if (localTimeN == localTime)
|
||||
++identical;
|
||||
if (localTimeN < localTime || localTimeN - localTime < 0)
|
||||
++backwards;
|
||||
if (localTimeN - localTime > 50)
|
||||
++skipping;
|
||||
else if (localTimeN > localTime)
|
||||
++regular;
|
||||
localTime = localTimeN;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
currentBit <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NL_OS_WINDOWS
|
||||
IThread::getCurrentThread()->setCPUMask(threadMask);
|
||||
#else
|
||||
IProcess::getCurrentProcess()->setCPUMask(threadMask);
|
||||
#endif
|
||||
|
||||
nldebug("Timer resolution: %i Hz", (int)(result.HighPrecisionResolution));
|
||||
nldebug("Time identical: %i, backwards: %i, regular: %i, skipping: %i, frequency bug: %i", identical, backwards, regular, skipping, frequencybug);
|
||||
if (identical > regular)
|
||||
nlwarning("The system timer is of relatively low resolution, you may experience issues");
|
||||
if (backwards > 0 || frequencybug > 0)
|
||||
{
|
||||
nlwarning("The current system timer is not reliable across multiple cpu cores");
|
||||
result.RequiresSingleCore = true;
|
||||
}
|
||||
else result.RequiresSingleCore = false;
|
||||
|
||||
if (result.HighPrecisionResolution == 14318180)
|
||||
nldebug("Detected known HPET era timer frequency");
|
||||
if (result.HighPrecisionResolution == 3579545)
|
||||
nldebug("Detected known AHCI era timer frequency");
|
||||
if (result.HighPrecisionResolution == 1193182)
|
||||
nldebug("Detected known i8253/i8254 era timer frequency");
|
||||
}
|
||||
}
|
||||
|
||||
/* Return the number of second since midnight (00:00:00), January 1, 1970,
|
||||
* coordinated universal time, according to the system clock.
|
||||
* This values is the same on all computer if computers are synchronized (with NTP for example).
|
||||
|
@ -97,54 +350,42 @@ TTime CTime::getLocalTime ()
|
|||
//else
|
||||
//{
|
||||
// This is not affected by system time changes. But it cycles every 49 days.
|
||||
return timeGetTime();
|
||||
// return timeGetTime(); // Only this was left active before it was commented.
|
||||
//}
|
||||
|
||||
/*
|
||||
* The above is no longer relevant.
|
||||
*/
|
||||
|
||||
if (a_HaveQueryPerformance)
|
||||
{
|
||||
// On a (fast) 15MHz timer this rolls over after 7000 days.
|
||||
// If my calculations are right.
|
||||
LARGE_INTEGER counter;
|
||||
QueryPerformanceCounter(&counter);
|
||||
counter.QuadPart *= (LONGLONG)1000L;
|
||||
counter.QuadPart /= a_QueryPerformanceFrequency.QuadPart;
|
||||
return counter.QuadPart;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use default reliable low resolution timer.
|
||||
return timeGetTime();
|
||||
}
|
||||
|
||||
#elif defined (NL_OS_UNIX)
|
||||
|
||||
static bool initdone = false;
|
||||
static bool isMonotonicClockSupported = false;
|
||||
if ( ! initdone )
|
||||
#ifdef NL_MONOTONIC_CLOCK
|
||||
|
||||
if (hasMonotonicClock())
|
||||
{
|
||||
|
||||
#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
|
||||
#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0)
|
||||
|
||||
/* Initialize the local time engine.
|
||||
* On Unix, this method will find out if the Monotonic Clock is supported
|
||||
* (seems supported by kernel 2.6, not by kernel 2.4). See getLocalTime().
|
||||
*/
|
||||
struct timespec tv;
|
||||
if ( (clock_gettime( CLOCK_MONOTONIC, &tv ) == 0) &&
|
||||
(clock_getres( CLOCK_MONOTONIC, &tv ) == 0) )
|
||||
{
|
||||
// nldebug( "Monotonic local time supported (resolution %.6f ms)", ((float)tv.tv_sec)*1000.0f + ((float)tv.tv_nsec)/1000000.0f );
|
||||
isMonotonicClockSupported = true;
|
||||
}
|
||||
else
|
||||
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
// nlwarning( "Monotonic local time not supported, caution with time sync" );
|
||||
}
|
||||
|
||||
initdone = true;
|
||||
}
|
||||
|
||||
#if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
|
||||
#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0)
|
||||
|
||||
if ( isMonotonicClockSupported )
|
||||
{
|
||||
struct timespec tv;
|
||||
timespec tv;
|
||||
// This is not affected by system time changes.
|
||||
if ( clock_gettime( CLOCK_MONOTONIC, &tv ) != 0 )
|
||||
nlerror ("Can't get clock time again");
|
||||
return (TTime)tv.tv_sec * (TTime)1000 + (TTime)((tv.tv_nsec/*+500*/) / 1000000);
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// This is affected by system time changes.
|
||||
|
@ -156,7 +397,6 @@ TTime CTime::getLocalTime ()
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* Return the time in processor ticks. Use it for profile purpose.
|
||||
* If the performance time is not supported on this hardware, it returns 0.
|
||||
* \warning On a multiprocessor system, the value returned by each processor may
|
||||
|
@ -183,7 +423,7 @@ TTicks CTime::getPerformanceTime ()
|
|||
return (hi << 32) | (lo & 0xffffffff);
|
||||
#elif defined(HAVE_X86) and !defined(NL_OS_MAC)
|
||||
uint64 x;
|
||||
// RDTSC - Read time-stamp counter into EDX:EAX.
|
||||
// RDTSC - Read time-stamp counter into EDX:EAX.
|
||||
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
|
||||
return x;
|
||||
#else // HAVE_X86
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "nel/misc/command.h"
|
||||
#include "nel/misc/file.h"
|
||||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
#include "nel/georges/u_form_loader.h"
|
||||
#include "nel/georges/u_form_elm.h"
|
||||
|
@ -467,7 +468,7 @@ void CAudioMixerUser::initDevice(const std::string &deviceName, const CInitInfo
|
|||
nlwarning("AM: OptionSoftwareBuffer not available, forceSoftwareBuffer = false");
|
||||
forceSoftware = false; // not really needed, but set anyway in case this is still used later in this function
|
||||
}
|
||||
if (manualRolloff && !_SoundDriver->getOption(ISoundDriver::OptionLocalBufferCopy))
|
||||
if (manualRolloff && !_SoundDriver->getOption(ISoundDriver::OptionManualRolloff))
|
||||
{
|
||||
nlwarning("AM: OptionManualRolloff not available, manualRolloff = false");
|
||||
manualRolloff = false; // not really needed, but set anyway in case this is still used later in this function
|
||||
|
@ -970,10 +971,14 @@ void CAudioMixerUser::buildSampleBankList()
|
|||
/// Build the sound bank packed sheets file from georges sound sheet files with .sound extension in the search path, and return the path to the written file.
|
||||
std::string UAudioMixer::buildSoundBank(const std::string &packedSheetDir)
|
||||
{
|
||||
CGroupControllerRoot *tempRoot = NULL;
|
||||
if (!CGroupControllerRoot::isInitialized())
|
||||
tempRoot = new CGroupControllerRoot();
|
||||
std::string dir = CPath::standardizePath(packedSheetDir, true);
|
||||
CSoundBank *soundBank = new CSoundBank();
|
||||
soundBank->load(dir, true);
|
||||
delete soundBank;
|
||||
delete tempRoot;
|
||||
return dir + "sounds.packed_sheets";
|
||||
}
|
||||
|
||||
|
@ -1049,9 +1054,8 @@ public:
|
|||
for (uint i=0; i<size; ++i)
|
||||
{
|
||||
items->getArrayValue(soundName, i);
|
||||
soundName = soundName.substr(0, soundName.find(".sound"));
|
||||
|
||||
cs.SoundNames.push_back(CStringMapper::map(soundName));
|
||||
nlassert(soundName.find(".sound") != std::string::npos);
|
||||
cs.SoundNames.push_back(CSheetId(soundName));
|
||||
}
|
||||
|
||||
if (!cs.SoundNames.empty())
|
||||
|
@ -1101,7 +1105,7 @@ void CAudioMixerUser::initUserVar()
|
|||
TUserVarControlsContainer::iterator first(_UserVarControls.begin()), last(_UserVarControls.end());
|
||||
for(; first != last; ++first)
|
||||
{
|
||||
std::vector<NLMISC::TStringId>::iterator first2(first->second.SoundNames.begin()), last2(first->second.SoundNames.end());
|
||||
std::vector<NLMISC::CSheetId>::iterator first2(first->second.SoundNames.begin()), last2(first->second.SoundNames.end());
|
||||
for (; first2 != last2; ++first2)
|
||||
{
|
||||
CSound *sound = getSoundId(*first2);
|
||||
|
@ -1132,7 +1136,7 @@ void CAudioMixerUser::CControledSources::serial(NLMISC::IStream &s)
|
|||
for (uint i=0; i<size; ++i)
|
||||
{
|
||||
s.serial(soundName);
|
||||
SoundNames.push_back(CStringMapper::map(soundName));
|
||||
SoundNames.push_back(CSheetId(soundName, "sound"));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1146,7 +1150,7 @@ void CAudioMixerUser::CControledSources::serial(NLMISC::IStream &s)
|
|||
|
||||
for (uint i=0; i<size; ++i)
|
||||
{
|
||||
soundName = CStringMapper::unmap(SoundNames[i]);
|
||||
soundName = SoundNames[i].toString();;
|
||||
s.serial(soundName);
|
||||
}
|
||||
}
|
||||
|
@ -1780,7 +1784,7 @@ void CAudioMixerUser::update()
|
|||
|
||||
// ******************************************************************
|
||||
|
||||
TSoundId CAudioMixerUser::getSoundId( const NLMISC::TStringId &name )
|
||||
TSoundId CAudioMixerUser::getSoundId( const NLMISC::CSheetId &name )
|
||||
{
|
||||
return _SoundBank->getSound(name);
|
||||
}
|
||||
|
@ -1894,7 +1898,7 @@ retrySound:
|
|||
|
||||
if (invalid)
|
||||
{
|
||||
nlwarning("The sound %s contain an infinite recursion !", CStringMapper::unmap(id->getName()).c_str());
|
||||
nlwarning("The sound %s contain an infinite recursion !", id->getName().toString().c_str()/*CStringMapper::unmap(id->getName()).c_str()*/);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -2035,7 +2039,7 @@ retrySound:
|
|||
|
||||
// ******************************************************************
|
||||
|
||||
USource *CAudioMixerUser::createSource( const NLMISC::TStringId &name, bool spawn, TSpawnEndCallback cb, void *userParam, NL3D::CCluster *cluster, CSoundContext *context, UGroupController *groupController)
|
||||
USource *CAudioMixerUser::createSource( const NLMISC::CSheetId &name, bool spawn, TSpawnEndCallback cb, void *userParam, NL3D::CCluster *cluster, CSoundContext *context, UGroupController *groupController)
|
||||
{
|
||||
return createSource( getSoundId( name ), spawn, cb, userParam, cluster, context, groupController);
|
||||
}
|
||||
|
@ -2162,7 +2166,7 @@ bool CAudioMixerUser::unloadSampleBank(const std::string &name)
|
|||
|
||||
// ******************************************************************
|
||||
|
||||
void CAudioMixerUser::getSoundNames( std::vector<NLMISC::TStringId> &names ) const
|
||||
void CAudioMixerUser::getSoundNames( std::vector<NLMISC::CSheetId> &names ) const
|
||||
{
|
||||
_SoundBank->getNames(names);
|
||||
}
|
||||
|
@ -2312,7 +2316,6 @@ void CAudioMixerUser::getLoadedSampleBankInfo(std::vector<std::pair<std::strin
|
|||
}
|
||||
|
||||
|
||||
|
||||
void CAudioMixerUser::setListenerPos (const NLMISC::CVector &pos)
|
||||
{
|
||||
_Listener.setPos(pos);
|
||||
|
|
|
@ -84,7 +84,8 @@ void CBackgroundSound::importForm(const std::string& filename, NLGEORGES::UFormE
|
|||
// Read the sound name.
|
||||
std::string soundName;
|
||||
psoundItem->getValueByName(soundName, "Sound");
|
||||
sound.SoundName = CStringMapper::map(CFile::getFilenameWithoutExtension(soundName));
|
||||
nlassert(soundName.find(".sound") != std::string::npos);
|
||||
sound.SoundName = NLMISC::CSheetId(soundName);
|
||||
|
||||
|
||||
// Read the environnement flag.
|
||||
|
@ -133,7 +134,7 @@ void CBackgroundSound::getSubSoundList(std::vector<std::pair<std::string, CSound
|
|||
for (; first != last; ++first)
|
||||
{
|
||||
CSound *sound = mixer->getSoundId(first->SoundName);
|
||||
subsounds.push_back(make_pair(CStringMapper::unmap(first->SoundName), sound));
|
||||
subsounds.push_back(make_pair(first->SoundName.toString()/*CStringMapper::unmap(first->SoundName)*/, sound));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ void CBackgroundSoundManager::addSound(const std::string &soundName, uint layerI
|
|||
CAudioMixerUser *mixer = CAudioMixerUser::instance();
|
||||
TSoundData sd;
|
||||
|
||||
sd.SoundName = CStringMapper::map(soundName);
|
||||
sd.SoundName = NLMISC::CSheetId(soundName, "sound"); // note: loaded from .primitive
|
||||
sd.Sound = mixer->getSoundId(sd.SoundName);
|
||||
sd.Source = 0;
|
||||
|
||||
|
@ -133,7 +133,7 @@ void CBackgroundSoundManager::addSound(const std::string &soundName, uint layerI
|
|||
}
|
||||
else
|
||||
{
|
||||
nlwarning ("The sound '%s' can't be loaded", CStringMapper::unmap(sd.SoundName).c_str());
|
||||
nlwarning ("The sound '%s' can't be loaded", sd.SoundName.toString().c_str()/*CStringMapper::unmap(sd.SoundName).c_str()*/);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1431,21 +1431,15 @@ void CBackgroundSoundManager::TBanksData::serial(NLMISC::IStream &s)
|
|||
|
||||
void CBackgroundSoundManager::TSoundData::serial(NLMISC::IStream &s)
|
||||
{
|
||||
std::string str;
|
||||
|
||||
//std::string str;
|
||||
SoundName.serialString(s, "sound");
|
||||
if (s.isReading())
|
||||
{
|
||||
CAudioMixerUser *mixer = CAudioMixerUser::instance();
|
||||
s.serial(str);
|
||||
SoundName = NLMISC::CStringMapper::map(str);
|
||||
Sound = mixer->getSoundId(SoundName);
|
||||
Source = NULL;
|
||||
Selected = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
s.serial(const_cast<std::string&>(NLMISC::CStringMapper::unmap(SoundName)));
|
||||
}
|
||||
s.serial(MinBox);
|
||||
s.serial(MaxBox);
|
||||
s.serial(Surface);
|
||||
|
|
|
@ -70,7 +70,7 @@ float EAX_MATERIAL_PARAM[] =
|
|||
class CSoundGroupSerializer
|
||||
{
|
||||
public:
|
||||
std::vector<std::pair<NLMISC::TStringId, NLMISC::TStringId> > _SoundGroupAssoc;
|
||||
std::vector<std::pair<NLMISC::TStringId, NLMISC::CSheetId> > _SoundGroupAssoc;
|
||||
|
||||
// load the values using the george sheet (called by GEORGE::loadForm)
|
||||
void readGeorges (const NLMISC::CSmartPtr<NLGEORGES::UForm> &form, const std::string &/* name */)
|
||||
|
@ -95,15 +95,9 @@ public:
|
|||
item->getValueByName(soundGroup, ".SoundGroup");
|
||||
item->getValueByName(sound, ".Sound");
|
||||
|
||||
string::size_type n = sound.rfind(".sound");
|
||||
nlassert(sound.find(".sound") != std::string::npos);
|
||||
|
||||
if (n != string::npos)
|
||||
{
|
||||
// remove the tailing .sound
|
||||
sound = sound.substr(0, n);
|
||||
}
|
||||
|
||||
_SoundGroupAssoc.push_back(make_pair(CStringMapper::map(soundGroup), CStringMapper::map(sound)));
|
||||
_SoundGroupAssoc.push_back(make_pair(CStringMapper::map(soundGroup), CSheetId(sound)));
|
||||
}
|
||||
}
|
||||
catch(...)
|
||||
|
@ -125,24 +119,18 @@ public:
|
|||
{
|
||||
if (s.isReading())
|
||||
{
|
||||
std::string soundGroup;
|
||||
std::string sound;
|
||||
TStringId soundGroup;
|
||||
CSheetId sound;
|
||||
|
||||
s.serial(soundGroup);
|
||||
s.serial(sound);
|
||||
CStringMapper::serialString(s, soundGroup);
|
||||
sound.serialString(s, "sound");
|
||||
|
||||
_SoundGroupAssoc.push_back(make_pair(CStringMapper::map(soundGroup), CStringMapper::map(sound)));
|
||||
_SoundGroupAssoc.push_back(make_pair(soundGroup, sound));
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string soundGroup;
|
||||
std::string sound;
|
||||
|
||||
soundGroup = CStringMapper::unmap(_SoundGroupAssoc[i].first);
|
||||
sound = CStringMapper::unmap(_SoundGroupAssoc[i].second);
|
||||
|
||||
s.serial(soundGroup);
|
||||
s.serial(sound);
|
||||
CStringMapper::serialString(s, _SoundGroupAssoc[i].first);
|
||||
_SoundGroupAssoc[i].second.serialString(s, "sound");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -289,10 +277,10 @@ void CClusteredSound::update(const CVector &listenerPos, const CVector &/* view
|
|||
|
||||
// nldebug("Searching sound assoc for group [%s]", CStringMapper::unmap(soundGroup).c_str());
|
||||
|
||||
TStringStringMap::iterator it2(_SoundGroupToSound.find(soundGroup));
|
||||
TStringSheetMap::iterator it2(_SoundGroupToSound.find(soundGroup));
|
||||
if (it2 != _SoundGroupToSound.end())
|
||||
{
|
||||
NLMISC::TStringId soundName = it2->second;
|
||||
NLMISC::CSheetId soundName = it2->second;
|
||||
CClusterSound cs;
|
||||
|
||||
// nldebug("Found the sound [%s] for sound group [%s]", CStringMapper::unmap(soundName).c_str(), CStringMapper::unmap(soundGroup).c_str());
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "nel/misc/path.h"
|
||||
#include "nel/misc/common.h"
|
||||
#include "nel/sound/audio_mixer_user.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
|
@ -63,11 +64,11 @@ void CComplexSound::parseSequence(const std::string &str, std::vector<uint32> &s
|
|||
void CComplexSound::getSubSoundList(std::vector<std::pair<std::string, CSound*> > &subsounds) const
|
||||
{
|
||||
CAudioMixerUser *mixer = CAudioMixerUser::instance();
|
||||
std::vector<NLMISC::TStringId>::const_iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
std::vector<NLMISC::CSheetId>::const_iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
CSound *sound = mixer->getSoundId(*first);
|
||||
subsounds.push_back(make_pair(CStringMapper::unmap(*first), sound));
|
||||
subsounds.push_back(make_pair((*first).toString()/*CStringMapper::unmap(*first)*/, sound));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,7 +84,7 @@ uint32 CComplexSound::getDuration()
|
|||
CAudioMixerUser *mixer = CAudioMixerUser::instance();
|
||||
|
||||
vector<sint32> durations;
|
||||
std::vector<NLMISC::TStringId>::iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
std::vector<NLMISC::CSheetId>::iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
CSound *sound = mixer->getSoundId(*first);
|
||||
|
@ -204,7 +205,7 @@ float CComplexSound::getMaxDistance() const
|
|||
CComplexSound *This = const_cast<CComplexSound*>(this);
|
||||
|
||||
This->_MaxDist = 0.0f;
|
||||
std::vector<NLMISC::TStringId>::const_iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
std::vector<NLMISC::CSheetId>::const_iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
|
@ -236,7 +237,7 @@ void CComplexSound::serial(NLMISC::IStream &s)
|
|||
{
|
||||
std::string name;
|
||||
s.serial(name);
|
||||
_Sounds.push_back(CStringMapper::map(name));
|
||||
_Sounds.push_back(NLMISC::CSheetId(name, "sound"));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -245,7 +246,7 @@ void CComplexSound::serial(NLMISC::IStream &s)
|
|||
s.serial(nb);
|
||||
for (uint i=0; i<nb; ++i)
|
||||
{
|
||||
std::string name = CStringMapper::unmap(_Sounds[i]);
|
||||
std::string name = _Sounds[i].toString();
|
||||
s.serial(name);
|
||||
}
|
||||
}
|
||||
|
@ -300,8 +301,8 @@ void CComplexSound::importForm(const std::string& filename, NLGEORGES::UFormElm&
|
|||
string soundname;
|
||||
if (psoundsArray->getArrayValue(soundname, i))
|
||||
{
|
||||
soundname = CFile::getFilenameWithoutExtension(soundname);
|
||||
_Sounds.push_back(CStringMapper::map(soundname));
|
||||
nlassert(soundname.find(".sound") != std::string::npos);
|
||||
_Sounds.push_back(NLMISC::CSheetId(soundname));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ namespace NLSOUND
|
|||
CComplexSource::CComplexSource (CComplexSound *soundPattern, bool spawn, TSpawnEndCallback cb, void *cbUserParam, NL3D::CCluster *cluster, CGroupController *groupController)
|
||||
: CSourceCommon(soundPattern, spawn, cb, cbUserParam, cluster, groupController),
|
||||
_Source1(NULL),
|
||||
_Source2(NULL)
|
||||
_Source2(NULL),
|
||||
_Muted(false)
|
||||
{
|
||||
nlassert(soundPattern->getSoundType() == CSound::SOUND_COMPLEX);
|
||||
_PatternSound = static_cast<CComplexSound*>(soundPattern);
|
||||
|
@ -190,9 +191,9 @@ void CComplexSource::playStuf()
|
|||
case CComplexSound::MODE_ALL_IN_ONE:
|
||||
{
|
||||
// just spanw all the listed source.
|
||||
const std::vector<NLMISC::TStringId> &sounds = _PatternSound->getSounds();
|
||||
const std::vector<NLMISC::CSheetId> &sounds = _PatternSound->getSounds();
|
||||
|
||||
std::vector<NLMISC::TStringId>::const_iterator first(sounds.begin()), last(sounds.end());
|
||||
std::vector<NLMISC::CSheetId>::const_iterator first(sounds.begin()), last(sounds.end());
|
||||
|
||||
if (_AllSources.empty())
|
||||
{
|
||||
|
@ -524,7 +525,7 @@ void CComplexSource::onUpdate()
|
|||
else
|
||||
{
|
||||
// no sound after, just set an event at end of current sound to stop the complex sound.
|
||||
nldebug("Setting last event for sound %s in %u millisec.", CStringMapper::unmap(_Source1->getSound()->getName()).c_str(), _Source1->getSound()->getDuration());
|
||||
nldebug("Setting last event for sound %s in %u millisec.", _Source1->getSound()->getName().toString().c_str()/*CStringMapper::unmap(_Source1->getSound()->getName()).c_str()*/, _Source1->getSound()->getDuration());
|
||||
if (_PatternSound->doFadeOut())
|
||||
{
|
||||
// set the event to begin fade out.
|
||||
|
|
|
@ -187,7 +187,7 @@ void CContextSound::init()
|
|||
}
|
||||
else
|
||||
{
|
||||
nlassertex(nbJoker < SoundContextNbArgs, ("Error will trying to play ContextSound '%s'", CStringMapper::unmap(_Name).c_str()));
|
||||
nlassertex(nbJoker < SoundContextNbArgs, ("Error will trying to play ContextSound '%s'", _Name.toString().c_str()/*CStringMapper::unmap(_Name).c_str()*/));
|
||||
fromString(index, contextArgIndex[nbJoker++]);
|
||||
parseArg = false;
|
||||
index = "";
|
||||
|
@ -195,13 +195,13 @@ void CContextSound::init()
|
|||
}
|
||||
else if (*first == 'r')
|
||||
{
|
||||
nlassertex(useRandom == false, ("Error will trying to play ContextSound '%s'", CStringMapper::unmap(_Name).c_str()));
|
||||
nlassertex(useRandom == false, ("Error will trying to play ContextSound '%s'", _Name.toString().c_str()/*CStringMapper::unmap(_Name).c_str()*/));
|
||||
useRandom = true;
|
||||
}
|
||||
}
|
||||
else if (*first == '%')
|
||||
{
|
||||
nlassertex(useRandom == false, ("Error will trying to play ContextSound '%s'", CStringMapper::unmap(_Name).c_str()));
|
||||
nlassertex(useRandom == false, ("Error will trying to play ContextSound '%s'", _Name.toString().c_str()/*CStringMapper::unmap(_Name).c_str()*/));
|
||||
parseArg = true;
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ void CContextSound::init()
|
|||
}
|
||||
else
|
||||
{
|
||||
nlassertex(nbJoker < SoundContextNbArgs, ("Error will trying to play ContextSound '%s'", CStringMapper::unmap(_Name).c_str()));
|
||||
nlassertex(nbJoker < SoundContextNbArgs, ("Error will trying to play ContextSound '%s'", _Name.toString().c_str()/*CStringMapper::unmap(_Name).c_str()*/));
|
||||
fromString(index, contextArgIndex[nbJoker++]);
|
||||
parseArg = false;
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ void CContextSound::init()
|
|||
LM_CASE_CONTAINER_CREATOR(9)
|
||||
LM_CASE_CONTAINER_CREATOR(10)
|
||||
default:
|
||||
nlwarning("Unsuported number of context argument in context sound '%s'!", CStringMapper::unmap(_Name).c_str());
|
||||
nlwarning("Unsuported number of context argument in context sound '%s'!", _Name.toString().c_str()/*CStringMapper::unmap(_Name).c_str()*/);
|
||||
return;
|
||||
}
|
||||
// cleanup macro
|
||||
|
@ -257,14 +257,14 @@ void CContextSound::init()
|
|||
|
||||
// ok, we have the container, now fill it with the sound
|
||||
{
|
||||
std::vector<NLMISC::TStringId> allSounds;
|
||||
std::vector<NLMISC::CSheetId> allSounds;
|
||||
// CSoundBank::getSoundNames(allSounds);
|
||||
CAudioMixerUser::instance()->getSoundNames(allSounds);
|
||||
|
||||
std::vector<NLMISC::TStringId>::iterator first(allSounds.begin()), last(allSounds.end());
|
||||
std::vector<NLMISC::CSheetId>::iterator first(allSounds.begin()), last(allSounds.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
const std::string &soundName = CStringMapper::unmap(*first);
|
||||
const std::string &soundName = first->toString()/*CStringMapper::unmap(*first)*/;
|
||||
if (soundName.size() > _BaseName.size())
|
||||
{
|
||||
uint i;
|
||||
|
|
|
@ -65,12 +65,68 @@ sint32 ISource::computeManualRollOff(sint32 volumeMB, sint32 mbMin, sint32 mbMax
|
|||
// common method used only with OptionManualRolloff. return the rolloff in amplitude ratio (gain)
|
||||
float ISource::computeManualRolloff(double alpha, float sqrdist, float distMin, float distMax)
|
||||
{
|
||||
static const sint32 mbMin = -10000;
|
||||
static const sint32 mbMax = 0;
|
||||
/*static const sint mbMin = -10000;
|
||||
static const sint mbMax = 0;
|
||||
sint32 rolloffMb = ISource::computeManualRollOff(mbMax, mbMin, mbMax, alpha, sqrdist, distMin, distMax);
|
||||
float rolloffGain = (float)pow(10.0, (double)rolloffMb / 2000.0);
|
||||
clamp(rolloffGain, 0.0f, 1.0f);
|
||||
return rolloffGain;
|
||||
return rolloffGain;*/
|
||||
|
||||
static const double mbMin = -10000;
|
||||
static const double mbMax = 0;
|
||||
|
||||
if (sqrdist < distMin * distMin)
|
||||
{
|
||||
// no attenuation
|
||||
return 1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (alpha < 0.0f)
|
||||
{
|
||||
double dist = (double)sqrt(sqrdist);
|
||||
// inverse distance rolloff
|
||||
float rolloff = distMin / dist;
|
||||
if (alpha <= -1.0f) return rolloff;
|
||||
|
||||
if (dist > distMax)
|
||||
{
|
||||
// full attenuation of mbrolloff
|
||||
return (-alpha * rolloff);
|
||||
}
|
||||
else
|
||||
{
|
||||
double mb = mbMin * (dist - distMin) / (distMax - distMin);
|
||||
float mbrolloff = (float)pow(10.0, (double)mb / 2000.0);
|
||||
return ((1.0 + alpha) * mbrolloff - alpha * rolloff);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sqrdist > distMax * distMax)
|
||||
{
|
||||
// full attenuation
|
||||
return 0.0f;
|
||||
}
|
||||
double dist = (double)sqrt(sqrdist);
|
||||
if (alpha == 0.0f)
|
||||
{
|
||||
// linearly descending volume on a dB scale
|
||||
double mb = mbMin * (dist - distMin) / (distMax - distMin);
|
||||
return (float)pow(10.0, (double)mb / 2000.0);
|
||||
}
|
||||
else // if (alpha > 0.0f)
|
||||
{
|
||||
// linear distance rolloff
|
||||
float rolloff = (distMax - dist) / (distMax - distMin);
|
||||
if (alpha >= 1.0f) return rolloff;
|
||||
|
||||
double mb = mbMin * (dist - distMin) / (distMax - distMin);
|
||||
float mbrolloff = (float)pow(10.0, (double)mb / 2000.0);
|
||||
return ((1.0 - alpha) * mbrolloff + alpha * rolloff);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // NLSOUND
|
||||
|
|
|
@ -43,7 +43,7 @@ using namespace std;
|
|||
|
||||
namespace NLSOUND {
|
||||
|
||||
CGroupControllerRoot::CGroupControllerRoot() : CGroupController(NULL)
|
||||
CGroupControllerRoot::CGroupControllerRoot() : CGroupController(NULL), NLMISC::CManualSingleton<CGroupControllerRoot>()
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -133,27 +133,18 @@ void CSound::serial(NLMISC::IStream &s)
|
|||
s.serial(_Direction);
|
||||
s.serial(_Looping);
|
||||
s.serial(_MaxDist);
|
||||
if (s.isReading())
|
||||
{
|
||||
std::string name;
|
||||
s.serial(name);
|
||||
_Name = CStringMapper::map(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string name = CStringMapper::unmap(_Name);
|
||||
s.serial(name);
|
||||
}
|
||||
|
||||
nlassert(CGroupControllerRoot::getInstance()); // not sure
|
||||
|
||||
_Name.serialString(s, "sound");
|
||||
|
||||
nlassert(CGroupControllerRoot::isInitialized()); // not sure
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
if (s.isReading()) _GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER));
|
||||
if (s.isReading()) _GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER);
|
||||
#else
|
||||
if (s.isReading())
|
||||
{
|
||||
std::string groupControllerPath;
|
||||
s.serial(groupControllerPath);
|
||||
_GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(groupControllerPath));
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(groupControllerPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -170,7 +161,8 @@ void CSound::serial(NLMISC::IStream &s)
|
|||
void CSound::importForm(const std::string& filename, NLGEORGES::UFormElm& root)
|
||||
{
|
||||
// Name
|
||||
_Name = CStringMapper::map(CFile::getFilenameWithoutExtension(filename));
|
||||
nlassert(filename.find(".sound") != std::string::npos);
|
||||
_Name = NLMISC::CSheetId(filename);
|
||||
|
||||
// InternalConeAngle
|
||||
uint32 inner;
|
||||
|
@ -253,7 +245,7 @@ void CSound::importForm(const std::string& filename, NLGEORGES::UFormElm& roo
|
|||
_Priority = MidPri;
|
||||
}
|
||||
|
||||
nlassert(CGroupControllerRoot::getInstance()); // not sure
|
||||
nlassert(CGroupControllerRoot::isInitialized()); // not sure
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER);
|
||||
#else
|
||||
|
|
|
@ -53,19 +53,19 @@ void CSoundAnimMarker::play(UAudioMixer* mixer, NL3D::CCluster *cluster, CSoundC
|
|||
|
||||
// ********************************************************
|
||||
|
||||
void CSoundAnimMarker::addSound(const NLMISC::TStringId& soundName)
|
||||
void CSoundAnimMarker::addSound(const NLMISC::CSheetId& soundName)
|
||||
{
|
||||
pair<TMarkerSoundSet::iterator, bool> inserted;
|
||||
inserted = _Sounds.insert(soundName);
|
||||
if (inserted.second == false)
|
||||
{
|
||||
nlwarning("Duplicate sound (%s)", CStringMapper::unmap(soundName).c_str());
|
||||
nlwarning("Duplicate sound (%s)",/* CStringMapper::unmap(soundName).c_str()*/soundName.toString().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// ********************************************************
|
||||
|
||||
void CSoundAnimMarker::removeSound(const NLMISC::TStringId &soundName)
|
||||
void CSoundAnimMarker::removeSound(const NLMISC::CSheetId &soundName)
|
||||
{
|
||||
TMarkerSoundSet::iterator iter = _Sounds.find(soundName);
|
||||
if (iter != _Sounds.end())
|
||||
|
@ -74,13 +74,13 @@ void CSoundAnimMarker::removeSound(const NLMISC::TStringId &soundName)
|
|||
}
|
||||
else
|
||||
{
|
||||
nlwarning("No sound was removed (%s)", CStringMapper::unmap(soundName).c_str());
|
||||
nlwarning("No sound was removed (%s)", soundName.toString().c_str()/*CStringMapper::unmap(soundName).c_str()*/);
|
||||
}
|
||||
}
|
||||
|
||||
// ********************************************************
|
||||
|
||||
void CSoundAnimMarker::getSounds(vector<NLMISC::TStringId> &sounds)
|
||||
void CSoundAnimMarker::getSounds(vector<NLMISC::CSheetId> &sounds)
|
||||
{
|
||||
sounds.insert(sounds.end(), _Sounds.begin(), _Sounds.end());
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ void CSoundAnimation::save()
|
|||
{
|
||||
// File stream
|
||||
COFile file;
|
||||
vector<NLMISC::TStringId> sounds;
|
||||
vector<NLMISC::CSheetId> sounds;
|
||||
|
||||
// Open the file
|
||||
if (!file.open(_Filename.c_str()))
|
||||
|
@ -108,11 +108,11 @@ void CSoundAnimation::save()
|
|||
|
||||
marker->getSounds(sounds);
|
||||
|
||||
vector<NLMISC::TStringId>::iterator iter2;
|
||||
vector<NLMISC::CSheetId>::iterator iter2;
|
||||
for (iter2 = sounds.begin(); iter2 != sounds.end(); iter2++)
|
||||
{
|
||||
xmlNodePtr soundNode = xmlNewChild ( markerNode, NULL, (const xmlChar*)"SOUND", NULL );
|
||||
xmlSetProp (soundNode, (const xmlChar*)"name", (const xmlChar*) CStringMapper::unmap(*iter2).c_str());
|
||||
xmlSetProp (soundNode, (const xmlChar*)"name", (const xmlChar*)iter2->toString().c_str() /*CStringMapper::unmap(*iter2).c_str()*/);
|
||||
}
|
||||
|
||||
sounds.clear();
|
||||
|
@ -190,7 +190,7 @@ void CSoundAnimation::load()
|
|||
throw NLMISC::Exception("Invalid sound animation marker");
|
||||
}
|
||||
|
||||
marker->addSound(CStringMapper::map(string(name)));
|
||||
marker->addSound(NLMISC::CSheetId(string(name), "sound"));
|
||||
|
||||
xmlFree ((void*)name);
|
||||
|
||||
|
|
|
@ -123,14 +123,16 @@ CSoundBank::~CSoundBank()
|
|||
|
||||
void CSoundBank::addSound(CSound *sound)
|
||||
{
|
||||
std::pair<TSoundTable::iterator, bool> ret;
|
||||
ret = _Sounds.insert(make_pair(sound->getName(), sound));
|
||||
nlassert(ret.second);
|
||||
// nlassert(_Sounds.size() > sound->getName().getShortId());
|
||||
// nldebug("SOUNDBANK: Add %s", sound->getName().toString().c_str());
|
||||
if (_Sounds.size() <= sound->getName().getShortId())
|
||||
_Sounds.resize(sound->getName().getShortId() + 1);
|
||||
_Sounds[sound->getName().getShortId()] = sound;
|
||||
}
|
||||
|
||||
void CSoundBank::removeSound(const NLMISC::TStringId &name)
|
||||
void CSoundBank::removeSound(const NLMISC::CSheetId &sheetId)
|
||||
{
|
||||
_Sounds.erase(name);
|
||||
_Sounds[sheetId.getShortId()] = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -258,35 +260,59 @@ public:
|
|||
void CSoundBank::load(const std::string &packedSheetDir, bool packedSheetUpdate)
|
||||
{
|
||||
// this structure is fill by the loadForm() function and will contain all you need
|
||||
std::map<std::string, CSoundSerializer> Container;
|
||||
std::map<std::string, CSoundSerializer> container; // load the old way for compatibility
|
||||
nlassert(!_Loaded);
|
||||
// Just call the GEORGE::loadFrom method to read all available sounds
|
||||
::loadForm("sound", packedSheetDir + "sounds.packed_sheets", Container, packedSheetUpdate, false);
|
||||
::loadForm("sound", packedSheetDir + "sounds.packed_sheets", container, packedSheetUpdate, false);
|
||||
_Loaded = true;
|
||||
|
||||
// add all the loaded sound in the sound banks
|
||||
std::map<std::string, CSoundSerializer>::iterator first(Container.begin()), last(Container.end());
|
||||
for (; first != last; ++first)
|
||||
// get the largest sheet id needed and init the sound bank
|
||||
uint32 maxShortId = 0;
|
||||
{
|
||||
if (first->second.Sound != 0)
|
||||
addSound(first->second.Sound);
|
||||
std::map<std::string, CSoundSerializer>::iterator first(container.begin()), last(container.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
if (first->second.Sound != 0)
|
||||
if (first->second.Sound->getName().getShortId() > maxShortId)
|
||||
maxShortId = first->second.Sound->getName().getShortId();
|
||||
}
|
||||
++maxShortId; // inc for size = last idx + 1
|
||||
if (container.size() == 0)
|
||||
{
|
||||
nlwarning("NLSOUND: No sound sheets have been loaded, missing sound sheet directory or packed sound sheets file");
|
||||
}
|
||||
else
|
||||
{
|
||||
nlassert(maxShortId < (container.size() * 8)); // ensure no ridiculous sheet id values
|
||||
if (maxShortId > _Sounds.size())
|
||||
_Sounds.resize(maxShortId);
|
||||
}
|
||||
}
|
||||
|
||||
Container.clear();
|
||||
// add all the loaded sound in the sound banks
|
||||
{
|
||||
std::map<std::string, CSoundSerializer>::iterator first(container.begin()), last(container.end());
|
||||
for (; first != last; ++first)
|
||||
{
|
||||
if (first->second.Sound != 0)
|
||||
addSound(first->second.Sound);
|
||||
}
|
||||
}
|
||||
|
||||
container.clear();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Unload all the sound samples in this bank.
|
||||
*/
|
||||
void CSoundBank::unload()
|
||||
void CSoundBank::unload()
|
||||
{
|
||||
nlassert(_Loaded);
|
||||
|
||||
TSoundTable::iterator first(_Sounds.begin()), last(_Sounds.end());
|
||||
for (; first != last; ++first)
|
||||
for (TSoundTable::size_type i = 0; i < _Sounds.size(); ++i)
|
||||
{
|
||||
delete first->second;
|
||||
delete _Sounds[i];
|
||||
}
|
||||
|
||||
_Sounds.clear();
|
||||
|
@ -320,7 +346,7 @@ void CSoundBank::unload()
|
|||
/*
|
||||
* Returns true if the samples in this bank have been loaded.
|
||||
*/
|
||||
bool CSoundBank::isLoaded()
|
||||
bool CSoundBank::isLoaded()
|
||||
{
|
||||
return _Loaded;
|
||||
}
|
||||
|
@ -328,37 +354,38 @@ bool CSoundBank::isLoaded()
|
|||
/*
|
||||
* Return a sound sample corresponding to a name.
|
||||
*/
|
||||
CSound* CSoundBank::getSound(const NLMISC::TStringId &name)
|
||||
CSound* CSoundBank::getSound(const NLMISC::CSheetId &sheetId)
|
||||
{
|
||||
// Find sound
|
||||
TSoundTable::iterator iter = _Sounds.find(name);
|
||||
if ( iter == _Sounds.end() )
|
||||
if (sheetId == NLMISC::CSheetId::Unknown)
|
||||
return NULL;
|
||||
|
||||
// nlassert(sheetId.getShortId() < _Sounds.size());
|
||||
if (sheetId.getShortId() >= _Sounds.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (*iter).second;
|
||||
std::string sheetName = sheetId.toString();
|
||||
nlwarning("NLSOUND: Sound sheet id '%s' exceeds loaded sound sheets", sheetName.c_str());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return _Sounds[sheetId.getShortId()];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the names of the sounds
|
||||
*/
|
||||
void CSoundBank::getNames( std::vector<NLMISC::TStringId> &names )
|
||||
void CSoundBank::getNames( std::vector<NLMISC::CSheetId> &sheetIds )
|
||||
{
|
||||
TSoundTable::const_iterator iter;
|
||||
for (iter = _Sounds.begin(); iter != _Sounds.end(); ++iter)
|
||||
for (TSoundTable::size_type i = 0; i < _Sounds.size(); ++i)
|
||||
{
|
||||
names.push_back((*iter).first);
|
||||
//nlwarning("getting sound %s", (*iter).first);
|
||||
if (_Sounds[i])
|
||||
sheetIds.push_back(_Sounds[i]->getName());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the number of buffers in this bank.
|
||||
*/
|
||||
uint CSoundBank::countSounds()
|
||||
uint CSoundBank::countSounds()
|
||||
{
|
||||
return (uint)_Sounds.size();
|
||||
}
|
||||
|
|
|
@ -73,11 +73,13 @@ void CStreamFileSound::serial(NLMISC::IStream &s)
|
|||
|
||||
void CStreamFileSound::setMusicFilePath(const std::string &filePath, bool async, bool loop)
|
||||
{
|
||||
#if !FINAL_VERSION
|
||||
_Name = NLMISC::CStringMapper::map(std::string("<MusicChannel:") + NLMISC::CFile::getFilenameWithoutExtension(filePath) + ">");
|
||||
/*#if !FINAL_VERSION
|
||||
//_Name = NLMISC::CStringMapper::map(std::string("<MusicChannel:") + NLMISC::CFile::getFilenameWithoutExtension(filePath) + ">");
|
||||
_Name = NLMISC::CSheetId(std::string("<MusicChannel:") + NLMISC::CFile::getFilenameWithoutExtension(filePath) + ">");
|
||||
#else
|
||||
_Name = NLMISC::CStringMapper::map("<MusicChannel>");
|
||||
#endif
|
||||
//_Name = NLMISC::CStringMapper::map("<MusicChannel>");
|
||||
#endif*/
|
||||
_Name = NLMISC::CSheetId("music_channel.sound");
|
||||
_ConeInnerAngle = NLMISC::Pi * 2;
|
||||
_ConeOuterAngle = NLMISC::Pi * 2;
|
||||
_Looping = loop;
|
||||
|
|
|
@ -159,7 +159,7 @@ END_MESSAGE_MAP()
|
|||
void CEditPSSound::OnBrowseSound()
|
||||
{
|
||||
// CPickSound::TNameVect names;
|
||||
vector<NLMISC::TStringId> names;
|
||||
vector<NLMISC::CSheetId> names;
|
||||
|
||||
|
||||
NLSOUND::UAudioMixer *audioMixer = CSoundSystem::getAudioMixer();
|
||||
|
@ -172,7 +172,7 @@ void CEditPSSound::OnBrowseSound()
|
|||
|
||||
if (ps.DoModal() == IDOK)
|
||||
{
|
||||
m_SoundName = NLMISC::CStringMapper::unmap(ps.getName()).c_str();
|
||||
m_SoundName = ps.getName().toString().c_str();
|
||||
_Sound->setSoundName(ps.getName());
|
||||
updateModifiedFlag();
|
||||
UpdateData(FALSE);
|
||||
|
@ -184,7 +184,7 @@ BOOL CEditPSSound::OnInitDialog()
|
|||
CDialog::OnInitDialog();
|
||||
|
||||
nlassert(_Sound);
|
||||
m_SoundName = NLMISC::CStringMapper::unmap(_Sound->getSoundName()).c_str();
|
||||
m_SoundName = _Sound->getSoundName().toString().c_str();
|
||||
|
||||
UpdateData(FALSE);
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
|
@ -195,7 +195,7 @@ void CEditPSSound::OnChangeSoundName()
|
|||
{
|
||||
nlassert(_Sound);
|
||||
UpdateData();
|
||||
_Sound->setSoundName( NLMISC::CStringMapper::map((LPCTSTR) m_SoundName) );
|
||||
_Sound->setSoundName(NLMISC::CSheetId((LPCTSTR)m_SoundName, "sound"));
|
||||
updateModifiedFlag();
|
||||
}
|
||||
|
||||
|
@ -209,7 +209,7 @@ void CEditPSSound::OnSpawn()
|
|||
// play the currently selected sound
|
||||
void CEditPSSound::OnPlaySound()
|
||||
{
|
||||
CSoundSystem::play(std::string((LPCTSTR) m_SoundName));
|
||||
CSoundSystem::play(std::string((LPCTSTR)m_SoundName));
|
||||
}
|
||||
|
||||
void CEditPSSound::OnMute()
|
||||
|
|
|
@ -74,7 +74,7 @@ BOOL CPickSound::OnInitDialog()
|
|||
|
||||
for (TNameVect::iterator it = _Names.begin(); it != _Names.end(); ++it)
|
||||
{
|
||||
m_NameList.AddString(NLMISC::CStringMapper::unmap(*it).c_str());
|
||||
m_NameList.AddString((*it).toString().c_str());
|
||||
}
|
||||
|
||||
_Timer = SetTimer (1, 100, NULL);
|
||||
|
@ -111,7 +111,7 @@ void CPickSound::OnSelchange()
|
|||
nlassert(m_NameList.GetTextLen(m_NameList.GetCurSel()) < 1024);
|
||||
|
||||
m_NameList.GetText(m_NameList.GetCurSel(), str);
|
||||
_CurrName = NLMISC::CStringMapper::map(str);
|
||||
_CurrName = NLMISC::CSheetId(str, "sound");
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#endif // _MSC_VER > 1000
|
||||
// pick_sound.h : header file
|
||||
//
|
||||
#include "nel/misc/string_mapper.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
|
@ -40,11 +40,11 @@ class CPickSound : public CDialog
|
|||
{
|
||||
// Construction
|
||||
public:
|
||||
typedef std::vector<NLMISC::TStringId> TNameVect;
|
||||
typedef std::vector<NLMISC::CSheetId> TNameVect;
|
||||
CPickSound(const TNameVect &names, CWnd* pParent = NULL); // standard constructor
|
||||
|
||||
|
||||
const NLMISC::TStringId &getName(void) const { return _CurrName; }
|
||||
const NLMISC::CSheetId &getName(void) const { return _CurrName; }
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(CPickSound)
|
||||
|
@ -63,7 +63,7 @@ public:
|
|||
// Implementation
|
||||
protected:
|
||||
TNameVect _Names;
|
||||
NLMISC::TStringId _CurrName;
|
||||
NLMISC::CSheetId _CurrName;
|
||||
|
||||
UINT_PTR _Timer;
|
||||
|
||||
|
|
|
@ -126,18 +126,18 @@ void CSoundAnimDlg::updateSounds()
|
|||
{
|
||||
if (_SelectedMarker != 0)
|
||||
{
|
||||
vector<NLMISC::TStringId> sounds;
|
||||
vector<NLMISC::CSheetId> sounds;
|
||||
|
||||
_SelectedMarker->getSounds(sounds);
|
||||
|
||||
CListBox* list = (CListBox*) GetDlgItem(IDC_SOUND_ANIM_LIST);
|
||||
list->ResetContent();
|
||||
|
||||
vector<NLMISC::TStringId>::iterator iter;
|
||||
vector<NLMISC::CSheetId>::iterator iter;
|
||||
|
||||
for (iter = sounds.begin(); iter != sounds.end(); iter++)
|
||||
{
|
||||
list->AddString(CStringMapper::unmap(*iter).c_str());
|
||||
list->AddString((*iter).toString().c_str());
|
||||
}
|
||||
|
||||
list->UpdateData();
|
||||
|
@ -151,7 +151,7 @@ void CSoundAnimDlg::OnAddSound()
|
|||
if (_SelectedMarker != 0)
|
||||
{
|
||||
// CPickSound::TNameVect names;
|
||||
vector<NLMISC::TStringId> names;
|
||||
vector<NLMISC::CSheetId> names;
|
||||
|
||||
|
||||
NLSOUND::UAudioMixer *audioMixer = CSoundSystem::getAudioMixer();
|
||||
|
@ -183,7 +183,7 @@ void CSoundAnimDlg::OnRemoveSound()
|
|||
if (list->GetText(list->GetCurSel(), s) != LB_ERR)
|
||||
{
|
||||
string name(s);
|
||||
_SelectedMarker->removeSound(CStringMapper::map(name));
|
||||
_SelectedMarker->removeSound(NLMISC::CSheetId(name, "sound"));
|
||||
updateSounds();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ void CSoundSystem::play(const string &soundName)
|
|||
{
|
||||
if (_AudioMixer)
|
||||
{
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(CStringMapper::map(soundName), true);
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CSheetId(soundName, "sound"), true);
|
||||
if (src)
|
||||
{
|
||||
src->setLooping(false);
|
||||
|
@ -187,7 +187,7 @@ USource *CSoundSystem::create(const std::string &soundName)
|
|||
{
|
||||
if (_AudioMixer)
|
||||
{
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(CStringMapper::map(soundName), false);
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CSheetId(soundName, "sound"), false);
|
||||
if (src)
|
||||
{
|
||||
src->setLooping(false);
|
||||
|
|
|
@ -86,7 +86,7 @@ void CSoundPage::setEditedItem(CWorkspaceNode *ownerNode, NL3D::CPSLocatedBindab
|
|||
_ui.pitchWidget->setWorkspaceNode(_Node);
|
||||
_ui.pitchWidget->updateUi();
|
||||
|
||||
_ui.soundNameLineEdit->setText(QString(NLMISC::CStringMapper::unmap(_Sound->getSoundName()).c_str()));
|
||||
_ui.soundNameLineEdit->setText(QString(_Sound->getSoundName().toString().c_str()));
|
||||
|
||||
_ui.spawnCheckBox->setChecked(_Sound->getSpawn());
|
||||
_ui.muteCheckBox->setChecked(_Sound->getMute());
|
||||
|
@ -95,7 +95,7 @@ void CSoundPage::setEditedItem(CWorkspaceNode *ownerNode, NL3D::CPSLocatedBindab
|
|||
|
||||
void CSoundPage::browse()
|
||||
{
|
||||
std::vector<NLMISC::TStringId> names;
|
||||
std::vector<NLMISC::CSheetId> names;
|
||||
|
||||
|
||||
NLSOUND::UAudioMixer *audioMixer = Modules::sound().getAudioMixer();
|
||||
|
@ -108,7 +108,7 @@ void CSoundPage::browse()
|
|||
QStringList items;
|
||||
items << tr("");
|
||||
for(size_t i = 0; i < names.size(); ++i)
|
||||
items << QString(names[i]->c_str());
|
||||
items << QString(names[i].toString().c_str());
|
||||
|
||||
bool ok;
|
||||
QString item = QInputDialog::getItem(this, tr("Select your sound"),
|
||||
|
@ -162,7 +162,7 @@ void CSoundPage::setKeepPitch(bool state)
|
|||
|
||||
void CSoundPage::setSoundName(const QString &text)
|
||||
{
|
||||
_Sound->setSoundName(NLMISC::CStringMapper::map(text.toStdString()));
|
||||
_Sound->setSoundName(NLMISC::CSheetId(text.toStdString()));
|
||||
}
|
||||
|
||||
void CSoundPage::setEmissionPercent(float value)
|
||||
|
@ -171,4 +171,4 @@ void CSoundPage::setEmissionPercent(float value)
|
|||
updateModifiedFlag();
|
||||
}
|
||||
|
||||
} /* namespace NLQT */
|
||||
} /* namespace NLQT */
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include <nel/sound/sound_animation.h>
|
||||
#include <nel/3d/u_particle_system_sound.h>
|
||||
#include <nel/misc/path.h>
|
||||
#include <nel/misc/sheet_id.h>
|
||||
|
||||
|
||||
// Qt includes
|
||||
#include <QtCore/QSettings>
|
||||
|
@ -67,6 +69,9 @@ void CSoundSystem::init()
|
|||
{
|
||||
//H_AUTO2
|
||||
nldebug("CSoundSystem::init");
|
||||
|
||||
// require sheet id without sheet id bin
|
||||
NLMISC::CSheetId::initWithoutSheet();
|
||||
|
||||
// create audiomixer
|
||||
_AudioMixer = NULL;
|
||||
|
@ -153,9 +158,10 @@ void CSoundSystem::play(const std::string &soundName)
|
|||
{
|
||||
if (_AudioMixer)
|
||||
{
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CStringMapper::map(soundName), true);
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CSheetId(soundName, "sound"), true);
|
||||
if (src)
|
||||
{
|
||||
// FIXME: Use relative positioning, and set pos to 0,0,0
|
||||
src->setLooping(false);
|
||||
const NLMISC::CVector &pos = _AudioMixer->getListener()->getPos();
|
||||
src->setPos(pos);
|
||||
|
@ -172,9 +178,10 @@ NLSOUND::USource *CSoundSystem::create(const std::string &soundName)
|
|||
{
|
||||
if (_AudioMixer)
|
||||
{
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CStringMapper::map(soundName), false);
|
||||
NLSOUND::USource *src = _AudioMixer->createSource(NLMISC::CSheetId(soundName, "sound"), false);
|
||||
if (src)
|
||||
{
|
||||
// FIXME: Use relative positioning, and set pos to 0,0,0
|
||||
src->setLooping(false);
|
||||
const NLMISC::CVector &pos = _AudioMixer->getListener()->getPos();
|
||||
src->setPos(pos);
|
||||
|
@ -236,4 +243,4 @@ void CSoundSystem::releaseGraphics()
|
|||
NL3D::UParticleSystemSound::setPSSound(NULL);
|
||||
}
|
||||
|
||||
} /* namespace NLQT */
|
||||
} /* namespace NLQT */
|
||||
|
|
|
@ -18,3 +18,5 @@ IF(WIN32)
|
|||
ADD_SUBDIRECTORY(words_dic)
|
||||
ENDIF(MFC_FOUND)
|
||||
ENDIF(WIN32)
|
||||
|
||||
ADD_SUBDIRECTORY(probe_timers)
|
||||
|
|
|
@ -336,16 +336,27 @@ void addId( string fileName )
|
|||
if( firstFreeFileTypeId == -1 )
|
||||
{
|
||||
nlwarning("MORE THAN 256 FILE TYPES!!!!");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
FileTypeToId.insert( make_pair(fileType,(uint8)firstFreeFileTypeId) );
|
||||
IdToFileType.insert( make_pair((uint8)firstFreeFileTypeId,fileType) );
|
||||
TypeToLastId.insert( make_pair((uint8)firstFreeFileTypeId,0) );
|
||||
|
||||
// Reserve id 0 for unknown.newtype.
|
||||
// User may supply a sheet called unknown.newtype
|
||||
// that can safely be used as a fallback when a
|
||||
// requested sheet does not exist.
|
||||
// Only for newly added sheet types.
|
||||
fid.FormIDInfos.Type = (uint8)firstFreeFileTypeId;
|
||||
fid.FormIDInfos.Id = 0;
|
||||
|
||||
std::string unknownNewType = std::string("unknown." + fileType);
|
||||
FormToId.insert(make_pair(unknownNewType, fid));
|
||||
IdToForm.insert(make_pair(fid, unknownNewType));
|
||||
|
||||
TypeToLastId.insert( make_pair((uint8)firstFreeFileTypeId,1) );
|
||||
fid.FormIDInfos.Id = 1;
|
||||
|
||||
nlinfo("Adding file type '%s' with id %d", fileType.c_str(), firstFreeFileTypeId);
|
||||
NbTypesAdded++;
|
||||
}
|
||||
|
|
9
code/nel/tools/misc/probe_timers/CMakeLists.txt
Normal file
9
code/nel/tools/misc/probe_timers/CMakeLists.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
FILE(GLOB SRC *.cpp)
|
||||
|
||||
ADD_EXECUTABLE(nl_probe_timers ${SRC})
|
||||
|
||||
TARGET_LINK_LIBRARIES(nl_probe_timers nelmisc)
|
||||
NL_DEFAULT_PROPS(nl_probe_timers "NeL, Tools, Misc: Probe Timers")
|
||||
NL_ADD_RUNTIME_FLAGS(nl_probe_timers)
|
||||
|
||||
INSTALL(TARGETS nl_probe_timers RUNTIME DESTINATION bin COMPONENT toolsmisc)
|
38
code/nel/tools/misc/probe_timers/main.cpp
Normal file
38
code/nel/tools/misc/probe_timers/main.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2012 by authors
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/time_nl.h"
|
||||
|
||||
using namespace NLMISC;
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
for (uint i = 0; i < 8; ++i)
|
||||
{
|
||||
CTime::CTimerInfo timerInfo;
|
||||
CTime::probeTimerInfo(timerInfo);
|
||||
}
|
||||
|
||||
printf ("\nPress <return> to exit\n");
|
||||
getchar ();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
|
@ -29,6 +29,7 @@
|
|||
#include <nel/misc/log.h>
|
||||
#include <nel/misc/path.h>
|
||||
#include <nel/sound/u_audio_mixer.h>
|
||||
#include <nel/misc/sheet_id.h>
|
||||
|
||||
// Project includes
|
||||
// ...
|
||||
|
@ -75,6 +76,9 @@ int main(int nNbArg, char **ppArgs)
|
|||
// add search paths
|
||||
CPath::addSearchPath(leveldesignDir, true, false);
|
||||
CPath::addSearchPath(dfnDir, true, false);
|
||||
|
||||
// init sheet_id.bin
|
||||
NLMISC::CSheetId::initWithoutSheet();
|
||||
|
||||
// build the sound bank
|
||||
UAudioMixer::buildSoundBank(exportDir);
|
||||
|
|
|
@ -5055,14 +5055,14 @@ NLMISC_COMMAND(reloadFogMaps, "Force to reload all the fog maps", "<>")
|
|||
NLMISC_COMMAND(dumpSounds, "Dump names of all loaded sound", "<>")
|
||||
{
|
||||
if (!args.empty()) return false;
|
||||
std::vector<NLMISC::TStringId> sounds;
|
||||
std::vector<NLMISC::CSheetId> sounds;
|
||||
extern CSoundManager *SoundMngr;
|
||||
if (!SoundMngr) return false;
|
||||
if (!SoundMngr->getMixer()) return false;
|
||||
SoundMngr->getMixer()->getSoundNames(sounds);
|
||||
for(uint k = 0; k < sounds.size(); ++k)
|
||||
{
|
||||
nlinfo(NLMISC::CStringMapper::unmap(sounds[k]).c_str());
|
||||
nlinfo(sounds[k].toString()/*NLMISC::CStringMapper::unmap(sounds[k])*/.c_str());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2006,7 +2006,7 @@ public:
|
|||
virtual void execute (CCtrlBase * /* pCaller */, const string &Params)
|
||||
{
|
||||
string sName = getParam(Params, "name");
|
||||
TStringId id = CStringMapper::map(sName);
|
||||
CSheetId id = CSheetId(sName, "sound");
|
||||
if (SoundMngr != NULL)
|
||||
SoundMngr->spawnSource(id,CVector(0,0,0));
|
||||
}
|
||||
|
|
|
@ -686,8 +686,11 @@ void prelogInit()
|
|||
#ifdef NL_OS_WINDOWS
|
||||
_control87 (_EM_INVALID|_EM_DENORMAL/*|_EM_ZERODIVIDE|_EM_OVERFLOW*/|_EM_UNDERFLOW|_EM_INEXACT, _MCW_EM);
|
||||
#endif // NL_OS_WINDOWS
|
||||
|
||||
setCPUMask();
|
||||
|
||||
CTime::CTimerInfo timerInfo;
|
||||
NLMISC::CTime::probeTimerInfo(timerInfo);
|
||||
if (timerInfo.RequiresSingleCore) // TODO: Also have a FV configuration value to force single core.
|
||||
setCPUMask();
|
||||
|
||||
FPU_CHECKER_ONCE
|
||||
|
||||
|
@ -1265,6 +1268,19 @@ void postlogInit()
|
|||
// set the primitive context
|
||||
CPrimitiveContext::instance().CurrentLigoConfig = &LigoConfig;
|
||||
|
||||
{
|
||||
H_AUTO(InitRZShIdI)
|
||||
|
||||
nmsg = "Initializing sheets...";
|
||||
ProgressBar.newMessage ( ClientCfg.buildLoadingString(nmsg) );
|
||||
|
||||
// Initialize Sheet IDs.
|
||||
CSheetId::init (ClientCfg.UpdatePackedSheet);
|
||||
|
||||
initLast = initCurrent;
|
||||
initCurrent = ryzomGetLocalTime();
|
||||
}
|
||||
|
||||
{
|
||||
H_AUTO(InitRZSound)
|
||||
|
||||
|
@ -1275,12 +1291,13 @@ void postlogInit()
|
|||
{
|
||||
// tmp fix : it seems that, at this point, if the bg downloader window has focus and
|
||||
// not the Ryzom one, then sound init fails
|
||||
#ifdef NL_OS_WINDOWS
|
||||
/*#ifdef NL_OS_WINDOWS
|
||||
HWND hWnd = Driver->getDisplay ();
|
||||
nlassert (hWnd);
|
||||
ShowWindow(hWnd, SW_RESTORE);
|
||||
SetForegroundWindow(hWnd);
|
||||
#endif
|
||||
#endif*/
|
||||
// bg downloader not used anymore anyways
|
||||
SoundMngr = new CSoundManager(&ProgressBar);
|
||||
try
|
||||
{
|
||||
|
@ -1323,13 +1340,7 @@ void postlogInit()
|
|||
}
|
||||
|
||||
{
|
||||
H_AUTO(InitRZShIdI)
|
||||
|
||||
nmsg = "Initializing sheets...";
|
||||
ProgressBar.newMessage ( ClientCfg.buildLoadingString(nmsg) );
|
||||
|
||||
// Initialize Sheet IDs.
|
||||
CSheetId::init (ClientCfg.UpdatePackedSheet);
|
||||
H_AUTO(InitRZSheetL)
|
||||
|
||||
// load packed sheets
|
||||
nmsg = "Loading sheets...";
|
||||
|
|
|
@ -223,7 +223,7 @@ bool CGroupHTML::addBnpDownload(const string &url, const string &action, const s
|
|||
#ifdef LOG_DL
|
||||
nlwarning("add to download '%s' dest '%s'", url.c_str(), dest.c_str());
|
||||
#endif
|
||||
|
||||
|
||||
// erase the tmp file if exists
|
||||
if (NLMISC::CFile::fileExists(tmpdest))
|
||||
NLMISC::CFile::deleteFile(tmpdest);
|
||||
|
@ -622,7 +622,7 @@ void CGroupHTML::addLink (uint element_number, uint /* attribute_number */, HTCh
|
|||
_LinkTitle.push_back("");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -948,7 +948,7 @@ void CGroupHTML::beginElement (uint element_number, const BOOL *present, const c
|
|||
|
||||
typedef pair<string, string> TTmplParam;
|
||||
vector<TTmplParam> tmplParams;
|
||||
|
||||
|
||||
string templateName;
|
||||
if (!style.empty())
|
||||
{
|
||||
|
@ -1044,12 +1044,12 @@ void CGroupHTML::beginElement (uint element_number, const BOOL *present, const c
|
|||
CRGBA bgColor = getColor (value[HTML_BODY_BGCOLOR]);
|
||||
setBackgroundColor (bgColor);
|
||||
}
|
||||
|
||||
|
||||
string style;
|
||||
if (present[HTML_BODY_STYLE] && value[HTML_BODY_STYLE])
|
||||
style = value[HTML_BODY_STYLE];
|
||||
|
||||
|
||||
|
||||
|
||||
if (!style.empty())
|
||||
{
|
||||
TStyle styles = parseStyle(style);
|
||||
|
@ -1057,7 +1057,7 @@ void CGroupHTML::beginElement (uint element_number, const BOOL *present, const c
|
|||
|
||||
it = styles.find("background-repeat");
|
||||
bool repeat = (it != styles.end() && it->second == "1");
|
||||
|
||||
|
||||
// Webig only
|
||||
it = styles.find("background-scale");
|
||||
bool scale = (it != styles.end() && it->second == "1");
|
||||
|
@ -1187,7 +1187,7 @@ void CGroupHTML::beginElement (uint element_number, const BOOL *present, const c
|
|||
if (it != styles.end() && (*it).second == "1")
|
||||
reloadImg = true;
|
||||
}
|
||||
|
||||
|
||||
addImage (value[MY_HTML_IMG_SRC], globalColor, reloadImg);
|
||||
}
|
||||
}
|
||||
|
@ -1838,6 +1838,7 @@ CGroupHTML::CGroupHTML(const TCtorParam ¶m)
|
|||
_GroupHtmlByUID[_GroupHtmlUID]= this;
|
||||
|
||||
// init
|
||||
_TrustedDomain = false;
|
||||
_ParsingLua = false;
|
||||
_IgnoreText = false;
|
||||
_BrowseNextTime = false;
|
||||
|
@ -2469,7 +2470,7 @@ void CGroupHTML::addString(const ucstring &str)
|
|||
getParagraph()->addChild (buttonGroup);
|
||||
paragraphChange ();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3706,14 +3707,14 @@ int CGroupHTML::luaRemoveContent(CLuaState &ls)
|
|||
}
|
||||
|
||||
// ***************************************************************************
|
||||
int CGroupHTML::luaInsertText(CLuaState &ls)
|
||||
int CGroupHTML::luaInsertText(CLuaState &ls)
|
||||
{
|
||||
const char *funcName = "insertText";
|
||||
CLuaIHM::checkArgCount(ls, funcName, 3);
|
||||
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
||||
CLuaIHM::checkArgType(ls, funcName, 2, LUA_TSTRING);
|
||||
CLuaIHM::checkArgType(ls, funcName, 3, LUA_TBOOLEAN);
|
||||
|
||||
|
||||
string name = ls.toString(1);
|
||||
|
||||
ucstring text;
|
||||
|
|
|
@ -624,7 +624,7 @@ void CSoundManager::init(IProgressCallback *progressCallBack)
|
|||
// add a new source to the world, attached to the specified entity
|
||||
// return 0 if creation failed, sound id if creation was successful
|
||||
//-----------------------------------------------
|
||||
CSoundManager::TSourceId CSoundManager::addSource( const NLMISC::TStringId &soundName, const NLMISC::CVector &position, bool play, bool loop, const CEntityId &id)
|
||||
CSoundManager::TSourceId CSoundManager::addSource( const NLMISC::CSheetId &soundName, const NLMISC::CVector &position, bool play, bool loop, const CEntityId &id)
|
||||
{
|
||||
uint32 retValue = 0;
|
||||
|
||||
|
@ -634,7 +634,7 @@ CSoundManager::TSourceId CSoundManager::addSource( const NLMISC::TStringId &soun
|
|||
// If the source is valid.
|
||||
if(pSource == 0)
|
||||
{
|
||||
nlwarning("Sound '%s' not found !", CStringMapper::unmap(soundName).c_str());
|
||||
nlwarning("Sound '%s' not found !", /*CStringMapper::unmap(soundName).c_str()*/soundName.toString().c_str());
|
||||
return retValue;
|
||||
}
|
||||
|
||||
|
@ -672,7 +672,7 @@ CSoundManager::TSourceId CSoundManager::addSource( const NLMISC::TStringId &soun
|
|||
// spawn a new source to the world
|
||||
// return false if creation failed, true if creation was successful
|
||||
//-----------------------------------------------
|
||||
bool CSoundManager::spawnSource(const NLMISC::TStringId &soundName, CSoundContext &context)
|
||||
bool CSoundManager::spawnSource(const NLMISC::CSheetId &soundName, CSoundContext &context)
|
||||
{
|
||||
if (!_PlaySound) return false;
|
||||
|
||||
|
@ -683,7 +683,7 @@ bool CSoundManager::spawnSource(const NLMISC::TStringId &soundName, CSoundContex
|
|||
// If the source is valid.
|
||||
if(pSource == 0)
|
||||
{
|
||||
nlwarning("Sound '%s' not found !", soundName);
|
||||
nlwarning("Sound '%s' not found !", soundName.toString().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -702,7 +702,7 @@ bool CSoundManager::spawnSource(const NLMISC::TStringId &soundName, CSoundContex
|
|||
// spawn a new source to the world
|
||||
// return false if creation failed, true if creation was successful
|
||||
//-----------------------------------------------
|
||||
bool CSoundManager::spawnSource(const NLMISC::TStringId &soundName, const NLMISC::CVector &position)
|
||||
bool CSoundManager::spawnSource(const NLMISC::CSheetId &soundName, const NLMISC::CVector &position)
|
||||
{
|
||||
if (!_PlaySound) return false;
|
||||
|
||||
|
@ -712,7 +712,7 @@ bool CSoundManager::spawnSource(const NLMISC::TStringId &soundName, const NLMISC
|
|||
// If the source is valid.
|
||||
if(pSource == 0)
|
||||
{
|
||||
nlwarning("Sound '%s' not found !", CStringMapper::unmap(soundName).c_str ());
|
||||
nlwarning("Sound '%s' not found !", /*CStringMapper::unmap(soundName).c_str ()*/soundName.toString().c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
// sound
|
||||
#include "nel/sound/u_audio_mixer.h"
|
||||
#include "nel/sound/u_listener.h"
|
||||
#include "nel/misc/sheet_id.h"
|
||||
|
||||
extern class CSoundManager *SoundMngr;
|
||||
|
||||
|
@ -88,13 +89,13 @@ public:
|
|||
/// Return the audio mixer instance pointer.
|
||||
NLSOUND::UAudioMixer *getMixer();
|
||||
|
||||
TSourceId addSource( const NLMISC::TStringId &soundName, const NLMISC::CVector &position, bool play = true , bool loop = false, const NLMISC::CEntityId &id = NLMISC::CEntityId::Unknown );
|
||||
TSourceId addSource( const NLMISC::CSheetId &soundName, const NLMISC::CVector &position, bool play = true , bool loop = false, const NLMISC::CEntityId &id = NLMISC::CEntityId::Unknown );
|
||||
|
||||
/// spawn a new source to the world but sound manager don't keep any link and the sound will be automatically deleted when finnished
|
||||
bool spawnSource (const NLMISC::TStringId &soundName, NLSOUND::CSoundContext &context);
|
||||
bool spawnSource (const NLMISC::CSheetId &soundName, NLSOUND::CSoundContext &context);
|
||||
|
||||
/// spawn a new source to the world but sound manager don't keep any link and the sound will be automatically deleted when finnished
|
||||
bool spawnSource( const NLMISC::TStringId &soundName, const NLMISC::CVector &position );
|
||||
bool spawnSource( const NLMISC::CSheetId &soundName, const NLMISC::CVector &position );
|
||||
|
||||
/**
|
||||
* remove a source
|
||||
|
|
|
@ -134,24 +134,9 @@ void updateClientTime();
|
|||
// update smoothed time (useful for sky animation)
|
||||
void updateSmoothedTime();
|
||||
|
||||
inline TTime ryzomGetLocalTime ()
|
||||
inline NLMISC::TTime ryzomGetLocalTime()
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
if (ClientCfg.TimerMode == 0)
|
||||
{
|
||||
return (TTime)(NLMISC::CTime::ticksToSecond (NLMISC::CTime::getPerformanceTime()) * 1000.0);
|
||||
}
|
||||
else // if (ClientCfg.TimerMode == 1)
|
||||
{
|
||||
// Use 1 ms timer precision
|
||||
timeBeginPeriod(1);
|
||||
DWORD start = timeGetTime();
|
||||
timeEndPeriod(1);
|
||||
return (TTime)start;
|
||||
}
|
||||
#else // NL_OS_WINDOWS
|
||||
return (TTime)(NLMISC::CTime::ticksToSecond (NLMISC::CTime::getPerformanceTime()) * 1000.0);
|
||||
#endif // NL_OS_WINDOWS
|
||||
return NLMISC::CTime::getLocalTime();
|
||||
}
|
||||
|
||||
inline NLMISC::TTicks ryzomGetPerformanceTime()
|
||||
|
|
|
@ -3,11 +3,14 @@ Version=1.0
|
|||
Name=Ryzom
|
||||
Name[ru]=Ризом
|
||||
Type=Application
|
||||
GenericName=ryzom
|
||||
GenericName=Game client
|
||||
Comment=Ryzom client
|
||||
Comment[fr_FR]=Client Ryzom
|
||||
Exec=${RYZOM_BIN_PREFIX}/ryzom_client
|
||||
TryExec=${RYZOM_GAMES_PREFIX}/ryzom_client
|
||||
Exec=${RYZOM_GAMES_PREFIX}/ryzom_client
|
||||
Icon=ryzom
|
||||
Terminal=false
|
||||
Hidden=false
|
||||
Categories=Game;RolePlaying;
|
||||
StartupWMClass=ryzom
|
||||
X-AppInstall-Package=ryzom-client
|
||||
|
|
|
@ -320,9 +320,9 @@ CStaticFames::CStaticFames()
|
|||
//----------------------------------------------------------------------------
|
||||
CStaticFames::~CStaticFames()
|
||||
{
|
||||
delete _FameTable;
|
||||
delete[] _FameTable;
|
||||
_FameTable = NULL;
|
||||
delete _PropagationFactorTable;
|
||||
delete[] _PropagationFactorTable;
|
||||
_PropagationFactorTable = NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,9 @@ IF(WIN32)
|
|||
ADD_SUBDIRECTORY(world_editor)
|
||||
IF(WITH_MFC)
|
||||
ADD_SUBDIRECTORY(mission_compiler_fe)
|
||||
ADD_SUBDIRECTORY(georges_dll)
|
||||
ADD_SUBDIRECTORY(georges_exe)
|
||||
ADD_SUBDIRECTORY(georges_plugin_sound)
|
||||
ENDIF(WITH_MFC)
|
||||
ENDIF(WIN32)
|
||||
|
||||
|
|
19
code/ryzom/tools/leveldesign/georges_dll/CMakeLists.txt
Normal file
19
code/ryzom/tools/leveldesign/georges_dll/CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
|||
|
||||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_LIBRARY(georges_dll SHARED ${SRC} georges_edit.rc)
|
||||
|
||||
INCLUDE_DIRECTORIES(${NEL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(georges_dll nelmisc nelgeorges)
|
||||
NL_DEFAULT_PROPS(georges_dll "Ryzom, Tools, Georges: Georges Dll")
|
||||
NL_ADD_RUNTIME_FLAGS(georges_dll)
|
||||
NL_ADD_LIB_SUFFIX(georges_dll)
|
||||
|
||||
ADD_DEFINITIONS(${MFC_DEFINITIONS} -DGEORGES_EXPORT)
|
||||
|
||||
IF(WITH_PCH)
|
||||
ADD_NATIVE_PRECOMPILED_HEADER(georges_dll ${CMAKE_CURRENT_SOURCE_DIR}/stdafx.h ${CMAKE_CURRENT_SOURCE_DIR}/stdafx.cpp)
|
||||
ENDIF(WITH_PCH)
|
||||
|
||||
INSTALL(TARGETS georges_dll LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT libraries)
|
|
@ -37,7 +37,7 @@ public:
|
|||
|
||||
// From CDialog
|
||||
void OnOK () {}
|
||||
void OnCancel ()
|
||||
void OnCancel ();
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(COutputConsoleDlg)
|
||||
|
|
12
code/ryzom/tools/leveldesign/georges_exe/CMakeLists.txt
Normal file
12
code/ryzom/tools/leveldesign/georges_exe/CMakeLists.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_DEFINITIONS(${MFC_DEFINITIONS})
|
||||
SET(CMAKE_MFC_FLAG 2)
|
||||
ADD_EXECUTABLE(georges_exe WIN32 ${SRC} georges_exe.rc)
|
||||
|
||||
TARGET_LINK_LIBRARIES(georges_exe nelmisc nelgeorges georges_dll)
|
||||
|
||||
NL_DEFAULT_PROPS(georges_exe "Ryzom, Tools, Georges: Georges Exe")
|
||||
NL_ADD_RUNTIME_FLAGS(georges_exe)
|
||||
|
||||
INSTALL(TARGETS georges_exe RUNTIME DESTINATION bin COMPONENT tools)
|
|
@ -0,0 +1,26 @@
|
|||
|
||||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
# Bugfix...
|
||||
IF (NOT DXSDK_INCLUDE_DIR)
|
||||
IF (DXSDK_DIR)
|
||||
SET(DXSDK_INCLUDE_DIR "${DXSDK_DIR}/Include")
|
||||
ENDIF (DXSDK_DIR)
|
||||
ENDIF (NOT DXSDK_INCLUDE_DIR)
|
||||
|
||||
IF (NOT DXSDK_INCLUDE_DIR)
|
||||
message(FATAL_ERROR "Configuration bad, cannot find DirectX include.")
|
||||
ENDIF (NOT DXSDK_INCLUDE_DIR)
|
||||
|
||||
ADD_LIBRARY(georges_plugin_sound SHARED ${SRC})
|
||||
|
||||
INCLUDE_DIRECTORIES(georges_plugin_sound ${NEL_INCLUDE_DIR} ${DXSDK_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(georges_plugin_sound nelmisc nelgeorges nelsound nelligo nelsnd_lowlevel georges_dll ${DXSDK_DSOUND_LIBRARY} ${DXSDK_GUID_LIBRARY})
|
||||
NL_DEFAULT_PROPS(georges_plugin_sound "Ryzom, Tools, Georges: Georges Plugin Sound")
|
||||
NL_ADD_RUNTIME_FLAGS(georges_plugin_sound)
|
||||
NL_ADD_LIB_SUFFIX(georges_plugin_sound)
|
||||
|
||||
ADD_DEFINITIONS(${MFC_DEFINITIONS})
|
||||
|
||||
INSTALL(TARGETS georges_plugin_sound LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT libraries)
|
|
@ -68,6 +68,9 @@ CSoundPlugin::CSoundPlugin(IEdit *globalInterface)
|
|||
{
|
||||
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||||
|
||||
// Initialize without sheet id bin
|
||||
NLMISC::CSheetId::initWithoutSheet();
|
||||
|
||||
CVector dir;
|
||||
|
||||
_GlobalInterface = globalInterface;
|
||||
|
@ -337,7 +340,7 @@ void CSoundPlugin::setActiveDocument(IEditDocument *pdoc)
|
|||
_Dialog.setName(_Filename);
|
||||
|
||||
// 1st, try to found the sound in the preloaded sound bank.
|
||||
_Sound = _Mixer->getSoundId(CStringMapper::map(_Filename));
|
||||
_Sound = _Mixer->getSoundId(CSheetId(_Filename, "sound"));
|
||||
if (_Sound == NULL)
|
||||
{
|
||||
// not found, create a new one.
|
||||
|
@ -537,7 +540,7 @@ void CSoundPlugin::play(std::string &filename)
|
|||
// point.Name = string("simulation-")+_Sound->getName()+"-000";
|
||||
|
||||
region.VPoints.push_back(point);
|
||||
string name = string("simulation-")+CStringMapper::unmap(_Sound->getName())+"-000";
|
||||
string name = string("simulation-")+NLMISC::CFile::getFilenameWithoutExtension(_Sound->getName().toString())+"-000";
|
||||
if (region.VPoints.back().checkProperty("name"))
|
||||
region.VPoints.back().removePropertyByName("name");
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include "nel/sound/driver/sound_driver.h"
|
||||
#include "nel/sound/driver/source.h"
|
||||
#include "nel/sound/driver/listener.h"
|
||||
#include "sound/driver/dsound/source_dsound.h"
|
||||
// #include "sound/driver/dsound/source_dsound.h"
|
||||
|
||||
#include "nel/sound/u_audio_mixer.h"
|
||||
#include "nel/sound/u_listener.h"
|
||||
|
@ -49,7 +49,7 @@
|
|||
class NLSOUND::IBuffer;
|
||||
class NLSOUND::IListener;
|
||||
class NLSOUND::USource;
|
||||
class NLSOUND::CSourceDSound;
|
||||
// class NLSOUND::CSourceDSound;
|
||||
class NLSOUND::CSound;
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,11 @@ ADD_SUBDIRECTORY(land_export_lib)
|
|||
|
||||
IF(WITH_MFC)
|
||||
ADD_SUBDIRECTORY(world_editor)
|
||||
ADD_SUBDIRECTORY(world_editor_fauna_graph_plugin)
|
||||
ADD_SUBDIRECTORY(world_editor_graph_plugin)
|
||||
ADD_SUBDIRECTORY(world_editor_primitive_plugin)
|
||||
ADD_SUBDIRECTORY(world_editor_shard_monitor_plugin)
|
||||
ADD_SUBDIRECTORY(world_editor_sound_plugin)
|
||||
ENDIF(WITH_MFC)
|
||||
|
||||
# This is an old plugin and is deprecated. It doesn't even compile anymore.
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_LIBRARY(world_editor_fauna_graph_plugin SHARED ${SRC})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(world_editor_fauna_graph_plugin
|
||||
nelmisc
|
||||
nel3d
|
||||
nelsound
|
||||
nelsnd_lowlevel)
|
||||
|
||||
NL_DEFAULT_PROPS(world_editor_fauna_graph_plugin "Ryzom, Tools, World: World Editor Fauna Graph Plugin")
|
||||
NL_ADD_RUNTIME_FLAGS(world_editor_fauna_graph_plugin)
|
||||
NL_ADD_LIB_SUFFIX(world_editor_fauna_graph_plugin)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${MFC_DEFINITIONS} -DWIN32_DLL_EXPORTS)
|
||||
|
||||
|
||||
INSTALL(TARGETS world_editor_fauna_graph_plugin LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_LIBRARY(world_editor_graph_plugin SHARED ${SRC})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(world_editor_graph_plugin
|
||||
nelmisc
|
||||
nel3d
|
||||
nelsound
|
||||
nelsnd_lowlevel
|
||||
ryzom_mission_compiler_lib)
|
||||
|
||||
NL_DEFAULT_PROPS(world_editor_graph_plugin "Ryzom, Tools, World: World Editor Graph Plugin")
|
||||
NL_ADD_RUNTIME_FLAGS(world_editor_graph_plugin)
|
||||
NL_ADD_LIB_SUFFIX(world_editor_graph_plugin)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${MFC_DEFINITIONS} -DWIN32_DLL_EXPORTS)
|
||||
|
||||
|
||||
INSTALL(TARGETS world_editor_graph_plugin LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
||||
|
|
@ -72,7 +72,7 @@ private:
|
|||
|
||||
void serial (NLMISC::IStream &s);
|
||||
|
||||
static uint getVersion ()
|
||||
static uint getVersion ();
|
||||
|
||||
void removed() {}
|
||||
};
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_LIBRARY(world_editor_shard_monitor_plugin SHARED ${SRC})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(world_editor_shard_monitor_plugin
|
||||
nelmisc
|
||||
nel3d
|
||||
nelsound
|
||||
nelsnd_lowlevel
|
||||
ryzom_gameshare)
|
||||
|
||||
NL_DEFAULT_PROPS(world_editor_shard_monitor_plugin "Ryzom, Tools, World: World Editor Shard Monitor Plugin")
|
||||
NL_ADD_RUNTIME_FLAGS(world_editor_shard_monitor_plugin)
|
||||
NL_ADD_LIB_SUFFIX(world_editor_shard_monitor_plugin)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${MFC_DEFINITIONS} -DWIN32_DLL_EXPORTS)
|
||||
|
||||
|
||||
INSTALL(TARGETS world_editor_shard_monitor_plugin LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
FILE(GLOB SRC *.cpp *.h)
|
||||
|
||||
ADD_LIBRARY(world_editor_sound_plugin SHARED ${SRC})
|
||||
|
||||
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||
|
||||
TARGET_LINK_LIBRARIES(world_editor_sound_plugin
|
||||
nelmisc
|
||||
nel3d
|
||||
nelsound
|
||||
nelsnd_lowlevel)
|
||||
|
||||
NL_DEFAULT_PROPS(world_editor_sound_plugin "Ryzom, Tools, World: World Editor Sound Plugin")
|
||||
NL_ADD_RUNTIME_FLAGS(world_editor_sound_plugin)
|
||||
NL_ADD_LIB_SUFFIX(world_editor_sound_plugin)
|
||||
|
||||
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${MFC_DEFINITIONS} -DWIN32_DLL_EXPORTS)
|
||||
|
||||
|
||||
INSTALL(TARGETS world_editor_sound_plugin LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
|
||||
|
Loading…
Reference in a new issue