You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.2 KiB
GDScript

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))