- maps/race: трасса 633 м из Blender (три развилки: срез по контейнерам, каньон со стенами против нижней дороги, труба с лазерами против коридора), запечённый свет, небо, дождь, гул; фоновая песня (Ogg Vorbis, ~0,6 МБ) включается на «СТАРТ!» - Правила (race_rules.gd): R — готов; когда готовы все — отсчёт 6 с, заморозка в слотах, ворота строго по порядку, сплиты, место, итоги, личный рекорд (user://race_best.cfg) - Сеть: Net.submit_race / recv_race / race_event (RACE_READY, START, CP, FINISH, STATE). ВНИМАНИЕ: набор RPC изменён — клиент и сервер выкладываются вместе, старый клиент с новым сервером не работает (rpc node checksum failed) - player.gd: input_frozen и place() для режимов карт; project.godot: действие ready (R) - Портал RACE в хабе, пресет экспорта Race (include_filter для ресурсов, грузимых строкой) - tools/test: двухклиентный тест гонки на локальном сервере, бот, облёт, проверка пакета - README: правила гонки, события, проверки, заметки Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
49 lines
2.4 KiB
GDScript
49 lines
2.4 KiB
GDScript
# Сгенерировано Blender models/race_01/build_race.py из layout.py — не править руками
|
|
extends RefCounted
|
|
|
|
# Старт: 8 слотов в ряд поперёк трассы, лицом по трассе (-Z); центр капсулы
|
|
const START_SLOTS := [
|
|
Vector3(-9.80, 1.25, -28.00),
|
|
Vector3(-7.00, 1.25, -28.00),
|
|
Vector3(-4.20, 1.25, -28.00),
|
|
Vector3(-1.40, 1.25, -28.00),
|
|
Vector3(1.40, 1.25, -28.00),
|
|
Vector3(4.20, 1.25, -28.00),
|
|
Vector3(7.00, 1.25, -28.00),
|
|
Vector3(9.80, 1.25, -28.00),
|
|
]
|
|
|
|
# Ворота по порядку: [центр капсулы на полу ворот, полуширина поперёк трассы (м), рыскание (град; 0 = -Z, -90 = на +X)]. Последний = ФИНИШ
|
|
# На развилках ворота стоят только в общих местах (после слияния веток), поэтому между ними бывает до ~170 м.
|
|
const CHECKPOINTS := [
|
|
[Vector3(0.00, 1.20, -78.00), 13.0, 0.0], # cp1
|
|
[Vector3(0.00, 5.70, -114.00), 8.0, 0.0], # cp2
|
|
[Vector3(66.00, 5.70, -195.00), 12.0, -90.0], # cp3
|
|
[Vector3(99.00, 6.20, -195.00), 13.0, -90.0], # cp4
|
|
[Vector3(150.00, 4.70, -195.00), 13.0, -90.0], # cp5
|
|
[Vector3(163.00, 0.40, -306.00), 10.0, 0.0], # cp6
|
|
[Vector3(162.00, -5.70, -362.00), 12.0, 0.0], # cp7
|
|
[Vector3(161.00, -5.70, -440.00), 28.0, 0.0], # cp8
|
|
]
|
|
|
|
# Лазеры: центр, размер, режим (0 — всегда, 1 — пульсирует), период, время включения, сдвиг
|
|
const LASERS := [
|
|
[Vector3(170.50, -6.45, -385.25), Vector3(5.00, 0.90, 0.50), 0, 0.00, 0.00, 0.00], # t_floor
|
|
[Vector3(170.50, -5.30, -397.25), Vector3(5.00, 0.60, 0.50), 1, 2.60, 1.30, 0.00], # t_mid
|
|
]
|
|
|
|
# Ангар (для отключения дождя): x0, x1, y0(+Z), y1, пол, потолок; в координатах Godot по Z — расстояние по трассе со знаком минус
|
|
const HALL_X0 := 148.0
|
|
const HALL_X1 := 173.0
|
|
const HALL_Z0 := -416.0
|
|
const HALL_Z1 := -364.0
|
|
const HALL_FLOOR := -6.9
|
|
const HALL_CEIL := 2.1
|
|
|
|
# Портал в хаб за финишем: позиция на полу площадки
|
|
const PORTAL := Vector3(161.00, -6.90, -490.00)
|
|
# Длина безопасного маршрута, м
|
|
const TRACK_LENGTH := 632.9
|
|
# Срыв: на столько ниже последнего чекпоинта — возрождение
|
|
const KILL_DEPTH := 32.0
|