123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
- // Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
- // Copyright (C) 2015 Faust Logic, Inc.
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
- #ifndef _SFXDESCRIPTION_H_
- #define _SFXDESCRIPTION_H_
- #ifndef _CONSOLETYPES_H_
- #include "console/consoleTypes.h"
- #endif
- #ifndef _SIMDATABLOCK_H_
- #include "console/simDatablock.h"
- #endif
- #ifndef _MPOINT3_H_
- #include "math/mPoint3.h"
- #endif
- #ifndef _SFXCOMMON_H_
- #include "sfx/sfxCommon.h"
- #endif
- #ifndef _MEASE_H_
- #include "math/mEase.h"
- #endif
- class SFXSource;
- /// The SFXDescription defines how a sound should be played.
- ///
- /// If mConeInsideAngle and mConeOutsideAngle are not both
- /// 360 then the sound will be directional and facing out
- /// the Y axis. To reorient the cones, reorient the emitter
- /// object.
- ///
- /// A few tips:
- ///
- /// Make sure that server SFXDescription are defined with the
- /// datablock keyword, and that client SFXDescription are defined
- /// with the 'new' or 'singleton' keyword.
- ///
- class SFXDescription : public SimDataBlock
- {
- typedef SimDataBlock Parent;
- public:
-
- enum
- {
- MaxNumParameters = 8,
- };
- /// The 0 to 1 volume scale.
- F32 mVolume;
-
- /// The pitch scale.
- F32 mPitch;
- /// If true the sound will loop.
- bool mIsLooping;
- /// If true the sound data will be streamed from
- /// disk and not loaded completely into memory.
- bool mIsStreaming;
- /// If true the sound will be 3D positional.
- bool mIs3D;
-
- /// If this sound is allowed to be mixed in hardware.
- bool mUseHardware;
- /// If true the sound uses custom reverb properties.
- bool mUseReverb;
-
- /// The distance from the emitter at which the
- /// sound volume is unchanged. Beyond this distance
- /// the volume begins to falloff.
- ///
- /// This is only valid for 3D sounds.
- F32 mMinDistance;
- /// The distance from the emitter at which the
- /// sound volume becomes zero.
- ///
- /// This is only valid for 3D sounds.
- F32 mMaxDistance;
- /// The angle in degrees of the inner part of
- /// the cone. It must be within 0 to 360.
- ///
- /// This is only valid for 3D sounds.
- U32 mConeInsideAngle;
- /// The angle in degrees of the outer part of
- /// the cone. It must be greater than mConeInsideAngle
- /// and less than to 360.
- ///
- /// This is only valid for 3D sounds.
- U32 mConeOutsideAngle;
- /// The volume scalar for on/beyond the outside angle.
- ///
- /// This is only valid for 3D sounds.
- F32 mConeOutsideVolume;
-
- /// Local logarithmic distance attenuation rolloff factor. -1 to use global setting.
- /// Per-sound rolloff settings only supported with some SFX providers.
- F32 mRolloffFactor;
-
- /// Max distance in both directions along each axis by which the
- /// sound position of a 3D sound will be randomly scattered.
- ///
- /// Example: if you set x=5, then the final x coordinate of the 3D
- /// sound will be (OriginalX + randF( -5, +5 )).
- Point3F mScatterDistance;
- /// The source to which sources playing with this description will
- /// be added.
- SFXSource* mSourceGroup;
-
- /// Number of seconds until playback reaches full volume after starting/resuming.
- /// Zero to deactivate (default).
- F32 mFadeInTime;
-
- /// Number of seconds to fade out fading before stopping/pausing.
- /// Zero to deactivate (default).
- F32 mFadeOutTime;
-
- /// Easing curve for fade-in.
- EaseF mFadeInEase;
-
- /// Easing curve for fade-out.
- EaseF mFadeOutEase;
-
- /// When mIsLooping is true, the fades will apply to each cycle. Otherwise, only
- /// the first cycle will have a fade-in applied and no fade-out happens when a cycle
- /// ends.
- ///
- /// This also affects the playtime that is used to place fades. If mFadeLoops is
- /// false, the total playtime so far will be used rather than the playtime of the
- /// current cycle. This makes it possible to apply fades that extend across two or
- /// more loops of the sound, i.e. are longer than the actual sound duration.
- bool mFadeLoops;
- /// The number of seconds of sound data to read per streaming
- /// packet. Only relevant if "isStreaming" is true.
- U32 mStreamPacketSize;
- /// The number of streaming packets to read and buffer in advance.
- /// Only relevant if "isStreaming" is true.
- U32 mStreamReadAhead;
- /// Reverb properties for sound playback.
- SFXSoundReverbProperties mReverb;
-
- /// Parameters to which sources playing with this description should automatically
- /// connect when created.
- StringTableEntry mParameters[ MaxNumParameters ];
-
- /// Priority level for sounds. Higher priority sounds are less likely to be
- /// culled.
- F32 mPriority;
- SFXDescription();
- SFXDescription( const SFXDescription& desc );
- DECLARE_CONOBJECT( SFXDescription );
- static void initPersistFields();
- // SimDataBlock.
- virtual bool onAdd();
- virtual void packData( BitStream* stream );
- virtual void unpackData( BitStream* stream );
- virtual void inspectPostApply();
- /// Validates the description fixing any
- /// parameters that are out of range.
- void validate();
- public:
- SFXDescription(const SFXDescription&, bool);
- virtual bool allowSubstitutions() const { return true; }
- };
- #endif // _SFXDESCRIPTION_H_
|