Race 2 «Верхние ярусы», фаза 1: карта, вентиляторы, ускоряющие полосы, правила общие с Race

- maps/race2/: сцена, race2.gd (ворота со световыми столбами, лазеры, вентиляторы, полосы, срыв, дождь, гул), данные и модель из Blender models/race_02
  (раскладка layout.py -> build_race.py -> bake.py; свет пока запечён грубо, небо и музыка — копии Race)
- objects/vent.gd, objects/boost_strip.gd + хуки apply_vent()/apply_boost() в player/player.gd (MAX_SPEED и остальная физика не тронуты)
- race_rules.gd берёт данные у карты (общий код правил для Race и Race 2)
- портал RACE 2 в хабе, пресет экспорта Race2 + export_all.sh, Net.TIMED_MAPS/MAP_TITLES для race2 (RPC не менялись; серверу нужен deploy_server.sh)
- тесты: race_game_test.sh с MAP=race2 (бот проводит игроков телепортами), race2_check.txt
- README: раздел «Карта Race 2», результаты ботов по веткам

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-29 17:21:07 +05:00
co-authored by Claude Sonnet 5.5
parent b58c30a525
commit c3e0ae40b2
27 changed files with 1017 additions and 11 deletions
+2 -1
View File
@@ -9,7 +9,7 @@ extends Node
# Сдача (клавиша G, удержание): игрока возвращает на стартовую площадку, время не пишется ни в итоги, ни в рейтинг;
# сдавшиеся считаются завершившими для конца круга. Рейтинг: финиш -> Net.submit_my_record(rating_id, время).
const Data = preload("res://maps/race/race_data.gd")
var Data = null # данные карты (race_data.gd / race2_data.gd): берутся у карты в setup(), по умолчанию — Race
enum Phase { WAIT, COUNTDOWN, RACE, RESULTS }
@@ -70,6 +70,7 @@ var _giveup_bar: ProgressBar
func setup(m: Node3D) -> void:
map = m
player = m.player
Data = m.get("data") if m.get("data") != null else load("res://maps/race/race_data.gd")
if m.get("rating_id") != null:
rating_id = m.rating_id