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
3 changed files with 36 additions and 12 deletions
Showing only changes of commit 3a82b3c64d - Show all commits

View File

@ -103,19 +103,42 @@ SHAPE_TO_PRIMITIVE = {
# ────── BrickColor таблица (упрощённая) ────── # ────── BrickColor таблица (упрощённая) ──────
# Roblox использует old BrickColor enum (числа 1-1032). Только распространённые: # Roblox использует old BrickColor enum (числа 1-1032). Только распространённые:
BRICKCOLOR_TO_HEX = { BRICKCOLOR_TO_HEX = {
1: '#f2f3f3', 5: '#d9e4f7', 9: '#9c9e9c', 11: '#e8eaea', # Базовые тона
21: '#c4281c', 23: '#0d69ac', 24: '#f5cd30', 26: '#27313e', 1: '#f2f3f3', 2: '#a1a5a2', 3: '#f9e999', 5: '#d9e4f7',
28: '#293f1a', 29: '#a3bb71', 37: '#4b9740', 38: '#ab5a32', 9: '#9c9e9c', 11: '#e8eaea', 18: '#cc8e69', 21: '#c4281c',
101: '#dab8a3', 102: '#82c1e9', 103: '#9b9696', 104: '#6b327a', 23: '#0d69ac', 24: '#f5cd30', 26: '#1b2a35', 28: '#293f1a',
105: '#cf8b3e', 106: '#d97e29', 107: '#3a8fbf', 108: '#695b50', 29: '#a3bb71', 37: '#4b9740', 38: '#ab5a32', 101: '#dab8a3',
111: '#a7a6a6', 119: '#aac84a', 125: '#e8b486', 138: '#8a8a76', 102: '#82c1e9', 103: '#9b9696', 104: '#6b327a', 105: '#cf8b3e',
141: '#26462b', 153: '#9b605a', 192: '#5a3019', 194: '#9c9b91', 106: '#d97e29', 107: '#3a8fbf', 108: '#695b50', 111: '#a7a6a6',
199: '#3c3e3f', 208: '#dbdcdc', 224: '#f3e3a5', 226: '#fff8a8', 115: '#c7d23c', 116: '#56fff0', 118: '#b4d2e4', 119: '#aac84a',
120: '#d4f0a6', 123: '#cf6b6f', 124: '#9c54a6', 125: '#e8b486',
126: '#a6c2e3', 127: '#deb87b', 128: '#a37e5b', 131: '#9ba19d',
133: '#cc7c39', 134: '#de8b5f', 135: '#74859c', 136: '#876a7a',
137: '#e6a262', 138: '#8a8a76', 140: '#234770', 141: '#26462b',
143: '#bdc3e3', 145: '#5c8aa1', 146: '#75718b', 147: '#9a8a64',
148: '#5a605a', 149: '#1b2a47', 150: '#9ea1a3',
# ВАЖНО: 151 — Earth green (тёмная трава Crossroads)
151: '#7c9b53',
153: '#9b605a', 154: '#7a2d2d', 157: '#f5e09c', 158: '#b58c9c',
168: '#3c3a37', 176: '#a39989', 178: '#aa724c', 180: '#cc9555',
190: '#f7b830', 191: '#e69138',
192: '#5a3019', 193: '#f59d24', 194: '#9c9b91', 195: '#447ba6',
196: '#283970', 198: '#7b4b85', 199: '#3c3e3f', 200: '#7a854b',
208: '#dbdcdc', 209: '#a4733f', 210: '#7d8a8e', 211: '#9da3b3',
212: '#a5cce0', 213: '#6584b5', 215: '#7c8aa4', 216: '#8a5040',
217: '#7a5443', 218: '#94748a', 219: '#5c5a8a', 220: '#a3a8c4',
221: '#cc4488', 222: '#e8a8e0', 223: '#dd7790', 224: '#f3e3a5',
225: '#e8b685', 226: '#fff8a8', 232: '#bce0f0', 268: '#3c2e74',
301: '#73584b',
# Бипалитра 1001-1032 — стандартные яркие цвета
1001: '#ffffff', 1002: '#cccccc', 1003: '#000000', 1004: '#ff0000', 1001: '#ffffff', 1002: '#cccccc', 1003: '#000000', 1004: '#ff0000',
1005: '#ff8000', 1006: '#ffff00', 1007: '#80c000', 1008: '#00ff00', 1005: '#ff8000', 1006: '#ffff00', 1007: '#80c000', 1008: '#00ff00',
1009: '#00c080', 1010: '#0080ff', 1011: '#0000ff', 1012: '#5000ff', 1009: '#00c080', 1010: '#0080ff', 1011: '#0000ff', 1012: '#5000ff',
1013: '#a000ff', 1014: '#ff00ff', 1015: '#ff0080', 1016: '#ff80c0', 1013: '#a000ff', 1014: '#ff00ff', 1015: '#ff0080', 1016: '#ff80c0',
1017: '#ff8080', 1018: '#ffc080', 1019: '#ffff80', 1020: '#80ff80', 1017: '#ff8080', 1018: '#ffc080', 1019: '#ffff80', 1020: '#80ff80',
1021: '#80c0ff', 1022: '#80ffff', 1023: '#80ff00', 1024: '#00ff80',
1025: '#ff4040', 1026: '#8a0028', 1027: '#001f80', 1028: '#4d4d4d',
1029: '#9d9d9d', 1030: '#5e3923', 1031: '#7a4f30', 1032: '#cca5a5',
} }

View File

@ -507,10 +507,11 @@ export class PrimitiveManager {
const matName = `${mesh.name}_mat`; const matName = `${mesh.name}_mat`;
const mat = new StandardMaterial(matName, this.scene); const mat = new StandardMaterial(matName, this.scene);
mat.diffuseColor = Color3.FromHexString(color || '#888888'); mat.diffuseColor = Color3.FromHexString(color || '#888888');
// ambient (1,1,1) — позволяет scene.ambientColor (0.3,0.3,0.3) подсветить // ambient НЕ выставляем — иначе scene.ambient (0.3) + ambient(0.4-1.0)
// тени до 30% яркости цвета. На прямом свете diffuse доминирует. // приплюсовывается к diffuse и цвета становятся пересвеченными
// Без emissive — контраст света/тени сохраняется как в Roblox. // (особенно белые/серые становятся пересветлёнными).
mat.ambientColor = new Color3(1, 1, 1); // Babylon default (0,0,0) даёт чистый Lambert: освещённый цвет=diffuse,
// тень=чёрная (что в Roblox смягчается scene.ambient).
// Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это
// используется для GD-скинов куба (например /gd/skins/cube_smile.png). // используется для GD-скинов куба (например /gd/skins/cube_smile.png).