mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-10 22:24:33 +00:00
Cleaned up implementation of #712
Also updates other game classes like the shapebase to utilize the sound asset hooks properly.
This commit is contained in:
parent
3812ce2e82
commit
15ef8b4fbe
12 changed files with 312 additions and 187 deletions
|
|
@ -352,15 +352,19 @@ bool SFXPlayList::preload( bool server, String& errorStr )
|
|||
{
|
||||
for( U32 i = 0; i < NUM_SLOTS; ++ i )
|
||||
{
|
||||
_setTrack(getTrack(i),i);
|
||||
StringTableEntry track = getTrack(i);
|
||||
if (track != StringTable->EmptyString())
|
||||
{
|
||||
_setTrack(getTrack(i), i);
|
||||
if (!getTrackProfile(i))
|
||||
{
|
||||
Con::errorf("SFXPlayList::Preload() - unable to find sfxProfile for asset %s", mTrackAssetId[i]);
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !sfxResolve( &mSlots.mState[ i ], errorStr ) )
|
||||
if (!sfxResolve(&mSlots.mState[i], errorStr))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#include "core/stream/bitStream.h"
|
||||
#include "core/resourceManager.h"
|
||||
#include "console/engineAPI.h"
|
||||
#include "core/stream/fileStream.h"
|
||||
|
||||
using namespace Torque;
|
||||
|
||||
|
|
@ -283,8 +284,13 @@ bool SFXProfile::_preloadBuffer()
|
|||
|
||||
Resource<SFXResource>& SFXProfile::getResource()
|
||||
{
|
||||
if( !mResource && mFilename != StringTable->EmptyString())
|
||||
mResource = SFXResource::load( mFilename );
|
||||
char buf[1024];
|
||||
FileName fullFilename = String(Platform::makeFullPathName(mFilename, buf, sizeof(buf)));
|
||||
|
||||
if (!mResource && SFXResource::exists(fullFilename))
|
||||
mResource = SFXResource::load(mFilename);
|
||||
else
|
||||
mResource = NULL;
|
||||
|
||||
return mResource;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1581,133 +1581,70 @@ DefineEngineFunction( sfxPlay, S32, ( const char * trackName, const char * point
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
static ConsoleDocFragment _sPlayOnce1(
|
||||
"@brief Create a play-once source for the given @a track.\n\n"
|
||||
"@brief Create a play-once source for the given @a asset.\n\n"
|
||||
"Once playback has finished, the source will be automatically deleted in the next sound system update.\n"
|
||||
"@param track The sound datablock.\n"
|
||||
"@return A newly created temporary source in \"Playing\" state or 0 if the operation failed.\n\n"
|
||||
"@ref SFXSource_playonce\n\n"
|
||||
"@ingroup SFX",
|
||||
NULL,
|
||||
"SFXSource sfxPlayOnce( SFXTrack track );"
|
||||
"SFXSource sfxPlayOnce( StringTableEntry assetID );"
|
||||
);
|
||||
static ConsoleDocFragment _sPlayOnce2(
|
||||
"@brief Create a play-once source for the given given @a track and position the source's 3D sound at the given coordinates "
|
||||
"only if the track's description is set up for 3D sound).\n\n"
|
||||
"@brief Create a play-once source for the given given @a asset and position the source's 3D sound at the given coordinates "
|
||||
"only if the asset is set up for 3D sound).\n\n"
|
||||
"Once playback has finished, the source will be automatically deleted in the next sound system update.\n"
|
||||
"@param track The sound datablock.\n"
|
||||
"@param assetId The sound asset.\n"
|
||||
"@param x The X coordinate of the 3D sound position.\n"
|
||||
"@param y The Y coordinate of the 3D sound position.\n"
|
||||
"@param z The Z coordinate of the 3D sound position.\n"
|
||||
"@param fadeInTime If >=0, this overrides the SFXDescription::fadeInTime value on the track's description.\n"
|
||||
"@param fadeInTime If >=0, this overrides the SFXDescription::fadeInTime value on the asset's definition.\n"
|
||||
"@return A newly created temporary source in \"Playing\" state or 0 if the operation failed.\n\n"
|
||||
"@tsexample\n"
|
||||
"// Immediately start playing the given track. Fade it in to full volume over 5 seconds.\n"
|
||||
"sfxPlayOnce( MusicTrack, 0, 0, 0, 5.f );\n"
|
||||
"// Immediately start playing the given asset. Fade it in to full volume over 5 seconds.\n"
|
||||
"sfxPlayOnce( ExampleModule:MusicTrack, 0, 0, 0, 5.f );\n"
|
||||
"@endtsexample\n\n"
|
||||
"@ref SFXSource_playonce\n\n"
|
||||
"@ingroup SFX",
|
||||
NULL,
|
||||
"SFXSource sfxPlayOnce( SFXTrack track, float x, float y, float z, float fadeInTime=-1 );"
|
||||
);
|
||||
static ConsoleDocFragment _sPlayOnce3(
|
||||
"@brief Create a new temporary SFXProfile from the given @a description and @a filename, then create a play-once source "
|
||||
"for it and start playback.\n\n"
|
||||
"Once playback has finished, the source will be automatically deleted in the next sound system update. If not referenced "
|
||||
"otherwise by then, the temporary SFXProfile will also be deleted.\n"
|
||||
"@param description The description to use for playback.\n"
|
||||
"@param filename Path to the sound file to play.\n"
|
||||
"@return A newly created temporary source in \"Playing\" state or 0 if the operation failed.\n\n"
|
||||
"@tsexample\n"
|
||||
"// Play a sound effect file once.\n"
|
||||
"sfxPlayOnce( AudioEffects, \"art/sound/weapons/Weapon_pickup\" );\n"
|
||||
"@endtsexample\n\n"
|
||||
"@ref SFXSource_playonce\n\n"
|
||||
"@ingroup SFX",
|
||||
NULL,
|
||||
"SFXSource sfxPlayOnce( SFXDescription description, string filename );"
|
||||
);
|
||||
static ConsoleDocFragment _sPlayOnce4(
|
||||
"@brief Create a new temporary SFXProfile from the given @a description and @a filename, then create a play-once source "
|
||||
"for it and start playback. Position the source's 3D sound at the given coordinates (only if the description "
|
||||
"is set up for 3D sound).\n\n"
|
||||
"Once playback has finished, the source will be automatically deleted in the next sound system update. If not referenced "
|
||||
"otherwise by then, the temporary SFXProfile will also be deleted.\n"
|
||||
"@param description The description to use for playback.\n"
|
||||
"@param filename Path to the sound file to play.\n"
|
||||
"@param x The X coordinate of the 3D sound position.\n"
|
||||
"@param y The Y coordinate of the 3D sound position.\n"
|
||||
"@param z The Z coordinate of the 3D sound position.\n"
|
||||
"@param fadeInTime If >=0, this overrides the SFXDescription::fadeInTime value on the track's description.\n"
|
||||
"@return A newly created temporary source in \"Playing\" state or 0 if the operation failed.\n\n"
|
||||
"@tsexample\n"
|
||||
"// Play a sound effect file once using a 3D sound with a default falloff placed at the origin.\n"
|
||||
"sfxPlayOnce( AudioDefault3D, \"art/sound/weapons/Weapon_pickup\", 0, 0, 0 );\n"
|
||||
"@endtsexample\n\n"
|
||||
"@ref SFXSource_playonce\n\n"
|
||||
"@ingroup SFX",
|
||||
NULL,
|
||||
"SFXSource sfxPlayOnce( SFXDescription description, string filename, float x, float y, float z, float fadeInTime=-1 );"
|
||||
"SFXSource sfxPlayOnce( StringTableEntry assetID, float x, float y, float z, float fadeInTime=-1 );"
|
||||
);
|
||||
|
||||
DefineEngineFunction( sfxPlayOnce, S32, ( const char * sfxType, const char * arg0, const char * arg1, const char * arg2, const char * arg3, const char* arg4 ), ("", "", "", "", "-1.0f"),
|
||||
DefineEngineFunction( sfxPlayOnce, S32, (StringTableEntry assetId, const char* arg0, const char * arg1, const char * arg2, const char * arg3 ), (StringTable->EmptyString(), "", "", "", "-1.0f"),
|
||||
"SFXSource sfxPlayOnce( ( SFXTrack track | SFXDescription description, string filename ) [, float x, float y, float z, float fadeInTime=-1 ] ) "
|
||||
"Create a new play-once source for the given profile or description+filename and start playback of the source.\n"
|
||||
"@hide" )
|
||||
{
|
||||
SFXDescription* description = NULL;
|
||||
SFXTrack* track = dynamic_cast< SFXTrack* >( Sim::findObject( sfxType ) );
|
||||
if( !track )
|
||||
{
|
||||
description = dynamic_cast< SFXDescription* >( Sim::findObject( sfxType ) );
|
||||
if( !description )
|
||||
if (assetId == StringTable->EmptyString())
|
||||
{
|
||||
Con::errorf( "sfxPlayOnce - Unable to locate sound track/description '%s'", sfxType );
|
||||
Con::errorf( "sfxPlayOnce - Must Define a sound asset");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
SFXSource* source = NULL;
|
||||
if( track )
|
||||
|
||||
if (AssetDatabase.isDeclaredAsset(assetId))
|
||||
{
|
||||
// In this overloaded use, arg0..arg2 are x, y, z, and arg3 is the fadeInTime.
|
||||
if (String::isEmpty(arg0))
|
||||
|
||||
AssetPtr<SoundAsset> tempSoundAsset;
|
||||
tempSoundAsset = assetId;
|
||||
|
||||
if (String::isEmpty(arg0) || !tempSoundAsset->is3D())
|
||||
{
|
||||
source = SFX->playOnce( track );
|
||||
source = SFX->playOnce(tempSoundAsset->getSfxProfile());
|
||||
}
|
||||
else
|
||||
{
|
||||
MatrixF transform;
|
||||
transform.set( EulerF( 0, 0, 0 ), Point3F( dAtof( arg0 ), dAtof( arg1 ),dAtof( arg2 ) ) );
|
||||
source = SFX->playOnce( track, &transform, NULL, dAtof( arg3 ) );
|
||||
}
|
||||
transform.set(EulerF(0, 0, 0), Point3F(dAtof(arg0), dAtof(arg1), dAtof(arg2)));
|
||||
source = SFX->playOnce(tempSoundAsset->getSfxProfile(), &transform, NULL, dAtof(arg3));
|
||||
}
|
||||
else if( description )
|
||||
{
|
||||
// In this overload, arg0 is the filename, arg1..arg3 are x, y, z, and arg4 is fadeInTime.
|
||||
SFXProfile* tempProfile = new SFXProfile( description, StringTable->insert( arg0 ), true );
|
||||
if( !tempProfile->registerObject() )
|
||||
{
|
||||
Con::errorf( "sfxPlayOnce - unable to create profile" );
|
||||
delete tempProfile;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (String::isEmpty(arg1))
|
||||
source = SFX->playOnce( tempProfile );
|
||||
else
|
||||
{
|
||||
MatrixF transform;
|
||||
transform.set( EulerF( 0, 0, 0 ), Point3F( dAtof( arg1 ), dAtof( arg2 ),dAtof( arg3 ) ) );
|
||||
source = SFX->playOnce( tempProfile, &transform, NULL, dAtof( arg4 ) );
|
||||
}
|
||||
|
||||
// Set profile to auto-delete when SFXSource releases its reference.
|
||||
// Also add to root group so the profile will get deleted when the
|
||||
// Sim system is shut down before the SFXSource has played out.
|
||||
|
||||
tempProfile->setAutoDelete( true );
|
||||
Sim::getRootGroup()->addObject( tempProfile );
|
||||
}
|
||||
Con::errorf("sfxPlayOnce - Could not locate assetId '%s'", assetId);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( !source )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue