- Договорённости с владельцем, замеры мувсета (стенами высоту не набрать), исправление подтягивания, конвейер Parkour и его грабли, ловушка с ресурсами, загружаемыми по строке - tools/test: measure_movement, mantle_test, parkour_gaps, parkour_tour, parkour_check.txt Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
27 lines
1.4 KiB
GDScript
27 lines
1.4 KiB
GDScript
extends Node
|
|
# Облёт карты Parkour для скриншотов: телепорт игрока по точкам, кадры пишет Godot (--write-movie).
|
|
# Запуск (окно мелькнёт):
|
|
# godot --path . --resolution 1152x648 --fixed-fps 10 --write-movie /tmp/shots/p.png --quit-after 42 res://tools/test/parkour_tour.tscn -- --client
|
|
# Кадры: p00000005.png и т. д.; точки — массив spots (позиция в координатах Godot, рыскание, наклон головы)
|
|
var level
|
|
var p
|
|
var frame := 0
|
|
# позиция центра капсулы (Godot), рыскание в градусах, наклон головы в градусах
|
|
var spots := [
|
|
[Vector3(0, 1.25, 6), 0, 6], [Vector3(0, 11.0, -196), 0, 3], [Vector3(-3.4, 10.0, -222), 0, 0], [Vector3(2, 14.0, -310), 0, 20],
|
|
[Vector3(0, 46.0, -352), 0, 3], [Vector3(0, 46.0, -400), 0, 0], [Vector3(0, 49.0, -560), 0, 6], [Vector3(0, 76.0, -672), 0, 14],
|
|
]
|
|
func _ready() -> void:
|
|
level = (load("res://maps/parkour/parkour.tscn") as PackedScene).instantiate()
|
|
add_child(level)
|
|
p = level.get_node("Player")
|
|
p.set_physics_process(false)
|
|
func _process(_d: float) -> void:
|
|
frame += 1
|
|
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])
|