extends Node3D class_name LevelManager var level: Node3D func _ready(): Global.level_mgr = self func init(): MetSys.set_save_data() goto_level(MetSys.get_full_room_path(Setting.starting_level)) MetSys.room_changed.connect(on_room_changed) func goto_level(level_path: String): var prev_level_position := Vector2i.MAX if level: prev_level_position = MetSys.get_current_room_instance().get_base_coords() level.queue_free() level = null level = load(level_path).instantiate() add_child(level) MetSys.current_layer = MetSys.get_current_room_instance().get_layer() var level_size = MetSys.get_current_room_instance().get_size() SignalManager.level_size_change.emit(level_size) if prev_level_position != Vector2i.MAX: var player = Global.character_mgr.get_player() var pos_pre = player.pos() var level_position_now = MetSys.get_current_room_instance().get_base_coords() var pos_change_xz = Vector2(level_position_now - prev_level_position) * MetSys.settings.in_game_cell_size pos_pre.x -= pos_change_xz.x pos_pre.z -= pos_change_xz.y print(player.pos(),pos_pre) player.set_pos(pos_pre) func on_room_changed(target_level: String): goto_level(MetSys.get_full_room_path(target_level))