@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,182 @@
1
+ import { io } from 'socket.io-client';
2
+ import { LOBBY_PROTOCOL_VERSION } from './protocol';
3
+ export class NetworkClient {
4
+ wsUrl;
5
+ roomId;
6
+ sessionToken;
7
+ handlers;
8
+ connectOptions;
9
+ socket = null;
10
+ moveSeq = 0;
11
+ reconnectAttempts = 0;
12
+ maxReconnectAttempts = 8;
13
+ constructor(wsUrl, roomId, sessionToken, handlers = {}, connectOptions = {}) {
14
+ this.wsUrl = wsUrl;
15
+ this.roomId = roomId;
16
+ this.sessionToken = sessionToken;
17
+ this.handlers = handlers;
18
+ this.connectOptions = connectOptions;
19
+ }
20
+ connect() {
21
+ const url = this.wsUrl.replace(/\/lobby\/?$/, '');
22
+ this.socket = io(`${url}/lobby`, {
23
+ transports: ['websocket'],
24
+ query: {
25
+ sessionToken: this.sessionToken,
26
+ roomId: this.roomId,
27
+ protocolVersion: LOBBY_PROTOCOL_VERSION,
28
+ ...(this.connectOptions.strictRoom ? { strictRoom: '1' } : {}),
29
+ },
30
+ reconnection: true,
31
+ reconnectionAttempts: this.maxReconnectAttempts,
32
+ reconnectionDelay: 1000,
33
+ reconnectionDelayMax: 8000,
34
+ });
35
+ this.socket.on('connect', () => {
36
+ this.reconnectAttempts = 0;
37
+ this.handlers.onConnected?.();
38
+ });
39
+ this.socket.on('disconnect', () => {
40
+ this.handlers.onDisconnected?.();
41
+ });
42
+ this.socket.on('message', (msg) => this.handleServerMessage(msg));
43
+ this.socket.io.on('reconnect_attempt', (attempt) => {
44
+ this.reconnectAttempts = attempt;
45
+ this.handlers.onReconnecting?.(attempt);
46
+ });
47
+ this.socket.io.on('reconnect_failed', () => {
48
+ this.handlers.onReconnectFailed?.();
49
+ });
50
+ }
51
+ handleServerMessage(msg) {
52
+ switch (msg.type) {
53
+ case 'lobby:welcome':
54
+ this.handlers.onWelcome?.(msg.self, msg.players, {
55
+ friendUserIds: msg.friendUserIds,
56
+ voicePeers: msg.voicePeers,
57
+ lobbyFeatures: msg.lobbyFeatures,
58
+ });
59
+ break;
60
+ case 'lobby:player:joined':
61
+ this.handlers.onPlayerJoined?.(msg.player);
62
+ break;
63
+ case 'lobby:player:left':
64
+ this.handlers.onPlayerLeft?.({
65
+ userId: msg.userId,
66
+ username: msg.username,
67
+ displayName: msg.displayName,
68
+ });
69
+ break;
70
+ case 'lobby:player:moved':
71
+ this.handlers.onPlayerMoved?.(msg);
72
+ break;
73
+ case 'lobby:players:moved':
74
+ this.handlers.onPlayersMoved?.(msg.moves, msg.serverTime);
75
+ break;
76
+ case 'lobby:player:emote':
77
+ this.handlers.onPlayerEmote?.(msg.userId, msg.emote);
78
+ break;
79
+ case 'lobby:chat':
80
+ this.handlers.onChat?.(msg);
81
+ break;
82
+ case 'lobby:data':
83
+ this.handlers.onData?.(msg);
84
+ break;
85
+ case 'lobby:voice:state':
86
+ this.handlers.onVoiceState?.(msg.peers, msg.friendUserIds);
87
+ break;
88
+ case 'lobby:voice:joined':
89
+ this.handlers.onVoiceJoined?.(msg.peer);
90
+ break;
91
+ case 'lobby:voice:left':
92
+ this.handlers.onVoiceLeft?.(msg.userId);
93
+ break;
94
+ case 'lobby:voice:mute':
95
+ this.handlers.onVoiceMute?.(msg.userId, msg.muted);
96
+ break;
97
+ case 'lobby:voice:offer':
98
+ this.handlers.onVoiceOffer?.(msg.fromUserId, msg.sdp);
99
+ break;
100
+ case 'lobby:voice:answer':
101
+ this.handlers.onVoiceAnswer?.(msg.fromUserId, msg.sdp);
102
+ break;
103
+ case 'lobby:voice:ice':
104
+ this.handlers.onVoiceIce?.(msg.fromUserId, msg.candidate);
105
+ break;
106
+ case 'lobby:error':
107
+ this.handlers.onError?.(msg.code, msg.message);
108
+ break;
109
+ default:
110
+ break;
111
+ }
112
+ }
113
+ sendMove(payload) {
114
+ if (!this.socket?.connected)
115
+ return;
116
+ this.moveSeq += 1;
117
+ const msg = {
118
+ type: 'lobby:move',
119
+ ...payload,
120
+ seq: this.moveSeq,
121
+ };
122
+ this.socket.emit('message', msg);
123
+ }
124
+ sendEmote(emote) {
125
+ if (!this.socket?.connected)
126
+ return;
127
+ this.socket.emit('message', { type: 'lobby:emote', emote });
128
+ }
129
+ sendChat(text) {
130
+ if (!this.socket?.connected)
131
+ return;
132
+ this.socket.emit('message', { type: 'lobby:chat', text });
133
+ }
134
+ sendData(channel, payload) {
135
+ if (!this.socket?.connected)
136
+ return;
137
+ this.socket.emit('message', { type: 'lobby:data', channel, payload });
138
+ }
139
+ sendVoiceJoin(mode) {
140
+ if (!this.socket?.connected)
141
+ return;
142
+ this.socket.emit('message', { type: 'lobby:voice:join', mode });
143
+ }
144
+ sendVoiceLeave() {
145
+ if (!this.socket?.connected)
146
+ return;
147
+ this.socket.emit('message', { type: 'lobby:voice:leave' });
148
+ }
149
+ sendVoiceMute(muted) {
150
+ if (!this.socket?.connected)
151
+ return;
152
+ this.socket.emit('message', { type: 'lobby:voice:mute', muted });
153
+ }
154
+ sendVoiceOffer(toUserId, sdp) {
155
+ if (!this.socket?.connected)
156
+ return;
157
+ this.socket.emit('message', { type: 'lobby:voice:offer', toUserId, sdp });
158
+ }
159
+ sendVoiceAnswer(toUserId, sdp) {
160
+ if (!this.socket?.connected)
161
+ return;
162
+ this.socket.emit('message', { type: 'lobby:voice:answer', toUserId, sdp });
163
+ }
164
+ sendVoiceIce(toUserId, candidate) {
165
+ if (!this.socket?.connected)
166
+ return;
167
+ this.socket.emit('message', { type: 'lobby:voice:ice', toUserId, candidate });
168
+ }
169
+ ping() {
170
+ if (!this.socket?.connected)
171
+ return;
172
+ this.socket.emit('message', { type: 'lobby:ping' });
173
+ }
174
+ disconnect() {
175
+ this.socket?.disconnect();
176
+ this.socket = null;
177
+ }
178
+ isConnected() {
179
+ return Boolean(this.socket?.connected);
180
+ }
181
+ }
182
+ //# sourceMappingURL=network-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-client.js","sourceRoot":"","sources":["../src/network-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { PlatformInitMessage, SdkInitPayload } from './platform-types';
2
+ declare global {
3
+ interface Window {
4
+ __OYNA360_PLATFORM_INIT__?: PlatformInitMessage;
5
+ }
6
+ }
7
+ export declare class PlatformBridge {
8
+ static waitForInit(timeoutMs?: number): Promise<PlatformInitMessage>;
9
+ static fromInit(init: SdkInitPayload | PlatformInitMessage): SdkInitPayload;
10
+ static createDevInit(options: {
11
+ mockUser?: Partial<SdkInitPayload['user']>;
12
+ mockAvatar?: Partial<SdkInitPayload['avatar']>;
13
+ gameSlug?: string;
14
+ gameName?: string;
15
+ }): SdkInitPayload;
16
+ }
17
+ //# sourceMappingURL=platform-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-bridge.d.ts","sourceRoot":"","sources":["../src/platform-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI5E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,yBAAyB,CAAC,EAAE,mBAAmB,CAAC;KACjD;CACF;AAYD,qBAAa,cAAc;IACzB,MAAM,CAAC,WAAW,CAAC,SAAS,SAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4C7E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,mBAAmB,GAAG,cAAc;IAc3E,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE;QAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,cAAc;CA0BnB"}
@@ -0,0 +1,90 @@
1
+ const INIT_TIMEOUT_MS = 15000;
2
+ if (typeof window !== 'undefined') {
3
+ window.addEventListener('message', (event) => {
4
+ const data = event.data;
5
+ if (!data || typeof data !== 'object')
6
+ return;
7
+ if (data.type === 'platform:init') {
8
+ window.__OYNA360_PLATFORM_INIT__ = data;
9
+ }
10
+ });
11
+ }
12
+ export class PlatformBridge {
13
+ static waitForInit(timeoutMs = INIT_TIMEOUT_MS) {
14
+ return new Promise((resolve, reject) => {
15
+ // Direct Development: game-sdk may have already published platform:init on this window.
16
+ if (window.__OYNA360_PLATFORM_INIT__) {
17
+ resolve(window.__OYNA360_PLATFORM_INIT__);
18
+ return;
19
+ }
20
+ const inIframe = (() => {
21
+ try {
22
+ return window.parent !== window;
23
+ }
24
+ catch {
25
+ return true;
26
+ }
27
+ })();
28
+ const timer = setTimeout(() => {
29
+ window.removeEventListener('message', onMessage);
30
+ reject(new Error(inIframe
31
+ ? 'Timed out waiting for platform:init'
32
+ : 'Timed out waiting for platform:init — call PlatformSDK.init() first (Direct Development Mode)'));
33
+ }, timeoutMs);
34
+ const onMessage = (event) => {
35
+ const data = event.data;
36
+ if (!data || typeof data !== 'object')
37
+ return;
38
+ if (data.type !== 'platform:init')
39
+ return;
40
+ clearTimeout(timer);
41
+ window.removeEventListener('message', onMessage);
42
+ resolve(data);
43
+ };
44
+ window.addEventListener('message', onMessage);
45
+ if (inIframe) {
46
+ window.parent.postMessage({ type: 'platform:lobby:ready' }, '*');
47
+ }
48
+ });
49
+ }
50
+ static fromInit(init) {
51
+ if ('type' in init && init.type === 'platform:init') {
52
+ return {
53
+ session: init.session,
54
+ user: init.user,
55
+ game: init.game,
56
+ avatar: init.avatar,
57
+ avatarBases: init.avatarBases,
58
+ lobby: init.lobby,
59
+ };
60
+ }
61
+ return init;
62
+ }
63
+ static createDevInit(options) {
64
+ return {
65
+ session: { id: 'dev-session', token: 'dev-token' },
66
+ user: {
67
+ id: 'dev-user',
68
+ username: 'dev_player',
69
+ displayName: 'Dev Player',
70
+ avatarUrl: null,
71
+ ...options.mockUser,
72
+ },
73
+ game: {
74
+ slug: options.gameSlug ?? 'dev-game',
75
+ name: options.gameName ?? 'Dev Game',
76
+ },
77
+ avatar: {
78
+ presetId: 'dev-preset',
79
+ presetKey: options.mockAvatar?.presetKey ?? 'default-1',
80
+ presetKind: options.mockAvatar?.presetKind ?? 'procedural',
81
+ customConfig: options.mockAvatar?.customConfig ?? { bodyColor: '#6366f1' },
82
+ },
83
+ lobby: {
84
+ wsUrl: 'http://localhost:3001/lobby',
85
+ roomId: `game:${options.gameSlug ?? 'dev-game'}`,
86
+ },
87
+ };
88
+ }
89
+ }
90
+ //# sourceMappingURL=platform-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-bridge.js","sourceRoot":"","sources":["../src/platform-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import '@babylonjs/loaders/glTF';
2
+ import type { SdkInitPayload } from './platform-types';
3
+ import { type LobbyEmoteKind, type LobbyPlayerState, type LobbyFeatureFlags } from './protocol';
4
+ import { type AvatarBaseDef } from './avatar-asset-manager';
5
+ import { LocalPlayerController } from './local-player-controller';
6
+ import type { LobbyPlugin } from './types';
7
+ import { type StarterLayoutConfig } from './starter-layout';
8
+ import { type PlazaLayoutConfig } from './plaza-layout';
9
+ import { LobbyVoiceChat } from './voice-chat';
10
+ import type { LobbyEventMap, LobbyEventName, LobbyPortalOptions, LobbyZoneOptions, PlatformLobbyConfig, PlatformLobbyCreateOptions, PlatformLobbyDevOptions, Vector3 } from './types';
11
+ export declare class PlatformLobby {
12
+ private readonly canvas;
13
+ private readonly strictRoom;
14
+ private readonly init;
15
+ private readonly config;
16
+ private readonly roomId;
17
+ private readonly wsUrl;
18
+ private sceneManager;
19
+ private localAvatar;
20
+ private localController;
21
+ private remotePlayers;
22
+ private network;
23
+ private zoneManager;
24
+ private portalManager;
25
+ private plugins;
26
+ private overlayHandlers;
27
+ private listeners;
28
+ private lastNetworkSend;
29
+ private destroyed;
30
+ private ready;
31
+ private playground;
32
+ private music;
33
+ private chatDispose;
34
+ private presenceDispose;
35
+ private voiceDispose;
36
+ private connectionDispose;
37
+ private orientationDispose;
38
+ private voiceChat;
39
+ private lobbyFeatures;
40
+ private resizeHandler;
41
+ private constructor();
42
+ static create(options: PlatformLobbyCreateOptions): Promise<PlatformLobby>;
43
+ static createFromPlatform(canvas: HTMLCanvasElement, config?: PlatformLobbyConfig): Promise<PlatformLobby>;
44
+ static createDev(options: PlatformLobbyDevOptions): Promise<PlatformLobby>;
45
+ private bootstrap;
46
+ /**
47
+ * DIAG ONLY: upsert a synthetic remote player for performance measurement.
48
+ * Does not change multiplayer protocol behavior.
49
+ */
50
+ diagUpsertRemote(player: LobbyPlayerState): void;
51
+ /** DIAG ONLY: remove a synthetic/remote player used for measurement. */
52
+ diagRemoveRemote(userId: string): void;
53
+ /** DIAG ONLY: wait until a remote userId appears in the remote list (or timeout). */
54
+ diagWaitRemote(userId: string, timeoutMs?: number): Promise<boolean>;
55
+ /** DIAG ONLY: wait until remote GLB/placeholder swap finished. */
56
+ diagWaitRemoteReady(userId: string, timeoutMs?: number): Promise<boolean>;
57
+ /** Register shared base avatar GLBs (catalog). Does not load until preload/spawn. */
58
+ registerAvatarBases(defs: readonly AvatarBaseDef[]): void;
59
+ registerAvatarBase(def: AvatarBaseDef): void;
60
+ listAvatarBases(): AvatarBaseDef[];
61
+ isAvatarBaseCached(id: string): boolean;
62
+ /**
63
+ * Warm container cache for one base. Non-throwing; returns null on failure.
64
+ * Safe to call after bootstrap — does not block the render loop by itself.
65
+ */
66
+ preloadAvatarBase(id: string): Promise<import("@babylonjs/core").AssetContainer | null>;
67
+ /**
68
+ * Warm container cache for bases (all registered if ids omitted).
69
+ * Failures are per-id; lobby continues on the normal async spawn path.
70
+ */
71
+ preloadAvatarBases(ids?: readonly string[]): Promise<{
72
+ id: string;
73
+ ok: boolean;
74
+ }[]>;
75
+ /** Apply config.avatarBases + init.avatarBases + optional fire-and-forget preload (non-blocking). */
76
+ private applyConfiguredAvatarBases;
77
+ /** DIAG ONLY: update synthetic remote move/animation targets (no network). */
78
+ diagApplyRemoteMove(payload: {
79
+ userId: string;
80
+ position?: LobbyPlayerState['position'];
81
+ rotationY?: number;
82
+ animation?: import('./protocol').LobbyAnimationState;
83
+ }): void;
84
+ private connectNetwork;
85
+ on<E extends LobbyEventName>(event: E, handler: (payload: LobbyEventMap[E]) => void): () => void;
86
+ off<E extends LobbyEventName>(event: E, handler: (payload: LobbyEventMap[E]) => void): void;
87
+ private emit;
88
+ use(plugin: LobbyPlugin): this;
89
+ /** Optional starter-plaza template. Appearance and start routing stay in the game. */
90
+ applyPlazaLayout(config?: PlazaLayoutConfig): this;
91
+ applyStarterLayout(config?: StarterLayoutConfig): this;
92
+ attachDebug(win?: Window): import("./lobby-debug").LobbyDebugHandle;
93
+ getDebugReport(): import("./lobby-debug").LobbyDebugReport;
94
+ addZone(options: LobbyZoneOptions): void;
95
+ /**
96
+ * Game-owned portal. The SDK only detects the player and fires `onTrigger` / `portalTrigger`.
97
+ * It never navigates the browser — the game starts its own gameplay.
98
+ */
99
+ addPortal(options: LobbyPortalOptions): void;
100
+ /** Platform identity: user, avatar, session, room. */
101
+ getSession(): import("./platform-types").SdkSession;
102
+ getUser(): import("./platform-types").SdkUser;
103
+ getAvatar(): import("./platform-types").SdkLobbyAvatar;
104
+ /** Other players currently synced in this lobby room. */
105
+ getPlayers(): {
106
+ userId: string;
107
+ displayName: string;
108
+ avatar: import("./protocol").SdkLobbyAvatar;
109
+ position: {
110
+ x: number;
111
+ y: number;
112
+ z: number;
113
+ };
114
+ rotationY: number;
115
+ animation: import("./protocol").LobbyAnimationState;
116
+ ready: boolean;
117
+ lifecycle: import("./avatar-instance").RemoteAvatarLifecycle;
118
+ }[];
119
+ loadGLB(url: string, name?: string): Promise<import("@babylonjs/core").AbstractMesh>;
120
+ onOverlay(id: string, handler: (payload: unknown) => void): void;
121
+ emitOverlay(id: string, payload: unknown): void;
122
+ playEmote(emote: LobbyEmoteKind): void;
123
+ /** Live lobby chat. Not saved. Always echoes locally so the sender sees the line. */
124
+ sendChat(text: string): boolean;
125
+ /**
126
+ * Ephemeral game data for this lobby room (matchmaking, pad sync, …).
127
+ * Independent of chat — works when chat is disabled/banned.
128
+ * Local-echoes so the sender sees the same `data` event as peers.
129
+ * Prefer namespaced channels: `{gameSlug}.{feature}` (e.g. `fc.pad-room`).
130
+ */
131
+ sendData(channel: string, payload: string): boolean;
132
+ attachChat(): this;
133
+ attachVoice(): this;
134
+ getVoiceChat(): LobbyVoiceChat | null;
135
+ getLobbyFeatures(): LobbyFeatureFlags;
136
+ canUseChat(): boolean;
137
+ /** Game data channel — defaults on when flags are omitted. */
138
+ canUseData(): boolean;
139
+ canUseVoice(): boolean;
140
+ /** Virtual joystick / on-screen pad. x = strafe, z = forward (-1..1). */
141
+ setMoveStick(x: number, z: number): void;
142
+ setLookStick(x: number, y: number): void;
143
+ addLookDelta(dx: number, dy: number): void;
144
+ /** Game-side camera distance (third-person orbit radius). */
145
+ setCameraOrbit(radius: number, limits?: {
146
+ lower?: number;
147
+ upper?: number;
148
+ }): void;
149
+ tryPlaygroundInteract(): boolean;
150
+ getLocalController(): LocalPlayerController;
151
+ noteMusicToggle(): void;
152
+ toggleMusic(): boolean;
153
+ setMusicMuted(muted: boolean): void;
154
+ isMusicMuted(): boolean;
155
+ jump(): void;
156
+ setJumpHeld(on: boolean): void;
157
+ setSprint(on: boolean): void;
158
+ /** Ask the hub to close this lobby iframe and return home. Never navigates itself. */
159
+ requestExit(): void;
160
+ getInitPayload(): SdkInitPayload;
161
+ getLocalPose(): {
162
+ position: {
163
+ x: number;
164
+ y: number;
165
+ z: number;
166
+ };
167
+ rotationY: number;
168
+ animation: import("./protocol").LobbyAnimationState;
169
+ };
170
+ getScene(): import("@babylonjs/core").Scene;
171
+ getUiLocale(): "fa" | "en";
172
+ getEngine(): import("@babylonjs/core").Engine;
173
+ addMeshAt(position: Vector3, size?: number): import("@babylonjs/core").Mesh;
174
+ destroy(): void;
175
+ }
176
+ //# sourceMappingURL=platform-lobby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-lobby.d.ts","sourceRoot":"","sources":["../src/platform-lobby.ts"],"names":[],"mappings":"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"}