mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-21 05:10:53 +00:00
working weak ref
WeakRefPtr now actually acts like a weak reference backend of weakRefPtr is now a weak_ptr so once the main shared_ptr is freed, they all get freed.
This commit is contained in:
parent
d688f1cfde
commit
ca4517c076
4 changed files with 56 additions and 82 deletions
|
|
@ -189,12 +189,6 @@ SoundAsset::SoundAsset()
|
|||
|
||||
SoundAsset::~SoundAsset()
|
||||
{
|
||||
|
||||
for (U32 i = 0; i < SFXPlayList::NUM_SLOTS; i++)
|
||||
{
|
||||
if(mSFXProfile[i].isProperlyAdded() && !mSFXProfile[i].isDeleted())
|
||||
mSFXProfile[i].unregisterObject();
|
||||
}
|
||||
|
||||
if (mPlaylist.isProperlyAdded() && !mPlaylist.isDeleted())
|
||||
mPlaylist.unregisterObject();
|
||||
|
|
@ -404,22 +398,17 @@ U32 SoundAsset::load()
|
|||
{
|
||||
Con::errorf("SoundAsset::initializeAsset: Attempted to load file %s but it was not valid!", mSoundFile[i]);
|
||||
mLoadedState = BadFileReference;
|
||||
mSFXProfile[i].setDescription(NULL);
|
||||
mSFXProfile[i].setSoundFileName(StringTable->insert(StringTable->EmptyString()));
|
||||
mSFXProfile[i].setPreload(false);
|
||||
return mLoadedState;
|
||||
}
|
||||
else
|
||||
{
|
||||
SFXProfile* trackProfile = new SFXProfile();
|
||||
trackProfile->setDescription(&mProfileDesc);
|
||||
trackProfile->setSoundFileName(mSoundPath[i]);
|
||||
trackProfile->setPreload(mPreload);
|
||||
mSFXProfile[i] = new SFXProfile;
|
||||
mSFXProfile[i]->setDescription(&mProfileDesc);
|
||||
mSFXProfile[i]->setSoundFileName(mSoundPath[i]);
|
||||
mSFXProfile[i]->setPreload(mPreload);
|
||||
mSFXProfile[i]->registerObject(String::ToString("%s_profile_track%d", getAssetName()).c_str());
|
||||
|
||||
mSFXProfile[i] = *trackProfile;
|
||||
mSFXProfile[i].registerObject(String::ToString("%s_profile_track%d", getAssetName()).c_str());
|
||||
|
||||
mPlaylist.mSlots.mTrack[i] = trackProfile;
|
||||
mPlaylist.mSlots.mTrack[i] = mSFXProfile[i];
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -436,18 +425,15 @@ U32 SoundAsset::load()
|
|||
{
|
||||
Con::errorf("SoundAsset::initializeAsset: Attempted to load file %s but it was not valid!", mSoundFile[0]);
|
||||
mLoadedState = BadFileReference;
|
||||
mSFXProfile[0].setDescription(NULL);
|
||||
mSFXProfile[0].setSoundFileName(StringTable->insert(StringTable->EmptyString()));
|
||||
mSFXProfile[0].setPreload(false);
|
||||
return mLoadedState;
|
||||
}
|
||||
else
|
||||
{
|
||||
mSFXProfile[0].setDescription(&mProfileDesc);
|
||||
mSFXProfile[0].setSoundFileName(mSoundPath[0]);
|
||||
mSFXProfile[0].setPreload(mPreload);
|
||||
|
||||
mSFXProfile[0].registerObject(String::ToString("%s_profile", getAssetName()).c_str());
|
||||
mSFXProfile[0] = new SFXProfile;
|
||||
mSFXProfile[0]->setDescription(&mProfileDesc);
|
||||
mSFXProfile[0]->setSoundFileName(mSoundPath[0]);
|
||||
mSFXProfile[0]->setPreload(mPreload);
|
||||
mSFXProfile[0]->registerObject(String::ToString("%s_profile", getAssetName()).c_str());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,9 +87,9 @@ class SoundAsset : public AssetBase
|
|||
typedef AssetPtr<SoundAsset> ConcreteAssetPtr;
|
||||
|
||||
protected:
|
||||
StringTableEntry mSoundFile[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
StringTableEntry mSoundPath[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
SFXProfile mSFXProfile[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
StringTableEntry mSoundFile[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
StringTableEntry mSoundPath[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
SimObjectPtr<SFXProfile> mSFXProfile[SFXPlayList::SFXPlaylistSettings::NUM_SLOTS];
|
||||
|
||||
SFXDescription mProfileDesc;
|
||||
SFXPlayList mPlaylist;
|
||||
|
|
@ -150,7 +150,7 @@ public:
|
|||
void copyTo(SimObject* object) override;
|
||||
|
||||
//SFXResource* getSound() { return mSoundResource; }
|
||||
Resource<SFXResource> getSoundResource(const U32 slotId = 0) { load(); return mSFXProfile[slotId].getResource(); }
|
||||
Resource<SFXResource> getSoundResource(const U32 slotId = 0) { load(); return mSFXProfile[slotId]->getResource(); }
|
||||
|
||||
/// Declare Console Object.
|
||||
DECLARE_CONOBJECT(SoundAsset);
|
||||
|
|
@ -158,9 +158,9 @@ public:
|
|||
static bool _setSoundFile(void* object, const char* index, const char* data);
|
||||
U32 load() override;
|
||||
inline StringTableEntry getSoundPath(const U32 slotId = 0) const { return mSoundPath[slotId]; };
|
||||
SFXProfile* getSfxProfile(const U32 slotId = 0) { return &mSFXProfile[slotId]; }
|
||||
SFXProfile* getSfxProfile(const U32 slotId = 0) { return mSFXProfile[slotId]; }
|
||||
SFXPlayList* getSfxPlaylist() { return &mPlaylist; }
|
||||
SFXTrack* getSFXTrack() { load(); return mIsPlaylist ? dynamic_cast<SFXTrack*>(&mPlaylist) : dynamic_cast<SFXTrack*>(&mSFXProfile[0]); }
|
||||
SFXTrack* getSFXTrack() { load(); return mIsPlaylist ? dynamic_cast<SFXTrack*>(&mPlaylist) : dynamic_cast<SFXTrack*>(mSFXProfile[0].getPointer()); }
|
||||
SFXDescription* getSfxDescription() { return &mProfileDesc; }
|
||||
bool isPlaylist(){ return mIsPlaylist; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue