@oyna360/lobby-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/avatar-accessories.d.ts +16 -0
  4. package/dist/avatar-accessories.d.ts.map +1 -0
  5. package/dist/avatar-accessories.js +214 -0
  6. package/dist/avatar-accessories.js.map +1 -0
  7. package/dist/avatar-asset-manager.d.ts +54 -0
  8. package/dist/avatar-asset-manager.d.ts.map +1 -0
  9. package/dist/avatar-asset-manager.js +215 -0
  10. package/dist/avatar-asset-manager.js.map +1 -0
  11. package/dist/avatar-clips.d.ts +17 -0
  12. package/dist/avatar-clips.d.ts.map +1 -0
  13. package/dist/avatar-clips.js +47 -0
  14. package/dist/avatar-clips.js.map +1 -0
  15. package/dist/avatar-config.d.ts +4 -0
  16. package/dist/avatar-config.d.ts.map +1 -0
  17. package/dist/avatar-config.js +9 -0
  18. package/dist/avatar-config.js.map +1 -0
  19. package/dist/avatar-factory.d.ts +64 -0
  20. package/dist/avatar-factory.d.ts.map +1 -0
  21. package/dist/avatar-factory.js +464 -0
  22. package/dist/avatar-factory.js.map +1 -0
  23. package/dist/avatar-instance.d.ts +31 -0
  24. package/dist/avatar-instance.d.ts.map +1 -0
  25. package/dist/avatar-instance.js +56 -0
  26. package/dist/avatar-instance.js.map +1 -0
  27. package/dist/avatar-material-pipeline.d.ts +34 -0
  28. package/dist/avatar-material-pipeline.d.ts.map +1 -0
  29. package/dist/avatar-material-pipeline.js +580 -0
  30. package/dist/avatar-material-pipeline.js.map +1 -0
  31. package/dist/avatar-rig-builder.d.ts +74 -0
  32. package/dist/avatar-rig-builder.d.ts.map +1 -0
  33. package/dist/avatar-rig-builder.js +347 -0
  34. package/dist/avatar-rig-builder.js.map +1 -0
  35. package/dist/draco.d.ts +7 -0
  36. package/dist/draco.d.ts.map +1 -0
  37. package/dist/draco.js +82 -0
  38. package/dist/draco.js.map +1 -0
  39. package/dist/humanoid-animator.d.ts +35 -0
  40. package/dist/humanoid-animator.d.ts.map +1 -0
  41. package/dist/humanoid-animator.js +191 -0
  42. package/dist/humanoid-animator.js.map +1 -0
  43. package/dist/humanoid-bone-names.d.ts +35 -0
  44. package/dist/humanoid-bone-names.d.ts.map +1 -0
  45. package/dist/humanoid-bone-names.js +126 -0
  46. package/dist/humanoid-bone-names.js.map +1 -0
  47. package/dist/humanoid-locomotion.d.ts +101 -0
  48. package/dist/humanoid-locomotion.d.ts.map +1 -0
  49. package/dist/humanoid-locomotion.js +300 -0
  50. package/dist/humanoid-locomotion.js.map +1 -0
  51. package/dist/humanoid-rig.d.ts +51 -0
  52. package/dist/humanoid-rig.d.ts.map +1 -0
  53. package/dist/humanoid-rig.js +304 -0
  54. package/dist/humanoid-rig.js.map +1 -0
  55. package/dist/index.d.ts +60 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +42 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lobby-chat-ui.d.ts +3 -0
  60. package/dist/lobby-chat-ui.d.ts.map +1 -0
  61. package/dist/lobby-chat-ui.js +258 -0
  62. package/dist/lobby-chat-ui.js.map +1 -0
  63. package/dist/lobby-colliders.d.ts +10 -0
  64. package/dist/lobby-colliders.d.ts.map +1 -0
  65. package/dist/lobby-colliders.js +225 -0
  66. package/dist/lobby-colliders.js.map +1 -0
  67. package/dist/lobby-connection-ui.d.ts +8 -0
  68. package/dist/lobby-connection-ui.d.ts.map +1 -0
  69. package/dist/lobby-connection-ui.js +68 -0
  70. package/dist/lobby-connection-ui.js.map +1 -0
  71. package/dist/lobby-debug.d.ts +50 -0
  72. package/dist/lobby-debug.d.ts.map +1 -0
  73. package/dist/lobby-debug.js +132 -0
  74. package/dist/lobby-debug.js.map +1 -0
  75. package/dist/lobby-font.d.ts +5 -0
  76. package/dist/lobby-font.d.ts.map +1 -0
  77. package/dist/lobby-font.js +35 -0
  78. package/dist/lobby-font.js.map +1 -0
  79. package/dist/lobby-music.d.ts +40 -0
  80. package/dist/lobby-music.d.ts.map +1 -0
  81. package/dist/lobby-music.js +250 -0
  82. package/dist/lobby-music.js.map +1 -0
  83. package/dist/lobby-orientation-ui.d.ts +10 -0
  84. package/dist/lobby-orientation-ui.d.ts.map +1 -0
  85. package/dist/lobby-orientation-ui.js +64 -0
  86. package/dist/lobby-orientation-ui.js.map +1 -0
  87. package/dist/lobby-perf-diag.d.ts +254 -0
  88. package/dist/lobby-perf-diag.d.ts.map +1 -0
  89. package/dist/lobby-perf-diag.js +775 -0
  90. package/dist/lobby-perf-diag.js.map +1 -0
  91. package/dist/lobby-plaza-diag.d.ts +103 -0
  92. package/dist/lobby-plaza-diag.d.ts.map +1 -0
  93. package/dist/lobby-plaza-diag.js +534 -0
  94. package/dist/lobby-plaza-diag.js.map +1 -0
  95. package/dist/lobby-presence-ui.d.ts +4 -0
  96. package/dist/lobby-presence-ui.d.ts.map +1 -0
  97. package/dist/lobby-presence-ui.js +89 -0
  98. package/dist/lobby-presence-ui.js.map +1 -0
  99. package/dist/lobby-real-device-diag.d.ts +119 -0
  100. package/dist/lobby-real-device-diag.d.ts.map +1 -0
  101. package/dist/lobby-real-device-diag.js +468 -0
  102. package/dist/lobby-real-device-diag.js.map +1 -0
  103. package/dist/lobby-spawn.d.ts +15 -0
  104. package/dist/lobby-spawn.d.ts.map +1 -0
  105. package/dist/lobby-spawn.js +18 -0
  106. package/dist/lobby-spawn.js.map +1 -0
  107. package/dist/lobby-ui-i18n.d.ts +11 -0
  108. package/dist/lobby-ui-i18n.d.ts.map +1 -0
  109. package/dist/lobby-ui-i18n.js +21 -0
  110. package/dist/lobby-ui-i18n.js.map +1 -0
  111. package/dist/lobby-voice-ui.d.ts +3 -0
  112. package/dist/lobby-voice-ui.d.ts.map +1 -0
  113. package/dist/lobby-voice-ui.js +105 -0
  114. package/dist/lobby-voice-ui.js.map +1 -0
  115. package/dist/local-player-controller.d.ts +80 -0
  116. package/dist/local-player-controller.d.ts.map +1 -0
  117. package/dist/local-player-controller.js +422 -0
  118. package/dist/local-player-controller.js.map +1 -0
  119. package/dist/name-tag.d.ts +3 -0
  120. package/dist/name-tag.d.ts.map +1 -0
  121. package/dist/name-tag.js +59 -0
  122. package/dist/name-tag.js.map +1 -0
  123. package/dist/network-client.d.ts +87 -0
  124. package/dist/network-client.d.ts.map +1 -0
  125. package/dist/network-client.js +182 -0
  126. package/dist/network-client.js.map +1 -0
  127. package/dist/platform-bridge.d.ts +17 -0
  128. package/dist/platform-bridge.d.ts.map +1 -0
  129. package/dist/platform-bridge.js +90 -0
  130. package/dist/platform-bridge.js.map +1 -0
  131. package/dist/platform-lobby.d.ts +176 -0
  132. package/dist/platform-lobby.d.ts.map +1 -0
  133. package/dist/platform-lobby.js +679 -0
  134. package/dist/platform-lobby.js.map +1 -0
  135. package/dist/platform-types.d.ts +56 -0
  136. package/dist/platform-types.d.ts.map +1 -0
  137. package/dist/platform-types.js +3 -0
  138. package/dist/platform-types.js.map +1 -0
  139. package/dist/player-label.d.ts +9 -0
  140. package/dist/player-label.d.ts.map +1 -0
  141. package/dist/player-label.js +14 -0
  142. package/dist/player-label.js.map +1 -0
  143. package/dist/playground/playground-layout.d.ts +14 -0
  144. package/dist/playground/playground-layout.d.ts.map +1 -0
  145. package/dist/playground/playground-layout.js +320 -0
  146. package/dist/playground/playground-layout.js.map +1 -0
  147. package/dist/playground/playground-system.d.ts +30 -0
  148. package/dist/playground/playground-system.d.ts.map +1 -0
  149. package/dist/playground/playground-system.js +202 -0
  150. package/dist/playground/playground-system.js.map +1 -0
  151. package/dist/plaza-layout.d.ts +30 -0
  152. package/dist/plaza-layout.d.ts.map +1 -0
  153. package/dist/plaza-layout.js +527 -0
  154. package/dist/plaza-layout.js.map +1 -0
  155. package/dist/plugins.d.ts +5 -0
  156. package/dist/plugins.d.ts.map +1 -0
  157. package/dist/plugins.js +26 -0
  158. package/dist/plugins.js.map +1 -0
  159. package/dist/protocol.d.ts +276 -0
  160. package/dist/protocol.d.ts.map +1 -0
  161. package/dist/protocol.js +107 -0
  162. package/dist/protocol.js.map +1 -0
  163. package/dist/quality.d.ts +39 -0
  164. package/dist/quality.d.ts.map +1 -0
  165. package/dist/quality.js +95 -0
  166. package/dist/quality.js.map +1 -0
  167. package/dist/remote-player-manager.d.ts +48 -0
  168. package/dist/remote-player-manager.d.ts.map +1 -0
  169. package/dist/remote-player-manager.js +339 -0
  170. package/dist/remote-player-manager.js.map +1 -0
  171. package/dist/scene-manager.d.ts +26 -0
  172. package/dist/scene-manager.d.ts.map +1 -0
  173. package/dist/scene-manager.js +169 -0
  174. package/dist/scene-manager.js.map +1 -0
  175. package/dist/spawn-utils.d.ts +8 -0
  176. package/dist/spawn-utils.d.ts.map +1 -0
  177. package/dist/spawn-utils.js +29 -0
  178. package/dist/spawn-utils.js.map +1 -0
  179. package/dist/starter-layout.d.ts +17 -0
  180. package/dist/starter-layout.d.ts.map +1 -0
  181. package/dist/starter-layout.js +102 -0
  182. package/dist/starter-layout.js.map +1 -0
  183. package/dist/third-person-camera.d.ts +35 -0
  184. package/dist/third-person-camera.d.ts.map +1 -0
  185. package/dist/third-person-camera.js +181 -0
  186. package/dist/third-person-camera.js.map +1 -0
  187. package/dist/types.d.ts +164 -0
  188. package/dist/types.d.ts.map +1 -0
  189. package/dist/types.js +2 -0
  190. package/dist/types.js.map +1 -0
  191. package/dist/voice-chat.d.ts +78 -0
  192. package/dist/voice-chat.d.ts.map +1 -0
  193. package/dist/voice-chat.js +321 -0
  194. package/dist/voice-chat.js.map +1 -0
  195. package/dist/yield-to-render.d.ts +3 -0
  196. package/dist/yield-to-render.d.ts.map +1 -0
  197. package/dist/yield-to-render.js +11 -0
  198. package/dist/yield-to-render.js.map +1 -0
  199. package/dist/zones.d.ts +36 -0
  200. package/dist/zones.d.ts.map +1 -0
  201. package/dist/zones.js +68 -0
  202. package/dist/zones.js.map +1 -0
  203. package/docs/00-overview.md +47 -0
  204. package/docs/01-connect.md +85 -0
  205. package/docs/02-github.md +43 -0
  206. package/docs/03-modes.md +70 -0
  207. package/docs/04-api.md +106 -0
  208. package/docs/05-features.md +55 -0
  209. package/docs/06-controls.md +34 -0
  210. package/docs/07-troubleshooting.md +39 -0
  211. package/package.json +65 -0
@@ -0,0 +1,258 @@
1
+ import { LOBBY_UI_FONT, ensureLobbyPersianFont } from './lobby-font';
2
+ import { LOBBY_CHAT_MAX_LEN } from './protocol';
3
+ import { formatPlayerHandle } from './player-label';
4
+ const SEND_ICON = '<svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" aria-hidden="true"><path d="M3.4 11.2 20.1 3.4c.7-.3 1.4.4 1.1 1.1l-7.8 16.7c-.3.7-1.3.6-1.5-.2l-1.8-6.6-6.6-1.8c-.8-.2-.9-1.2-.2-1.4Z"/></svg>';
5
+ const ICON_BTN = `pointer-events:auto;width:42px;height:42px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:rgba(8,8,20,.55);color:#fff;font-size:16px;cursor:pointer;display:grid;place-items:center;padding:0;font-family:${LOBBY_UI_FONT}`;
6
+ export function attachLobbyChatUi(lobby, canvas) {
7
+ void ensureLobbyPersianFont();
8
+ const toggle = document.createElement('button');
9
+ toggle.type = 'button';
10
+ toggle.title = 'چت لابی';
11
+ toggle.setAttribute('aria-label', 'چت لابی');
12
+ toggle.style.cssText = ICON_BTN;
13
+ const icon = document.createElement('span');
14
+ icon.textContent = '💬';
15
+ icon.setAttribute('aria-hidden', 'true');
16
+ const panel = document.createElement('div');
17
+ panel.style.cssText =
18
+ `display:none;pointer-events:auto;width:260px;background:rgba(8,8,20,.78);border:1px solid rgba(255,255,255,.12);border-radius:14px;padding:8px;font:13px/1.5 ${LOBBY_UI_FONT};color:#fff;direction:rtl`;
19
+ const log = document.createElement('div');
20
+ log.style.cssText = 'height:140px;overflow:auto;margin-bottom:8px';
21
+ const row = document.createElement('div');
22
+ row.style.cssText = 'display:flex;gap:6px;align-items:center';
23
+ const input = document.createElement('input');
24
+ input.type = 'text';
25
+ input.maxLength = LOBBY_CHAT_MAX_LEN;
26
+ input.autocomplete = 'off';
27
+ input.placeholder = 'پیام به لابی…';
28
+ input.style.cssText =
29
+ `flex:1;min-width:0;border:1px solid rgba(255,255,255,.16);border-radius:10px;background:rgba(0,0,0,.28);color:#fff;padding:7px 9px;font:13px ${LOBBY_UI_FONT}`;
30
+ const send = document.createElement('button');
31
+ send.type = 'button';
32
+ send.title = 'ارسال';
33
+ send.setAttribute('aria-label', 'ارسال');
34
+ send.innerHTML = SEND_ICON;
35
+ send.style.cssText =
36
+ 'flex:0 0 42px;width:42px;height:36px;border:0;border-radius:10px;background:#7c3aed;color:#fff;cursor:pointer;display:grid;place-items:center;padding:0';
37
+ row.append(input, send);
38
+ panel.append(log, row);
39
+ const toast = document.createElement('button');
40
+ toast.type = 'button';
41
+ toast.style.cssText = [
42
+ 'display:none',
43
+ 'pointer-events:auto',
44
+ 'max-width:220px',
45
+ 'border:1px solid rgba(255,255,255,.14)',
46
+ 'border-radius:12px',
47
+ 'background:rgba(8,8,20,.78)',
48
+ 'color:#fff',
49
+ `font:12px/1.45 ${LOBBY_UI_FONT}`,
50
+ 'text-align:right',
51
+ 'padding:7px 10px',
52
+ 'cursor:pointer',
53
+ 'white-space:nowrap',
54
+ 'overflow:hidden',
55
+ 'text-overflow:ellipsis',
56
+ ].join(';');
57
+ const badge = document.createElement('span');
58
+ badge.style.cssText =
59
+ 'display:none;position:absolute;top:-4px;left:-4px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#ef4444;color:#fff;font:700 10px/16px Vazirmatn,Tahoma,sans-serif;text-align:center;pointer-events:none';
60
+ toggle.style.position = 'relative';
61
+ toggle.replaceChildren(icon, badge);
62
+ const root = document.createElement('div');
63
+ root.dataset.lobbyChat = '1';
64
+ mountChatChrome(root, toggle, panel, toast, canvas);
65
+ let unread = 0;
66
+ let toastTimer = 0;
67
+ const isOpen = () => panel.style.display !== 'none';
68
+ const setToggleActive = (active) => {
69
+ toggle.style.borderColor = active ? 'rgba(74,222,128,.45)' : 'rgba(255,255,255,.14)';
70
+ toggle.style.background = active ? 'rgba(20,83,45,.55)' : 'rgba(8,8,20,.55)';
71
+ icon.textContent = '💬';
72
+ };
73
+ const hideToast = () => {
74
+ toast.style.display = 'none';
75
+ if (toastTimer)
76
+ window.clearTimeout(toastTimer);
77
+ toastTimer = 0;
78
+ };
79
+ const setUnread = (n) => {
80
+ unread = n;
81
+ badge.textContent = n > 9 ? '۹+' : String(n);
82
+ badge.style.display = n > 0 ? 'block' : 'none';
83
+ };
84
+ const submit = () => {
85
+ if (lobby.sendChat(input.value))
86
+ input.value = '';
87
+ };
88
+ const open = () => {
89
+ panel.style.display = 'block';
90
+ setToggleActive(true);
91
+ hideToast();
92
+ setUnread(0);
93
+ input.focus();
94
+ };
95
+ const close = () => {
96
+ panel.style.display = 'none';
97
+ setToggleActive(false);
98
+ };
99
+ const blockScene = (e) => {
100
+ e.stopPropagation();
101
+ };
102
+ toggle.addEventListener('pointerdown', (e) => {
103
+ e.preventDefault();
104
+ e.stopPropagation();
105
+ if (isOpen())
106
+ close();
107
+ else
108
+ open();
109
+ });
110
+ toast.addEventListener('pointerdown', (e) => {
111
+ e.preventDefault();
112
+ e.stopPropagation();
113
+ open();
114
+ });
115
+ row.addEventListener('pointerdown', blockScene);
116
+ row.addEventListener('click', blockScene);
117
+ send.addEventListener('pointerdown', (e) => {
118
+ e.preventDefault();
119
+ e.stopPropagation();
120
+ submit();
121
+ });
122
+ input.addEventListener('keydown', (e) => {
123
+ if (e.key !== 'Enter')
124
+ return;
125
+ e.preventDefault();
126
+ e.stopPropagation();
127
+ submit();
128
+ });
129
+ const chatAnchor = document.getElementById('oyna-lobby-chat-anchor');
130
+ const syncAccess = () => {
131
+ const allowed = lobby.canUseChat();
132
+ if (chatAnchor)
133
+ chatAnchor.style.display = allowed ? '' : 'none';
134
+ else
135
+ root.style.display = allowed ? '' : 'none';
136
+ };
137
+ syncAccess();
138
+ const offConnected = lobby.on('connected', syncAccess);
139
+ const off = lobby.on('chat', ({ userId, displayName, username, text }) => {
140
+ const mine = userId === lobby.getUser().id;
141
+ const line = document.createElement('p');
142
+ line.style.margin = '0 0 6px';
143
+ line.style.wordBreak = 'break-word';
144
+ const who = document.createElement('b');
145
+ who.style.color = '#c4b5fd';
146
+ who.textContent = mine ? 'شما' : formatPlayerHandle(displayName, username);
147
+ line.append(who, document.createTextNode(`: ${text}`));
148
+ log.append(line);
149
+ while (log.childElementCount > 40)
150
+ log.firstElementChild?.remove();
151
+ log.scrollTop = log.scrollHeight;
152
+ if (isOpen())
153
+ return;
154
+ if (mine)
155
+ return;
156
+ const label = formatPlayerHandle(displayName, username);
157
+ toast.textContent = `${label}: ${text}`;
158
+ toast.style.display = 'block';
159
+ if (toastTimer)
160
+ window.clearTimeout(toastTimer);
161
+ toastTimer = window.setTimeout(hideToast, 4200);
162
+ setUnread(unread + 1);
163
+ });
164
+ return () => {
165
+ off();
166
+ offConnected();
167
+ hideToast();
168
+ toggle.remove();
169
+ root.remove();
170
+ };
171
+ }
172
+ function mountChatChrome(root, toggle, panel, toast, canvas) {
173
+ const shell = [
174
+ `z-index:30`,
175
+ `font:13px/1.5 ${LOBBY_UI_FONT}`,
176
+ 'color:#fff',
177
+ 'direction:rtl',
178
+ 'pointer-events:none',
179
+ ].join(';');
180
+ const toolbar = document.getElementById('oyna-lobby-hud__toolbar') ??
181
+ document.querySelector('.oyna-lobby-hud__toolbar');
182
+ const chatAnchor = document.getElementById('oyna-lobby-chat-anchor');
183
+ if (toolbar && chatAnchor) {
184
+ chatAnchor.replaceChildren(toggle);
185
+ root.style.cssText = [
186
+ 'position:absolute',
187
+ 'top:calc(100% + 8px)',
188
+ 'left:0',
189
+ 'display:flex',
190
+ 'flex-direction:column',
191
+ 'gap:8px',
192
+ 'align-items:flex-start',
193
+ shell,
194
+ ].join(';');
195
+ const iconRow = document.createElement('div');
196
+ iconRow.style.cssText = 'display:flex;align-items:center;gap:8px';
197
+ iconRow.append(toast);
198
+ root.append(iconRow, panel);
199
+ toolbar.append(root);
200
+ return;
201
+ }
202
+ const music = document.getElementById('oyna-lobby-music') || document.getElementById('music-btn');
203
+ const dummyChat = document.querySelector('.icon-col button[title="گفتگو"]');
204
+ dummyChat?.remove();
205
+ if (music?.parentElement?.classList.contains('icon-col')) {
206
+ music.insertAdjacentElement('afterend', toggle);
207
+ const col = music.parentElement;
208
+ const hud = col.parentElement ?? col;
209
+ root.style.cssText = [
210
+ 'position:absolute',
211
+ `left:${col.offsetLeft + col.offsetWidth + 8}px`,
212
+ `top:${col.offsetTop + toggle.offsetTop}px`,
213
+ shell,
214
+ ].join(';');
215
+ root.append(toast, panel);
216
+ hud.append(root);
217
+ return;
218
+ }
219
+ if (music?.parentElement) {
220
+ music.insertAdjacentElement('afterend', toggle);
221
+ root.style.cssText = [
222
+ 'position:absolute',
223
+ `top:calc(${music.offsetTop}px + ${music.offsetHeight}px + 8px)`,
224
+ `left:${music.offsetLeft}px`,
225
+ 'display:flex',
226
+ 'flex-direction:column',
227
+ 'gap:8px',
228
+ 'align-items:flex-start',
229
+ shell,
230
+ ].join(';');
231
+ const iconRow = document.createElement('div');
232
+ iconRow.style.cssText = 'display:flex;align-items:center;gap:8px';
233
+ iconRow.append(toast);
234
+ root.append(iconRow, panel);
235
+ music.parentElement.append(root);
236
+ return;
237
+ }
238
+ const host = canvas.parentElement ?? document.body;
239
+ if (getComputedStyle(host).position === 'static') {
240
+ host.style.position = 'relative';
241
+ }
242
+ root.style.cssText = [
243
+ 'position:absolute',
244
+ 'top:64px',
245
+ 'left:14px',
246
+ 'display:flex',
247
+ 'flex-direction:column',
248
+ 'gap:8px',
249
+ 'align-items:flex-start',
250
+ shell,
251
+ ].join(';');
252
+ const iconRow = document.createElement('div');
253
+ iconRow.style.cssText = 'display:flex;align-items:center;gap:8px';
254
+ iconRow.append(toggle, toast);
255
+ root.append(iconRow, panel);
256
+ host.append(root);
257
+ }
258
+ //# sourceMappingURL=lobby-chat-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-chat-ui.js","sourceRoot":"","sources":["../src/lobby-chat-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { AbstractMesh, Scene } from '@babylonjs/core';
2
+ export declare function syncCharacterObstacle(scene: Scene, rootName: string, x: number, z: number): void;
3
+ export declare function removeCharacterObstacle(scene: Scene, rootName: string): void;
4
+ /**
5
+ * Invisible world-space colliders for every lobby prop.
6
+ * Thin floors stay walk-through so the capsule does not hop; tall proxies block walking through objects.
7
+ */
8
+ export declare function applyLobbyCollisions(scene: Scene): void;
9
+ export declare function isSolidLobbyMesh(mesh: AbstractMesh): boolean;
10
+ //# sourceMappingURL=lobby-colliders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-colliders.d.ts","sourceRoot":"","sources":["../src/lobby-colliders.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA0H3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,QAEzF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAErE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,QAyHhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,WAUlD"}
@@ -0,0 +1,225 @@
1
+ import { MeshBuilder, StandardMaterial } from '@babylonjs/core';
2
+ /** Visuals the player should walk over / through (floors, signs, portal rings). */
3
+ function isWalkThroughVisual(name) {
4
+ if (!name || name.includes('nametag') || name.includes('-sign'))
5
+ return true;
6
+ if (name === 'local-player')
7
+ return false;
8
+ if (name.startsWith('local-player'))
9
+ return true;
10
+ if (/^path-\d+$/.test(name))
11
+ return true;
12
+ return [
13
+ 'room-portal-',
14
+ 'room-veil-',
15
+ 'room-sign-',
16
+ 'room-orbit-',
17
+ 'room-track-',
18
+ 'room-pad-',
19
+ 'room-inner-',
20
+ 'room-spire-',
21
+ 'plaza-pavement',
22
+ 'plaza-ring',
23
+ 'plaza-center',
24
+ 'grass-ground',
25
+ 'fountain-water',
26
+ 'fountain-bowl',
27
+ 'fountain-base',
28
+ 'fountain-column',
29
+ 'shop-window-',
30
+ 'shop-sign-',
31
+ 'shop-roof-',
32
+ 'path-curb-',
33
+ 'edge-tile-',
34
+ 'grid-floor',
35
+ 'spawn-plaza',
36
+ 'zone-',
37
+ 'portal-',
38
+ 'lamp-bulb-',
39
+ 'playground-slide-sign',
40
+ 'playground-trampoline-sign',
41
+ 'playground-slide-bolt-',
42
+ 'playground-slide-skirt',
43
+ 'playground-slide-brace',
44
+ 'playground-trampoline-ring',
45
+ 'playground-trampoline-ring-inner',
46
+ 'playground-trampoline-orb-',
47
+ 'playground-trampoline-base',
48
+ ].some((p) => name === p || name.startsWith(p));
49
+ }
50
+ function ghostMaterial(scene) {
51
+ let mat = scene.getMaterialByName('lobby-phys-ghost');
52
+ if (!mat) {
53
+ mat = new StandardMaterial('lobby-phys-ghost', scene);
54
+ mat.alpha = 0;
55
+ mat.disableDepthWrite = true;
56
+ mat.backFaceCulling = false;
57
+ }
58
+ return mat;
59
+ }
60
+ function stampCollider(mesh, scene) {
61
+ mesh.material = ghostMaterial(scene);
62
+ mesh.visibility = 0;
63
+ mesh.isVisible = true;
64
+ mesh.isPickable = true;
65
+ mesh.checkCollisions = true;
66
+ }
67
+ function ensureCylinder(scene, name, x, z, diameter, height, y) {
68
+ let block = scene.getMeshByName(name);
69
+ if (!block) {
70
+ block = MeshBuilder.CreateCylinder(name, { diameter, height, tessellation: 12 }, scene);
71
+ }
72
+ block.position.set(x, y, z);
73
+ stampCollider(block, scene);
74
+ return block;
75
+ }
76
+ function ensureBox(scene, name, x, y, z, width, height, depth, rotationY) {
77
+ let block = scene.getMeshByName(name);
78
+ if (!block) {
79
+ block = MeshBuilder.CreateBox(name, { width, height, depth }, scene);
80
+ }
81
+ block.position.set(x, y, z);
82
+ block.rotation.y = rotationY;
83
+ stampCollider(block, scene);
84
+ return block;
85
+ }
86
+ function abs(mesh) {
87
+ mesh.computeWorldMatrix(true);
88
+ return mesh.getAbsolutePosition();
89
+ }
90
+ function yawOf(mesh) {
91
+ mesh.computeWorldMatrix(true);
92
+ const q = mesh.absoluteRotationQuaternion;
93
+ if (q)
94
+ return q.toEulerAngles().y;
95
+ return mesh.rotation.y;
96
+ }
97
+ function localDepth(mesh) {
98
+ mesh.computeWorldMatrix(true);
99
+ return Math.max(mesh.getBoundingInfo().boundingBox.extendSize.z * 2, 1.6);
100
+ }
101
+ export function syncCharacterObstacle(scene, rootName, x, z) {
102
+ ensureCylinder(scene, `${rootName}-charcol`, x, z, 0.95, 1.95, 0.97);
103
+ }
104
+ export function removeCharacterObstacle(scene, rootName) {
105
+ scene.getMeshByName(`${rootName}-charcol`)?.dispose();
106
+ }
107
+ /**
108
+ * Invisible world-space colliders for every lobby prop.
109
+ * Thin floors stay walk-through so the capsule does not hop; tall proxies block walking through objects.
110
+ */
111
+ export function applyLobbyCollisions(scene) {
112
+ scene.collisionsEnabled = true;
113
+ ensureCylinder(scene, 'fountain-blocker', 0, 0, 5.1, 2.8, 1.4);
114
+ const snapshot = [...scene.meshes];
115
+ for (const mesh of snapshot) {
116
+ mesh.computeWorldMatrix(true);
117
+ }
118
+ for (const mesh of snapshot) {
119
+ const n = mesh.name;
120
+ const p = abs(mesh);
121
+ if (/^path-\d+$/.test(n)) {
122
+ const yaw = yawOf(mesh);
123
+ const depth = localDepth(mesh);
124
+ const sx = Math.cos(yaw);
125
+ const sz = -Math.sin(yaw);
126
+ for (const [side, s] of [
127
+ ['L', -1],
128
+ ['R', 1],
129
+ ]) {
130
+ ensureBox(scene, `${n}-rail-${side}`, p.x + sx * s * 1.32, 0.95, p.z + sz * s * 1.32, 0.62, 1.9, depth, yaw);
131
+ }
132
+ }
133
+ if (/^tree-\d+$/.test(n)) {
134
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 2.4, 3.4, 1.7);
135
+ }
136
+ if (/^bush-\d+$/.test(n)) {
137
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 1.25, 1.2, 0.6);
138
+ }
139
+ if (n.startsWith('shop-building-')) {
140
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 6.0, 3.8, 1.9);
141
+ }
142
+ if (n.startsWith('lamp-pole-')) {
143
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 0.62, 3.5, 1.75);
144
+ }
145
+ if (n.startsWith('rock-')) {
146
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 1.2, 1.05, 0.52);
147
+ }
148
+ if (/^bench-\d+$/.test(n)) {
149
+ ensureBox(scene, `${n}-phys`, p.x, 0.55, p.z, 1.8, 1.1, 0.7, yawOf(mesh));
150
+ }
151
+ if (n.startsWith('room-col-') || n.startsWith('room-dual-')) {
152
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 0.8, 2.9, 1.45);
153
+ }
154
+ if (n.startsWith('room-goo-')) {
155
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 1.35, 1.3, 0.65);
156
+ }
157
+ if (n.startsWith('room-ice-')) {
158
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 1.45, 1.65, 0.82);
159
+ }
160
+ if (/^pillar-\d+$/.test(n)) {
161
+ ensureBox(scene, `${n}-phys`, p.x, 2, p.z, 1.5, 4.2, 1.5, 0);
162
+ }
163
+ if (n.startsWith('playground-slide-leg-')) {
164
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 0.42, 2.8, p.y);
165
+ }
166
+ if (n.startsWith('playground-slide-deck-rail-') || n.startsWith('playground-slide-stair-rail-')) {
167
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 0.28, 1.4, p.y);
168
+ }
169
+ if (n === 'playground-trampoline-base') {
170
+ ensureCylinder(scene, `${n}-phys`, p.x, p.z, 4.8, 0.8, 0.4);
171
+ }
172
+ if (n.endsWith('-bodycol')) {
173
+ const rootName = n.slice(0, -'-bodycol'.length);
174
+ if (!rootName.startsWith('remote-') && !rootName.startsWith('local-player')) {
175
+ syncCharacterObstacle(scene, rootName, p.x, p.z);
176
+ }
177
+ }
178
+ }
179
+ for (const mesh of scene.meshes) {
180
+ const n = mesh.name;
181
+ if (n === 'ground' || n === 'local-player') {
182
+ mesh.checkCollisions = true;
183
+ continue;
184
+ }
185
+ if (n.endsWith('-phys') || n.endsWith('-charcol') || n.includes('-rail-') || n === 'fountain-blocker') {
186
+ stampCollider(mesh, scene);
187
+ continue;
188
+ }
189
+ if (isWalkThroughVisual(n) || n.endsWith('-bodycol')) {
190
+ mesh.checkCollisions = false;
191
+ }
192
+ if (n === 'ground' ||
193
+ n === 'grass-ground' ||
194
+ n === 'plaza-pavement' ||
195
+ /^path-\d+$/.test(n) ||
196
+ n === 'playground-slide-deck' ||
197
+ n === 'playground-slide-landing' ||
198
+ n === 'playground-slide-stair-ramp' ||
199
+ n === 'playground-slide-bed' ||
200
+ n === 'playground-trampoline-pad' ||
201
+ n.startsWith('playground-slide-step-') ||
202
+ n.startsWith('room-pad-') ||
203
+ n.startsWith('room-inner-')) {
204
+ mesh.isPickable = true;
205
+ }
206
+ }
207
+ const ground = scene.getMeshByName('ground');
208
+ if (ground) {
209
+ ground.checkCollisions = true;
210
+ ground.isPickable = true;
211
+ ground.isVisible = true;
212
+ ground.visibility = 1;
213
+ }
214
+ }
215
+ export function isSolidLobbyMesh(mesh) {
216
+ const n = mesh.name;
217
+ if (!n || isWalkThroughVisual(n))
218
+ return false;
219
+ return (n === 'ground' ||
220
+ n === 'fountain-blocker' ||
221
+ n.endsWith('-phys') ||
222
+ n.endsWith('-charcol') ||
223
+ n.includes('-rail-'));
224
+ }
225
+ //# sourceMappingURL=lobby-colliders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-colliders.js","sourceRoot":"","sources":["../src/lobby-colliders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PlatformLobby } from './platform-lobby';
2
+ import { type LobbyUiMessages } from './lobby-ui-i18n';
3
+ /**
4
+ * Full-screen connection status overlay.
5
+ * Shows when disconnected / reconnecting / reconnect failed.
6
+ */
7
+ export declare function attachLobbyConnectionUi(lobby: PlatformLobby, messages?: Partial<LobbyUiMessages>): () => void;
8
+ //# sourceMappingURL=lobby-connection-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-connection-ui.d.ts","sourceRoot":"","sources":["../src/lobby-connection-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAClC,MAAM,IAAI,CAuEZ"}
@@ -0,0 +1,68 @@
1
+ import { LOBBY_UI_FONT, ensureLobbyPersianFont } from './lobby-font';
2
+ import { resolveLobbyUiMessages } from './lobby-ui-i18n';
3
+ /**
4
+ * Full-screen connection status overlay.
5
+ * Shows when disconnected / reconnecting / reconnect failed.
6
+ */
7
+ export function attachLobbyConnectionUi(lobby, messages) {
8
+ void ensureLobbyPersianFont();
9
+ const copy = resolveLobbyUiMessages(lobby.getUiLocale(), messages);
10
+ const overlay = document.createElement('div');
11
+ overlay.id = 'oyna-lobby-connection-overlay';
12
+ overlay.style.cssText = [
13
+ 'display:none',
14
+ 'position:fixed',
15
+ 'inset:0',
16
+ 'z-index:9999',
17
+ 'background:rgba(0,0,0,.72)',
18
+ 'color:#fff',
19
+ `font:700 16px/1.5 ${LOBBY_UI_FONT}`,
20
+ 'direction:rtl',
21
+ 'text-align:center',
22
+ 'place-items:center',
23
+ 'pointer-events:auto',
24
+ ].join(';');
25
+ const box = document.createElement('div');
26
+ box.style.cssText =
27
+ 'background:rgba(8,8,20,.85);border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:24px 32px;max-width:320px';
28
+ const msg = document.createElement('p');
29
+ msg.style.cssText = 'margin:0 0 8px;font-size:16px';
30
+ const sub = document.createElement('p');
31
+ sub.style.cssText = 'margin:0;font-size:13px;opacity:.7';
32
+ box.append(msg, sub);
33
+ overlay.append(box);
34
+ document.body.append(overlay);
35
+ let failed = false;
36
+ const show = (text, detail) => {
37
+ msg.textContent = text;
38
+ sub.textContent = detail;
39
+ overlay.style.display = 'grid';
40
+ };
41
+ const hide = () => {
42
+ overlay.style.display = 'none';
43
+ failed = false;
44
+ };
45
+ const offDisconnected = lobby.on('disconnected', () => {
46
+ if (failed)
47
+ return;
48
+ show(copy.connectionLost, copy.connectionReconnecting);
49
+ });
50
+ const offReconnecting = lobby.on('reconnecting', ({ attempt }) => {
51
+ show(copy.connectionLost, `${copy.connectionRetry} ${attempt}…`);
52
+ });
53
+ const offReconnectFailed = lobby.on('reconnectFailed', () => {
54
+ failed = true;
55
+ show(copy.connectionLost, copy.connectionRetry);
56
+ });
57
+ const offConnected = lobby.on('connected', () => {
58
+ hide();
59
+ });
60
+ return () => {
61
+ offDisconnected();
62
+ offReconnecting();
63
+ offReconnectFailed();
64
+ offConnected();
65
+ overlay.remove();
66
+ };
67
+ }
68
+ //# sourceMappingURL=lobby-connection-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-connection-ui.js","sourceRoot":"","sources":["../src/lobby-connection-ui.ts"],"names":[],"mappings":"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"}