make tile unload safer
This commit is contained in:
@@ -78,7 +78,7 @@ void Noggit::Action::undo(bool redo)
|
||||
if (pair.second.tmp_edit_values)
|
||||
texture_set->getTempAlphamaps() = std::make_unique<tmp_edit_alpha_values>(*pair.second.tmp_edit_values);
|
||||
else
|
||||
texture_set->getTempAlphamaps() = nullptr;
|
||||
texture_set->getTempAlphamaps().reset();
|
||||
|
||||
std::memcpy(texture_set->getMCLYEntries(), &pair.second.layers_info, sizeof(layer_info) * 4);
|
||||
texture_set->setNTextures(pair.second.n_textures);
|
||||
|
||||
@@ -74,6 +74,9 @@ MapTile::MapTile( int pX
|
||||
|
||||
MapTile::~MapTile()
|
||||
{
|
||||
{
|
||||
std::lock_guard<std::mutex> const lock(_mutex);
|
||||
|
||||
for (auto& pair : object_instances)
|
||||
{
|
||||
for (auto& instance : pair.second)
|
||||
@@ -81,6 +84,7 @@ MapTile::~MapTile()
|
||||
instance->derefTile(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_world->remove_models_if_needed(uids);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ SceneObject::SceneObject(SceneObjectTypes type, Noggit::NoggitRenderContext cont
|
||||
, _context(context)
|
||||
, pos(0.f, 0.f, 0.f)
|
||||
, dir(0.f, 0.f, 0.f)
|
||||
, uid(0)
|
||||
, frame(0)
|
||||
{
|
||||
// min and max initialized to their opposites
|
||||
extents[0] = glm::vec3(std::numeric_limits<float>::max());
|
||||
@@ -86,6 +88,7 @@ void SceneObject::normalizeDirection()
|
||||
|
||||
void SceneObject::refTile(MapTile* tile)
|
||||
{
|
||||
assert(tile);
|
||||
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
||||
if (it == _tiles.end())
|
||||
_tiles.push_back(tile);
|
||||
@@ -93,6 +96,7 @@ void SceneObject::refTile(MapTile* tile)
|
||||
|
||||
void SceneObject::derefTile(MapTile* tile)
|
||||
{
|
||||
assert(tile);
|
||||
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
||||
if (it != _tiles.end())
|
||||
_tiles.erase(it);
|
||||
|
||||
@@ -2039,7 +2039,7 @@ void World::remove_models_if_needed(std::vector<uint32_t> const& uids)
|
||||
/*
|
||||
if (uids.size())
|
||||
{
|
||||
update_models_by_filename();
|
||||
need_model_updates = true;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user