extends Node # Облёт хаба для кадров: телепорт игрока по точкам, кадры пишет Godot (--write-movie). # godot --path . --resolution 1152x648 --fixed-fps 10 --write-movie /tmp/shots/h.png --quit-after 45 res://tools/test/hub_tour.tscn -- --client --server-url=ws://127.0.0.1:1 # Меню паузы: добавьте `--menu=main|settings|controls` (тогда в кадре меню на хабе, остальной облёт отключён). # Кадры: h00000005.png и т. д. (каждые 5 кадров — следующая точка из spots). var level var p var frame := 0 # позиция центра капсулы, рыскание (0 = на север, к порталам), наклон головы (градусы) var spots := [ [Vector3(0, 1.25, 12), 0, 4], [Vector3(-10, 1.25, -6), 90, 8], [Vector3(10, 1.25, 8), -90, 6], [Vector3(0, 1.25, -9), 0, 12], [Vector3(0, 1.25, -5), 180, 10], [Vector3(14, 1.25, -9), 0, 8], [Vector3(-20, 1.25, 2), -90, 0], [Vector3(0, 6.0, 13), 0, -18], ] func _ready() -> void: Net.nick_asked = true # без панели «Введите ник» level = (load("res://maps/hub/hub.tscn") as PackedScene).instantiate() add_child(level) p = level.get_node("Player") p.set_physics_process(false) func _process(_d: float) -> void: frame += 1 for a in OS.get_cmdline_user_args(): if a.begins_with("--menu="): if frame == 3: PauseMenu.open_menu() PauseMenu._show_page(a.substr(7)) return var i := int(frame / 5) if i < spots.size() and frame % 5 == 1: var s = spots[i] p.global_position = s[0] p.rotation.y = deg_to_rad(s[1]) p.head.rotation.x = deg_to_rad(s[2])