fix: errors when reloading scenes

main
Sara 2024-10-07 01:09:25 +02:00
parent 528db9415c
commit e2d56ed6d4
1 changed files with 3 additions and 2 deletions

View File

@ -120,7 +120,7 @@ Level3D *GameRoot3D::load_level_at(gd::Ref<gd::PackedScene> level, gd::Transform
// store and add to tree at desired transform // store and add to tree at desired transform
// if this is the first level containing a game mode currently active use it's gamemode as a prototype // if this is the first level containing a game mode currently active use it's gamemode as a prototype
gd::Ref<gd::PackedScene> game_mode_prototype{instance->get_game_mode_prototype()}; gd::Ref<gd::PackedScene> game_mode_prototype{instance->get_game_mode_prototype()};
bool const switch_game_mode{!this->game_mode || this->game_mode->get_scene_file_path() != game_mode_prototype->get_path()}; bool const switch_game_mode{!this->game_mode || (this->game_mode == nullptr) != game_mode_prototype.is_null() || this->game_mode->get_scene_file_path() != game_mode_prototype->get_path()};
if(switch_game_mode) { if(switch_game_mode) {
this->set_game_mode(instance->get_game_mode_prototype()); this->set_game_mode(instance->get_game_mode_prototype());
} }
@ -139,7 +139,8 @@ void GameRoot3D::unload_all_levels() {
gd::HashMap<gd::StringName, Level3D*> levels = this->get_levels(); gd::HashMap<gd::StringName, Level3D*> levels = this->get_levels();
for(gd::KeyValue<gd::StringName, Level3D*> &kvp : levels) for(gd::KeyValue<gd::StringName, Level3D*> &kvp : levels)
kvp.value->call_deferred("queue_free"); kvp.value->call_deferred("queue_free");
this->get_levels().clear(); this->levels.clear();
this->spawn_points.clear();
this->reset_game_mode(); this->reset_game_mode();
} }