diff --git a/doomsday/libdeng2/include/de/core/asset.h b/doomsday/libdeng2/include/de/core/asset.h index 14be2845b9..6f161270e5 100644 --- a/doomsday/libdeng2/include/de/core/asset.h +++ b/doomsday/libdeng2/include/de/core/asset.h @@ -114,6 +114,11 @@ class DENG2_PUBLIC AssetGroup : public Asset, return *this; } + AssetGroup &operator -= (Asset const &dep) { + remove(dep); + return *this; + } + bool has(Asset const &dep) const; void setPolicy(Asset const &asset, Policy policy); diff --git a/doomsday/libdeng2/src/core/asset.cpp b/doomsday/libdeng2/src/core/asset.cpp index ca9eda0fd6..70e1469111 100644 --- a/doomsday/libdeng2/src/core/asset.cpp +++ b/doomsday/libdeng2/src/core/asset.cpp @@ -110,6 +110,7 @@ void AssetGroup::clear() DENG2_FOR_EACH(Members, i, d->deps) { i->first->audienceForDeletion -= this; + i->first->audienceForStateChange -= this; } d->deps.clear(); @@ -120,12 +121,14 @@ void AssetGroup::insert(Asset const &asset, Policy policy) { d->deps[&asset] = policy; asset.audienceForDeletion += this; + asset.audienceForStateChange += this; d->update(*this); } void AssetGroup::remove(Asset const &asset) { asset.audienceForDeletion -= this; + asset.audienceForStateChange -= this; d->deps.erase(&asset); d->update(*this); } @@ -150,7 +153,10 @@ AssetGroup::Members const &AssetGroup::all() const void AssetGroup::assetDeleted(Asset &asset) { - remove(asset); + if(has(asset)) + { + remove(asset); + } } void AssetGroup::assetStateChanged(Asset &)