@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,18 @@
1
+ export const DEFAULT_LOBBY_SPAWN = {
2
+ center: { x: 0, y: 0, z: 4 },
3
+ radius: 3.25,
4
+ slots: 16,
5
+ };
6
+ /** Spread players around a ring so simultaneous joins do not stack. */
7
+ export function lobbySpawnPose(slotIndex, layout = {}) {
8
+ const { center, radius, slots } = { ...DEFAULT_LOBBY_SPAWN, ...layout };
9
+ const slot = ((slotIndex % slots) + slots) % slots;
10
+ const angle = (slot / slots) * Math.PI * 2;
11
+ const x = center.x + Math.sin(angle) * radius;
12
+ const z = center.z + Math.cos(angle) * radius;
13
+ return {
14
+ position: { x, y: center.y, z },
15
+ rotationY: Math.atan2(center.x - x, center.z - z),
16
+ };
17
+ }
18
+ //# sourceMappingURL=lobby-spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-spawn.js","sourceRoot":"","sources":["../src/lobby-spawn.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC5B,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,EAAE;CACV,CAAC;AAOF,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,SAA2B,EAAE;IAC7E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC9C,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;QAC/B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type LobbyUiLocale = 'fa' | 'en';
2
+ export type LobbyUiMessages = {
3
+ presenceJoined: string;
4
+ presenceLeft: string;
5
+ connectionLost: string;
6
+ connectionRetry: string;
7
+ connectionReconnecting: string;
8
+ orientationHint: string;
9
+ };
10
+ export declare function resolveLobbyUiMessages(locale?: LobbyUiLocale, overrides?: Partial<LobbyUiMessages>): LobbyUiMessages;
11
+ //# sourceMappingURL=lobby-ui-i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-ui-i18n.d.ts","sourceRoot":"","sources":["../src/lobby-ui-i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAsBF,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,aAAoB,EAC5B,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACnC,eAAe,CAEjB"}
@@ -0,0 +1,21 @@
1
+ const FA = {
2
+ presenceJoined: 'وارد لابی شد',
3
+ presenceLeft: 'از لابی خارج شد',
4
+ connectionLost: 'اتصال قطع شد',
5
+ connectionRetry: 'تلاش مجدد',
6
+ connectionReconnecting: 'در حال اتصال مجدد…',
7
+ orientationHint: 'گوشیت رو افقی بگیر',
8
+ };
9
+ const EN = {
10
+ presenceJoined: 'joined the lobby',
11
+ presenceLeft: 'left the lobby',
12
+ connectionLost: 'Connection lost',
13
+ connectionRetry: 'Retry',
14
+ connectionReconnecting: 'Reconnecting…',
15
+ orientationHint: 'Rotate your device to landscape',
16
+ };
17
+ const LOCALES = { fa: FA, en: EN };
18
+ export function resolveLobbyUiMessages(locale = 'fa', overrides) {
19
+ return { ...LOCALES[locale] ?? FA, ...overrides };
20
+ }
21
+ //# sourceMappingURL=lobby-ui-i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-ui-i18n.js","sourceRoot":"","sources":["../src/lobby-ui-i18n.ts"],"names":[],"mappings":"AAWA,MAAM,EAAE,GAAoB;IAC1B,cAAc,EAAE,cAAc;IAC9B,YAAY,EAAE,iBAAiB;IAC/B,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,WAAW;IAC5B,sBAAsB,EAAE,oBAAoB;IAC5C,eAAe,EAAE,oBAAoB;CACtC,CAAC;AAEF,MAAM,EAAE,GAAoB;IAC1B,cAAc,EAAE,kBAAkB;IAClC,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,iBAAiB;IACjC,eAAe,EAAE,OAAO;IACxB,sBAAsB,EAAE,eAAe;IACvC,eAAe,EAAE,iCAAiC;CACnD,CAAC;AAEF,MAAM,OAAO,GAA2C,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE3E,MAAM,UAAU,sBAAsB,CACpC,SAAwB,IAAI,EAC5B,SAAoC;IAEpC,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC;AACpD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PlatformLobby } from './platform-lobby';
2
+ export declare function attachLobbyVoiceUi(lobby: PlatformLobby): () => void;
3
+ //# sourceMappingURL=lobby-voice-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-voice-ui.d.ts","sourceRoot":"","sources":["../src/lobby-voice-ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAmBtD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,IAAI,CAyFnE"}
@@ -0,0 +1,105 @@
1
+ import { LOBBY_UI_FONT, ensureLobbyPersianFont } from './lobby-font';
2
+ 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}`;
3
+ function voiceErrorMessage(err) {
4
+ const raw = err instanceof Error ? err.message : String(err ?? '');
5
+ const lower = raw.toLowerCase();
6
+ if (lower.includes('permission') || lower.includes('notallowed') || lower.includes('denied')) {
7
+ return 'دسترسی میکروفون مسدود است — اجازه میکروفون را در مرورگر فعال کنید';
8
+ }
9
+ if (lower.includes('not supported') || lower.includes('mediaDevices')) {
10
+ return 'این مرورگر از میکروفون پشتیبانی نمی‌کند';
11
+ }
12
+ return raw.trim() || 'فعال‌سازی ویس ممکن نیست';
13
+ }
14
+ export function attachLobbyVoiceUi(lobby) {
15
+ void ensureLobbyPersianFont();
16
+ const voice = lobby.getVoiceChat();
17
+ if (!voice)
18
+ return () => undefined;
19
+ const anchor = document.getElementById('oyna-lobby-voice-anchor');
20
+ if (!anchor)
21
+ return () => undefined;
22
+ const wrap = document.createElement('div');
23
+ wrap.style.cssText = 'position:relative;width:42px;height:42px;pointer-events:auto';
24
+ const mic = document.createElement('button');
25
+ mic.type = 'button';
26
+ mic.title = 'ویس';
27
+ mic.setAttribute('aria-label', 'ویس');
28
+ mic.style.cssText = ICON_BTN;
29
+ const mode = document.createElement('select');
30
+ mode.title = 'محدوده ویس';
31
+ mode.style.cssText =
32
+ `position:absolute;left:calc(100% + 6px);top:0;height:42px;min-width:88px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:rgba(8,8,20,.55);color:#fff;font:12px ${LOBBY_UI_FONT};padding:0 8px;cursor:pointer;pointer-events:auto`;
33
+ mode.innerHTML = [
34
+ '<option value="friends">دوستان</option>',
35
+ '<option value="all">همه</option>',
36
+ ].join('');
37
+ const sync = () => {
38
+ const state = voice.getState();
39
+ mode.value = state.mode;
40
+ mode.disabled = state.active;
41
+ if (!state.active) {
42
+ mic.textContent = '🎙️';
43
+ mic.title = 'روشن کردن ویس';
44
+ mic.style.borderColor = 'rgba(255,255,255,.14)';
45
+ mic.style.background = 'rgba(8,8,20,.55)';
46
+ return;
47
+ }
48
+ mic.textContent = state.muted ? '🔇' : '🎤';
49
+ mic.title = state.muted ? 'میکروفون خاموش — کلیک برای روشن' : 'ویس روشن — کلیک برای قطع';
50
+ mic.style.borderColor = state.muted ? 'rgba(248,113,113,.45)' : 'rgba(74,222,128,.45)';
51
+ mic.style.background = state.muted ? 'rgba(127,29,29,.55)' : 'rgba(20,83,45,.55)';
52
+ };
53
+ mic.addEventListener('click', async (e) => {
54
+ if (e.button !== 0)
55
+ return;
56
+ e.preventDefault();
57
+ e.stopPropagation();
58
+ const state = voice.getState();
59
+ try {
60
+ if (!lobby.canUseVoice()) {
61
+ showVoiceToast('دسترسی به ویس لابی برای شما فعال نیست');
62
+ return;
63
+ }
64
+ if (!state.active) {
65
+ await voice.enable(mode.value);
66
+ return;
67
+ }
68
+ await voice.disable();
69
+ }
70
+ catch (err) {
71
+ showVoiceToast(voiceErrorMessage(err));
72
+ }
73
+ });
74
+ mode.addEventListener('change', async () => {
75
+ try {
76
+ await voice.setMode(mode.value);
77
+ }
78
+ catch (err) {
79
+ showVoiceToast(voiceErrorMessage(err));
80
+ }
81
+ });
82
+ wrap.append(mic, mode);
83
+ anchor.replaceChildren(wrap);
84
+ const syncAccess = () => {
85
+ anchor.style.display = lobby.canUseVoice() ? '' : 'none';
86
+ };
87
+ syncAccess();
88
+ const offConnected = lobby.on('connected', syncAccess);
89
+ const off = voice.onStateChange(sync);
90
+ sync();
91
+ return () => {
92
+ off();
93
+ offConnected();
94
+ anchor.replaceChildren();
95
+ };
96
+ }
97
+ function showVoiceToast(text, ms = 2600) {
98
+ const toast = document.getElementById('oyna-lobby-toast');
99
+ if (!toast)
100
+ return;
101
+ toast.textContent = text;
102
+ toast.classList.add('is-open');
103
+ window.setTimeout(() => toast.classList.remove('is-open'), ms);
104
+ }
105
+ //# sourceMappingURL=lobby-voice-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby-voice-ui.js","sourceRoot":"","sources":["../src/lobby-voice-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { AbstractMesh, ArcRotateCamera, Scene, TransformNode } from '@babylonjs/core';
2
+ import type { LobbyAnimationState } from './protocol';
3
+ import { AvatarInstance } from './avatar-instance';
4
+ import type { PlatformLobbyConfig, Vector3 as Vec3 } from './types';
5
+ import type { LobbyMusic } from './lobby-music';
6
+ export declare class LocalPlayerController {
7
+ private scene;
8
+ private getCamera;
9
+ private codes;
10
+ private stickX;
11
+ private stickZ;
12
+ private sprintHeld;
13
+ private jumpQueued;
14
+ private jumpHeldPointer;
15
+ private jumpHeldKey;
16
+ private jumpLock;
17
+ private yaw;
18
+ private hVel;
19
+ private vy;
20
+ private grounded;
21
+ private standY;
22
+ private animation;
23
+ private slideActive;
24
+ private slideT;
25
+ private slideDuration;
26
+ private slidePath;
27
+ private onSlideComplete;
28
+ private readonly walkSpeed;
29
+ private readonly runMultiplier;
30
+ private readonly animator;
31
+ private readonly avatar;
32
+ private audio;
33
+ private disposed;
34
+ private spawn;
35
+ private ignoreMeshesCache;
36
+ constructor(avatar: AvatarInstance | TransformNode, spawn: Vec3, scene: Scene, getCamera: () => ArcRotateCamera, config?: PlatformLobbyConfig);
37
+ /** Back-compat: controllers historically exposed the Babylon root node. */
38
+ get root(): TransformNode;
39
+ setStick(x: number, z: number): void;
40
+ setSounds(audio: LobbyMusic): void;
41
+ setSprint(on: boolean): void;
42
+ setJumpHeld(on: boolean): void;
43
+ jump(): void;
44
+ teleportTo(pos: Vec3, rotationY?: number): void;
45
+ isSlideActive(): boolean;
46
+ isGrounded(): boolean;
47
+ getVerticalVelocity(): number;
48
+ launchBoost(velocity: number): void;
49
+ startSlide(path: Vec3[], duration: number, onComplete?: () => void): void;
50
+ private finishSlide;
51
+ private updateSlide;
52
+ private onKeyDown;
53
+ private onKeyUp;
54
+ private onBlur;
55
+ update(dt: number): {
56
+ position: {
57
+ x: number;
58
+ y: number;
59
+ z: number;
60
+ };
61
+ rotationY: number;
62
+ animation: LobbyAnimationState;
63
+ };
64
+ private isWalkableFloor;
65
+ private refreshGrounded;
66
+ private syncVisualYaw;
67
+ getState(): {
68
+ position: {
69
+ x: number;
70
+ y: number;
71
+ z: number;
72
+ };
73
+ rotationY: number;
74
+ animation: LobbyAnimationState;
75
+ };
76
+ getIgnoreMeshes(): AbstractMesh[];
77
+ setPosition(pos: Vec3): void;
78
+ dispose(): void;
79
+ }
80
+ //# sourceMappingURL=local-player-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-player-controller.d.ts","sourceRoot":"","sources":["../src/local-player-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAQ,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA0ChD,qBAAa,qBAAqB;IAgC9B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IAhCnB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,iBAAiB,CAA+B;gBAGtD,MAAM,EAAE,cAAc,GAAG,aAAa,EACtC,KAAK,EAAE,IAAI,EACH,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,eAAe,EACxC,MAAM,GAAE,mBAAwB;IAkBlC,2EAA2E;IAC3E,IAAI,IAAI,IAAI,aAAa,CAExB;IAED,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAU7B,SAAS,CAAC,KAAK,EAAE,UAAU;IAI3B,SAAS,CAAC,EAAE,EAAE,OAAO;IAIrB,WAAW,CAAC,EAAE,EAAE,OAAO;IAKvB,IAAI;IAKJ,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM;IAexC,aAAa;IAIb,UAAU;IAIV,mBAAmB;IAInB,WAAW,CAAC,QAAQ,EAAE,MAAM;IAS5B,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI;IAuBlE,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,SAAS,CAcf;IAEF,OAAO,CAAC,OAAO,CAGb;IAEF,OAAO,CAAC,MAAM,CAQZ;IAEF,MAAM,CAAC,EAAE,EAAE,MAAM;;;;;;;;;IAkHjB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,aAAa;IAOrB,QAAQ;;;;;;;;;IASR,eAAe,IAAI,YAAY,EAAE;IAejC,WAAW,CAAC,GAAG,EAAE,IAAI;IAIrB,OAAO;CAMR"}