00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "stdsound.h"
00027
00028 #include "env_effect.h"
00029
00030 using namespace NLMISC;
00031
00032
00033 namespace NLSOUND {
00034
00035
00036
00037
00038
00039 CEnvEffect::CEnvEffect() : _Current(0), _BoundingShape(NULL)
00040 {
00041 }
00042
00043
00044
00045
00046
00047 void CEnvEffect::serialFileHeader( NLMISC::IStream& s, uint32& nb )
00048 {
00049 s.serialCheck( (uint32)'FEN' );
00050 if ( s.serialVersion( 2 ) < 2 )
00051 {
00052 throw EOlderStream(s);
00053 }
00054
00055 s.serial( nb );
00056 }
00057
00058
00059
00060
00061
00062 uint32 CEnvEffect::load( std::vector<CEnvEffect*>& container, NLMISC::IStream& s )
00063 {
00064 if ( s.isReading() )
00065 {
00066 uint32 i, nb;
00067 serialFileHeader( s, nb );
00068 for ( i=0; i!=nb; i++ )
00069 {
00070 CEnvEffect *enveffect = new CEnvEffect();
00071 s.serial( *enveffect );
00072 container.push_back( enveffect );
00073 }
00074 return nb;
00075 }
00076 else
00077 {
00078 nlstop;
00079 return 0;
00080 }
00081 }
00082
00083
00084
00085
00086
00087 void CEnvEffect::addEnvNum( TEnvEffectPreset num, const std::string& tag, float customsize )
00088 {
00089 _EnvNums.push_back( TEnvEffectRoom(num,customsize) );
00090 _Tags.push_back( tag );
00091 }
00092
00093
00094
00095
00096
00097 float CEnvEffect::getEnvSize() const
00098 {
00099 if ( _EnvNums[_Current].Size > 0 )
00100 {
00101 return _EnvNums[_Current].Size;
00102 }
00103 else
00104 {
00105 return _BoundingShape->getDiameter();
00106 }
00107 }
00108
00109
00110
00111
00112
00113 void CEnvEffect::selectEnv( const std::string& tag )
00114 {
00115 uint i;
00116 for ( i=0; i!= _Tags.size(); i++ )
00117 {
00118 if ( _Tags[i] == tag )
00119 {
00120 _Current = i;
00121 nldebug( "AM: EnvEffect: Environment changed to %s", tag.c_str() );
00122 return;
00123 }
00124 }
00125 nldebug( "AM: EnvEffect: Environment %s not found", tag.c_str() );
00126
00127 }
00128
00129
00130
00131
00132
00133 void CEnvEffect::save( const std::vector<CEnvEffect>& container, NLMISC::IStream& s )
00134 {
00135 nlassert( ! s.isReading() );
00136
00137 uint32 nb=container.size(), i;
00138 serialFileHeader( s, nb );
00139 for ( i=0; i!=nb; i++ )
00140 {
00141 s.serial( const_cast<CEnvEffect&>(container[i]) );
00142 }
00143 }
00144
00145
00146 }