Clear lua refs when unloading asset

This commit is contained in:
Emil Axelsson
2017-12-12 18:55:44 +01:00
parent 1926b59f91
commit 2f2bba5094

View File

@@ -235,6 +235,29 @@ bool AssetLoader::loadAsset(std::shared_ptr<Asset> asset) {
void AssetLoader::unloadAsset(std::shared_ptr<Asset> asset) {
tearDownAssetLuaTable(asset.get());
for (int ref : _onInitializationFunctionRefs[asset.get()]) {
luaL_unref(*_luaState, LUA_REGISTRYINDEX, ref);
}
_onInitializationFunctionRefs.clear();
for (int ref : _onDeinitializationFunctionRefs[asset.get()]) {
luaL_unref(*_luaState, LUA_REGISTRYINDEX, ref);
}
_onDeinitializationFunctionRefs.clear();
for (const auto it : _onDependencyInitializationFunctionRefs[asset.get()]) {
for (int ref : it.second) {
luaL_unref(*_luaState, LUA_REGISTRYINDEX, ref);
}
}
_onDependencyInitializationFunctionRefs[asset.get()].clear();
for (const auto it : _onDependencyDeinitializationFunctionRefs[asset.get()]) {
for (int ref : it.second) {
luaL_unref(*_luaState, LUA_REGISTRYINDEX, ref);
}
}
_onDependencyDeinitializationFunctionRefs[asset.get()].clear();
}
std::string AssetLoader::generateAssetPath(const std::string& baseDirectory,