feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39

Merged
min merged 215 commits from feat/lua-50-games-bundle into main 2026-06-09 21:59:25 +00:00
2 changed files with 24 additions and 15 deletions
Showing only changes of commit bf2447f86e - Show all commits

View File

@ -561,19 +561,30 @@ def _cframe_orientation_to_matrix(orientation_id: int) -> tuple:
Источник: https://dom.rojo.space/binary#cframe-orientation-ids Источник: https://dom.rojo.space/binary#cframe-orientation-ids
Это полная таблица 24-х валидных orientation id для cube symmetries. Формула из rbx-dom:
Возвращает (r00, r01, r02, r10, r11, r12, r20, r21, r22). orientation_id = (rx_axis * 6) + ry_axis + 1
где rx_axis, ry_axis {0..5} = (R0, R1, R2, R3, R4, R5):
R0 = +X, R1 = +Y, R2 = +Z, R3 = -X, R4 = -Y, R5 = -Z
rx это направление куда смотрит локальная +X ось куба (правая грань),
ry направление куда смотрит локальная +Y ось (верхняя грань).
Возвращает (r00, r01, r02, r10, r11, r12, r20, r21, r22) row-major.
Матрица собирается так: rx, ry, rz это столбцы.
""" """
# Таблица из rbx-dom. Каждое значение — пара (rx_axis, ry_axis) где # Правильный порядок axes (rbx-dom):
# значения в {0,1,2,3,4,5} = +X, -X, +Y, -Y, +Z, -Z # 0=+X, 1=+Y, 2=+Z, 3=-X, 4=-Y, 5=-Z
AXES = [ AXES = [
(1, 0, 0), (-1, 0, 0), (1, 0, 0), # +X
(0, 1, 0), (0, -1, 0), (0, 1, 0), # +Y
(0, 0, 1), (0, 0, -1), (0, 0, 1), # +Z
(-1, 0, 0), # -X
(0, -1, 0), # -Y
(0, 0, -1), # -Z
] ]
# orientation_id = 1..24 (1-based) # orientation_id = 1..36 (некоторые комбинации rx==ry невалидны, в файлах
if not (1 <= orientation_id <= 24): # не встречаются — но id может доходить до 6*6 = 36, не 24).
# Неверный id — возвращаем identity if not (1 <= orientation_id <= 36):
return (1, 0, 0, 0, 1, 0, 0, 0, 1) return (1, 0, 0, 0, 1, 0, 0, 0, 1)
idx = orientation_id - 1 idx = orientation_id - 1
@ -581,16 +592,14 @@ def _cframe_orientation_to_matrix(orientation_id: int) -> tuple:
ry_idx = idx % 6 ry_idx = idx % 6
rx = AXES[rx_idx] rx = AXES[rx_idx]
ry = AXES[ry_idx] ry = AXES[ry_idx]
# rz = rx × ry (cross product) # rz = rx × ry (cross product) — третий столбец
rz = ( rz = (
rx[1] * ry[2] - rx[2] * ry[1], rx[1] * ry[2] - rx[2] * ry[1],
rx[2] * ry[0] - rx[0] * ry[2], rx[2] * ry[0] - rx[0] * ry[2],
rx[0] * ry[1] - rx[1] * ry[0], rx[0] * ry[1] - rx[1] * ry[0],
) )
# Матрица: первые 3 — first row (R_xx, R_yx, R_zx) # rx, ry, rz — это СТОЛБЦЫ матрицы.
# Сложновато; берём из rbx-dom convention: первые три — основа R*XAxis, # row-major: [r00=rx[0], r01=ry[0], r02=rz[0], r10=rx[1], r11=ry[1], r12=rz[1], ...]
# затем R*YAxis, затем R*ZAxis. Расширяем в row-major form.
# На практике: orientation вектора (rx, ry, rz) — это **столбцы** матрицы.
r00, r10, r20 = rx r00, r10, r20 = rx
r01, r11, r21 = ry r01, r11, r21 = ry
r02, r12, r22 = rz r02, r12, r22 = rz