@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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/avatar-accessories.d.ts +16 -0
- package/dist/avatar-accessories.d.ts.map +1 -0
- package/dist/avatar-accessories.js +214 -0
- package/dist/avatar-accessories.js.map +1 -0
- package/dist/avatar-asset-manager.d.ts +54 -0
- package/dist/avatar-asset-manager.d.ts.map +1 -0
- package/dist/avatar-asset-manager.js +215 -0
- package/dist/avatar-asset-manager.js.map +1 -0
- package/dist/avatar-clips.d.ts +17 -0
- package/dist/avatar-clips.d.ts.map +1 -0
- package/dist/avatar-clips.js +47 -0
- package/dist/avatar-clips.js.map +1 -0
- package/dist/avatar-config.d.ts +4 -0
- package/dist/avatar-config.d.ts.map +1 -0
- package/dist/avatar-config.js +9 -0
- package/dist/avatar-config.js.map +1 -0
- package/dist/avatar-factory.d.ts +64 -0
- package/dist/avatar-factory.d.ts.map +1 -0
- package/dist/avatar-factory.js +464 -0
- package/dist/avatar-factory.js.map +1 -0
- package/dist/avatar-instance.d.ts +31 -0
- package/dist/avatar-instance.d.ts.map +1 -0
- package/dist/avatar-instance.js +56 -0
- package/dist/avatar-instance.js.map +1 -0
- package/dist/avatar-material-pipeline.d.ts +34 -0
- package/dist/avatar-material-pipeline.d.ts.map +1 -0
- package/dist/avatar-material-pipeline.js +580 -0
- package/dist/avatar-material-pipeline.js.map +1 -0
- package/dist/avatar-rig-builder.d.ts +74 -0
- package/dist/avatar-rig-builder.d.ts.map +1 -0
- package/dist/avatar-rig-builder.js +347 -0
- package/dist/avatar-rig-builder.js.map +1 -0
- package/dist/draco.d.ts +7 -0
- package/dist/draco.d.ts.map +1 -0
- package/dist/draco.js +82 -0
- package/dist/draco.js.map +1 -0
- package/dist/humanoid-animator.d.ts +35 -0
- package/dist/humanoid-animator.d.ts.map +1 -0
- package/dist/humanoid-animator.js +191 -0
- package/dist/humanoid-animator.js.map +1 -0
- package/dist/humanoid-bone-names.d.ts +35 -0
- package/dist/humanoid-bone-names.d.ts.map +1 -0
- package/dist/humanoid-bone-names.js +126 -0
- package/dist/humanoid-bone-names.js.map +1 -0
- package/dist/humanoid-locomotion.d.ts +101 -0
- package/dist/humanoid-locomotion.d.ts.map +1 -0
- package/dist/humanoid-locomotion.js +300 -0
- package/dist/humanoid-locomotion.js.map +1 -0
- package/dist/humanoid-rig.d.ts +51 -0
- package/dist/humanoid-rig.d.ts.map +1 -0
- package/dist/humanoid-rig.js +304 -0
- package/dist/humanoid-rig.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/lobby-chat-ui.d.ts +3 -0
- package/dist/lobby-chat-ui.d.ts.map +1 -0
- package/dist/lobby-chat-ui.js +258 -0
- package/dist/lobby-chat-ui.js.map +1 -0
- package/dist/lobby-colliders.d.ts +10 -0
- package/dist/lobby-colliders.d.ts.map +1 -0
- package/dist/lobby-colliders.js +225 -0
- package/dist/lobby-colliders.js.map +1 -0
- package/dist/lobby-connection-ui.d.ts +8 -0
- package/dist/lobby-connection-ui.d.ts.map +1 -0
- package/dist/lobby-connection-ui.js +68 -0
- package/dist/lobby-connection-ui.js.map +1 -0
- package/dist/lobby-debug.d.ts +50 -0
- package/dist/lobby-debug.d.ts.map +1 -0
- package/dist/lobby-debug.js +132 -0
- package/dist/lobby-debug.js.map +1 -0
- package/dist/lobby-font.d.ts +5 -0
- package/dist/lobby-font.d.ts.map +1 -0
- package/dist/lobby-font.js +35 -0
- package/dist/lobby-font.js.map +1 -0
- package/dist/lobby-music.d.ts +40 -0
- package/dist/lobby-music.d.ts.map +1 -0
- package/dist/lobby-music.js +250 -0
- package/dist/lobby-music.js.map +1 -0
- package/dist/lobby-orientation-ui.d.ts +10 -0
- package/dist/lobby-orientation-ui.d.ts.map +1 -0
- package/dist/lobby-orientation-ui.js +64 -0
- package/dist/lobby-orientation-ui.js.map +1 -0
- package/dist/lobby-perf-diag.d.ts +254 -0
- package/dist/lobby-perf-diag.d.ts.map +1 -0
- package/dist/lobby-perf-diag.js +775 -0
- package/dist/lobby-perf-diag.js.map +1 -0
- package/dist/lobby-plaza-diag.d.ts +103 -0
- package/dist/lobby-plaza-diag.d.ts.map +1 -0
- package/dist/lobby-plaza-diag.js +534 -0
- package/dist/lobby-plaza-diag.js.map +1 -0
- package/dist/lobby-presence-ui.d.ts +4 -0
- package/dist/lobby-presence-ui.d.ts.map +1 -0
- package/dist/lobby-presence-ui.js +89 -0
- package/dist/lobby-presence-ui.js.map +1 -0
- package/dist/lobby-real-device-diag.d.ts +119 -0
- package/dist/lobby-real-device-diag.d.ts.map +1 -0
- package/dist/lobby-real-device-diag.js +468 -0
- package/dist/lobby-real-device-diag.js.map +1 -0
- package/dist/lobby-spawn.d.ts +15 -0
- package/dist/lobby-spawn.d.ts.map +1 -0
- package/dist/lobby-spawn.js +18 -0
- package/dist/lobby-spawn.js.map +1 -0
- package/dist/lobby-ui-i18n.d.ts +11 -0
- package/dist/lobby-ui-i18n.d.ts.map +1 -0
- package/dist/lobby-ui-i18n.js +21 -0
- package/dist/lobby-ui-i18n.js.map +1 -0
- package/dist/lobby-voice-ui.d.ts +3 -0
- package/dist/lobby-voice-ui.d.ts.map +1 -0
- package/dist/lobby-voice-ui.js +105 -0
- package/dist/lobby-voice-ui.js.map +1 -0
- package/dist/local-player-controller.d.ts +80 -0
- package/dist/local-player-controller.d.ts.map +1 -0
- package/dist/local-player-controller.js +422 -0
- package/dist/local-player-controller.js.map +1 -0
- package/dist/name-tag.d.ts +3 -0
- package/dist/name-tag.d.ts.map +1 -0
- package/dist/name-tag.js +59 -0
- package/dist/name-tag.js.map +1 -0
- package/dist/network-client.d.ts +87 -0
- package/dist/network-client.d.ts.map +1 -0
- package/dist/network-client.js +182 -0
- package/dist/network-client.js.map +1 -0
- package/dist/platform-bridge.d.ts +17 -0
- package/dist/platform-bridge.d.ts.map +1 -0
- package/dist/platform-bridge.js +90 -0
- package/dist/platform-bridge.js.map +1 -0
- package/dist/platform-lobby.d.ts +176 -0
- package/dist/platform-lobby.d.ts.map +1 -0
- package/dist/platform-lobby.js +679 -0
- package/dist/platform-lobby.js.map +1 -0
- package/dist/platform-types.d.ts +56 -0
- package/dist/platform-types.d.ts.map +1 -0
- package/dist/platform-types.js +3 -0
- package/dist/platform-types.js.map +1 -0
- package/dist/player-label.d.ts +9 -0
- package/dist/player-label.d.ts.map +1 -0
- package/dist/player-label.js +14 -0
- package/dist/player-label.js.map +1 -0
- package/dist/playground/playground-layout.d.ts +14 -0
- package/dist/playground/playground-layout.d.ts.map +1 -0
- package/dist/playground/playground-layout.js +320 -0
- package/dist/playground/playground-layout.js.map +1 -0
- package/dist/playground/playground-system.d.ts +30 -0
- package/dist/playground/playground-system.d.ts.map +1 -0
- package/dist/playground/playground-system.js +202 -0
- package/dist/playground/playground-system.js.map +1 -0
- package/dist/plaza-layout.d.ts +30 -0
- package/dist/plaza-layout.d.ts.map +1 -0
- package/dist/plaza-layout.js +527 -0
- package/dist/plaza-layout.js.map +1 -0
- package/dist/plugins.d.ts +5 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +26 -0
- package/dist/plugins.js.map +1 -0
- package/dist/protocol.d.ts +276 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +107 -0
- package/dist/protocol.js.map +1 -0
- package/dist/quality.d.ts +39 -0
- package/dist/quality.d.ts.map +1 -0
- package/dist/quality.js +95 -0
- package/dist/quality.js.map +1 -0
- package/dist/remote-player-manager.d.ts +48 -0
- package/dist/remote-player-manager.d.ts.map +1 -0
- package/dist/remote-player-manager.js +339 -0
- package/dist/remote-player-manager.js.map +1 -0
- package/dist/scene-manager.d.ts +26 -0
- package/dist/scene-manager.d.ts.map +1 -0
- package/dist/scene-manager.js +169 -0
- package/dist/scene-manager.js.map +1 -0
- package/dist/spawn-utils.d.ts +8 -0
- package/dist/spawn-utils.d.ts.map +1 -0
- package/dist/spawn-utils.js +29 -0
- package/dist/spawn-utils.js.map +1 -0
- package/dist/starter-layout.d.ts +17 -0
- package/dist/starter-layout.d.ts.map +1 -0
- package/dist/starter-layout.js +102 -0
- package/dist/starter-layout.js.map +1 -0
- package/dist/third-person-camera.d.ts +35 -0
- package/dist/third-person-camera.d.ts.map +1 -0
- package/dist/third-person-camera.js +181 -0
- package/dist/third-person-camera.js.map +1 -0
- package/dist/types.d.ts +164 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/voice-chat.d.ts +78 -0
- package/dist/voice-chat.d.ts.map +1 -0
- package/dist/voice-chat.js +321 -0
- package/dist/voice-chat.js.map +1 -0
- package/dist/yield-to-render.d.ts +3 -0
- package/dist/yield-to-render.d.ts.map +1 -0
- package/dist/yield-to-render.js +11 -0
- package/dist/yield-to-render.js.map +1 -0
- package/dist/zones.d.ts +36 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +68 -0
- package/dist/zones.js.map +1 -0
- package/docs/00-overview.md +47 -0
- package/docs/01-connect.md +85 -0
- package/docs/02-github.md +43 -0
- package/docs/03-modes.md +70 -0
- package/docs/04-api.md +106 -0
- package/docs/05-features.md +55 -0
- package/docs/06-controls.md +34 -0
- package/docs/07-troubleshooting.md +39 -0
- package/package.json +65 -0
package/docs/03-modes.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# حالتهای اجرا
|
|
2
|
+
|
|
3
|
+
## 1) Production — iframe پلتفرم
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
بازیکن → /play/{slug} → iframe بازی → game-sdk init → lobby-sdk
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
- سشن توسط پلتفرم ساخته میشود.
|
|
10
|
+
- `platform:init` شامل `avatar` و `lobby` است.
|
|
11
|
+
- امتیاز/جِم بعداً از game-sdk در iframe در دسترس است.
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
await PlatformSDK.init();
|
|
15
|
+
const lobby = await PlatformLobby.create({
|
|
16
|
+
canvas,
|
|
17
|
+
platformInit: PlatformSDK.getInitPayload()!,
|
|
18
|
+
roomId: PlatformSDK.getInitPayload()!.lobby!.roomId,
|
|
19
|
+
wsUrl: PlatformSDK.getInitPayload()!.lobby!.wsUrl,
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2) Direct Development — بدون iframe
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
npm run dev → origin شما → game-sdk Authorize → Context واقعی → lobby-sdk → WS واقعی
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
مناسب وقتی پلتفرم را لوکال ندارید ولی سرور oyna360 در دسترس است.
|
|
32
|
+
|
|
33
|
+
1. game-sdk را طبق [09-direct-development](../../game-sdk/docs/09-direct-development.md) تنظیم کنید.
|
|
34
|
+
2. همان `PlatformLobby.create({ platformInit })`.
|
|
35
|
+
3. Origin توسعه را allowlist کنید.
|
|
36
|
+
|
|
37
|
+
`createDev()` را اینجا استفاده نکنید.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 3) `createDev()` — Fake / Offline
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
await PlatformLobby.createDev({
|
|
45
|
+
canvas,
|
|
46
|
+
roomId: 'game:my-game',
|
|
47
|
+
config: { enableMultiplayer: false },
|
|
48
|
+
mockUser: { displayName: 'Tester' },
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- سشن ساختگی (`dev-token`) — سرور لابی آن را برای مالتیپلیر واقعی قبول نمیکند.
|
|
53
|
+
- برای چیدمان صحنه، UI، پورتال بدون شبکه.
|
|
54
|
+
- با Direct Development اشتباه نشود.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## مقایسه سریع
|
|
59
|
+
|
|
60
|
+
| | Production | Direct Dev | createDev |
|
|
61
|
+
|--|:----------:|:----------:|:---------:|
|
|
62
|
+
| اکانت واقعی | ✅ | ✅ | ❌ |
|
|
63
|
+
| سشن واقعی | ✅ | ✅ | ❌ |
|
|
64
|
+
| remote players | ✅ | ✅ | ❌ |
|
|
65
|
+
| نیاز به پلتفرم لوکال | نه* | نه | نه |
|
|
66
|
+
| نیاز به iframe | ✅ | ❌ | ❌ |
|
|
67
|
+
|
|
68
|
+
\* مگر خودتان همه stack را لوکال بالا آورده باشید.
|
|
69
|
+
|
|
70
|
+
بعدی: [04-api.md](./04-api.md)
|
package/docs/04-api.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# API — `PlatformLobby`
|
|
2
|
+
|
|
3
|
+
## ساخت نمونه
|
|
4
|
+
|
|
5
|
+
### `PlatformLobby.create(options)`
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
interface PlatformLobbyCreateOptions {
|
|
9
|
+
canvas: HTMLCanvasElement;
|
|
10
|
+
platformInit: SdkInitPayload | PlatformInitMessage;
|
|
11
|
+
roomId: string;
|
|
12
|
+
wsUrl?: string; // پیشفرض از platformInit.lobby.wsUrl
|
|
13
|
+
strictRoom?: boolean; // دعوت دوست؛ بدون spillover ظرفیت
|
|
14
|
+
config?: PlatformLobbyConfig;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### `PlatformLobby.createFromPlatform(canvas, config?)`
|
|
19
|
+
|
|
20
|
+
منتظر Context روی window / `platform:init` میماند، سپس `create` را صدا میزند.
|
|
21
|
+
|
|
22
|
+
### `PlatformLobby.createDev(options)`
|
|
23
|
+
|
|
24
|
+
Mock Context + معمولاً `enableMultiplayer: false`.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## `PlatformLobbyConfig` (مهمترینها)
|
|
29
|
+
|
|
30
|
+
| فیلد | پیشفرض | توضیح |
|
|
31
|
+
|------|---------|--------|
|
|
32
|
+
| `enableMultiplayer` | `true` | اتصال سوکت |
|
|
33
|
+
| `enableChat` | `true` | overlay چت |
|
|
34
|
+
| `enableVoice` | `true` | voice WebRTC |
|
|
35
|
+
| `enablePresenceUi` | با مالتیپلیر | toast ورود/خروج |
|
|
36
|
+
| `enableConnectionUi` | با مالتیپلیر | قطع اتصال |
|
|
37
|
+
| `enableOrientationUi` | `true` | اعلان landscape موبایل |
|
|
38
|
+
| `locale` | `'fa'` | `'fa'` \| `'en'` |
|
|
39
|
+
| `spawnPoint` / `spawnPoints` | — | محل اسپان |
|
|
40
|
+
| `playerSpeed` / `runMultiplier` | داخلی | حرکت |
|
|
41
|
+
| `cameraDistance` / `cameraHeight` | داخلی | دوربین |
|
|
42
|
+
| `quality` | `'auto'` | کیفیت رندر |
|
|
43
|
+
| `avatarBases` | — | کاتالوگ GLB |
|
|
44
|
+
| `preloadAvatarBases` | true | گرم کردن کش GLB |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## متدهای پرکاربرد
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
lobby.getUser();
|
|
52
|
+
lobby.getSession();
|
|
53
|
+
lobby.getAvatar();
|
|
54
|
+
lobby.getPlayers();
|
|
55
|
+
|
|
56
|
+
lobby.applyPlazaLayout({ onRoomStart, /* … */ });
|
|
57
|
+
lobby.applyStarterLayout({ /* … */ });
|
|
58
|
+
|
|
59
|
+
lobby.addZone({ id, bounds, onEnter, onExit });
|
|
60
|
+
lobby.addPortal({ id, /* … */ });
|
|
61
|
+
|
|
62
|
+
lobby.sendChat('سلام');
|
|
63
|
+
lobby.sendData('my-channel', payloadString); // کانال data جدا از چت
|
|
64
|
+
|
|
65
|
+
lobby.playEmote('wave');
|
|
66
|
+
lobby.attachChat();
|
|
67
|
+
lobby.destroy();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### رویدادها
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
lobby.on('chat', ({ displayName, text }) => {});
|
|
74
|
+
lobby.on('playerJoin', (player) => {});
|
|
75
|
+
lobby.on('playerLeave', ({ userId }) => {});
|
|
76
|
+
// و سایر رویدادهای LobbyEventMap
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Plugin
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { ShopZonePlugin, defineLobbyPlugin } from '@oyna360/lobby-sdk';
|
|
83
|
+
lobby.use(ShopZonePlugin);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## چیدمان
|
|
89
|
+
|
|
90
|
+
- **`applyPlazaLayout` (متد):** میدان، اتاقها، برخورد — برای اکثر بازیها.
|
|
91
|
+
- **`applyStarterLayout`:** چیدمان سادهتر استارتر.
|
|
92
|
+
- تابعهای export همنام را بهجای متد صدا نزنید؛ برخورد بهدرستی اعمال نمیشود.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## چرخه عمر
|
|
97
|
+
|
|
98
|
+
1. create
|
|
99
|
+
2. layout / zones
|
|
100
|
+
3. بازیکن در لابی
|
|
101
|
+
4. شروع مسابقه → **`destroy()`**
|
|
102
|
+
5. موتور گیمپلی خودتان (مثلاً Three.js روی canvas دیگر)
|
|
103
|
+
|
|
104
|
+
دو موتور روی یک canvas توصیه نمیشود.
|
|
105
|
+
|
|
106
|
+
بعدی: [05-features.md](./05-features.md)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# امکانات — آواتار، چت، voice، data
|
|
2
|
+
|
|
3
|
+
## آواتار
|
|
4
|
+
|
|
5
|
+
از `platformInit.avatar` ساخته میشود (procedural یا GLB).
|
|
6
|
+
|
|
7
|
+
- رنگ / لباس / اکسسوری از `customConfig`
|
|
8
|
+
- `avatarBases` برای پیشبارگذاری چند بدنهٔ GLB مشترک
|
|
9
|
+
- انیمیشن راه رفتن / دویدن / پرش داخل SDK
|
|
10
|
+
|
|
11
|
+
بازی معمولاً لازم نیست `AvatarFactory` را مستقیم صدا بزند مگر ابزار سفارشی بسازید.
|
|
12
|
+
|
|
13
|
+
URL تکسچر و GLB باید از پلتفرم **مطلق** باشند تا از origin بازی cross-origin لود شوند (CORS روی `/uploads` سمت پلتفرم فعال است).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## چت
|
|
18
|
+
|
|
19
|
+
- زنده، بدون ذخیره دائمی
|
|
20
|
+
- `enableChat: false` برای خاموش کردن UI پیشفرض
|
|
21
|
+
- `sendChat(text)` / رویداد `chat`
|
|
22
|
+
|
|
23
|
+
برای فریمهای کنترلی بازی (مثلاً matchmaking) از چت استفاده نکنید → کانال data.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Voice
|
|
28
|
+
|
|
29
|
+
- با `enableVoice` (پیشفرض روشن وقتی مالتیپلیر باشد)
|
|
30
|
+
- محدودیت تعداد peer نزدیک روی سرور تنظیم میشود
|
|
31
|
+
- نیاز به مجوز میکروفون مرورگر
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## کانال `lobby:data`
|
|
36
|
+
|
|
37
|
+
پیامهای باینری/متنی کوتاه برای منطق بازی، جدا از چت.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
lobby.sendData('fc.pad-room', frameString);
|
|
41
|
+
|
|
42
|
+
lobby.on('data', ({ channel, payload, fromUserId }) => {
|
|
43
|
+
if (channel === 'fc.pad-room') handleFrame(payload);
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
محدودیت اندازه و نرخ از سمت سرور اعمال میشود. چت را sanitize نکنید روی data — فرمت خودتان را validate کنید.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Presence / اتصال
|
|
52
|
+
|
|
53
|
+
UIهای آماده برای ورود بازیکن و قطع شبکه را میتوان با فلگهای config خاموش کرد و UI خودتان را گذاشت.
|
|
54
|
+
|
|
55
|
+
بعدی: [06-controls.md](./06-controls.md)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# کنترلها و موبایل
|
|
2
|
+
|
|
3
|
+
## دسکتاپ
|
|
4
|
+
|
|
5
|
+
| ورودی | عمل |
|
|
6
|
+
|-------|-----|
|
|
7
|
+
| WASD (`event.code`) | حرکت |
|
|
8
|
+
| Shift | دویدن |
|
|
9
|
+
| Space | پرش |
|
|
10
|
+
| E | تعامل / ایموجی |
|
|
11
|
+
| ماوس | چرخش دوربین سومشخص |
|
|
12
|
+
|
|
13
|
+
## موبایل / لمسی
|
|
14
|
+
|
|
15
|
+
- اهرک مجازی: راه رفتن
|
|
16
|
+
- دکمه دویدن جدا
|
|
17
|
+
- دکمه پرش
|
|
18
|
+
- در portrait ممکن است overlay «افقی کنید» بیاید (`enableOrientationUi`)
|
|
19
|
+
|
|
20
|
+
## کیفیت
|
|
21
|
+
|
|
22
|
+
`config.quality = 'auto' | 'low' | 'medium' | 'high'`
|
|
23
|
+
روی موبایلهای ضعیف auto معمولاً به low/medium میرود.
|
|
24
|
+
|
|
25
|
+
## چند canvas
|
|
26
|
+
|
|
27
|
+
اگر گیمپلی با Three.js / موتور دیگر است:
|
|
28
|
+
|
|
29
|
+
1. canvas لابی برای `PlatformLobby`
|
|
30
|
+
2. canvas جدا برای مسابقه بعد از `destroy()`
|
|
31
|
+
|
|
32
|
+
همزمان دو رندرر WebGL سنگین روی موبایل ممکن است سفید/کرش شود.
|
|
33
|
+
|
|
34
|
+
بعدی: [07-troubleshooting.md](./07-troubleshooting.md)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# عیبیابی — lobby-sdk
|
|
2
|
+
|
|
3
|
+
## Timed out waiting for platform:init
|
|
4
|
+
|
|
5
|
+
- داخل iframe نیستید و `PlatformSDK.init()` را قبلش صدا نزدهاید.
|
|
6
|
+
- یا parent پلتفرم init نفرستاده.
|
|
7
|
+
|
|
8
|
+
**راه:** اول game-sdk `init`، بعد `create({ platformInit })`.
|
|
9
|
+
|
|
10
|
+
## صفحه سفید / HUD هست صحنه نیست
|
|
11
|
+
|
|
12
|
+
اغلب سنگینی آواتار GLB یا WebGL context روی موبایل. کیفیت را `low` کنید، تعداد remote را کم کنید، مدل را سبک کنید.
|
|
13
|
+
|
|
14
|
+
## بازیکن remote دیده نمیشود
|
|
15
|
+
|
|
16
|
+
- `enableMultiplayer: true`
|
|
17
|
+
- `session.token` واقعی است (نه `dev-token`)
|
|
18
|
+
- `wsUrl` به همان محیطی اشاره میکند که سشن ساخته شده
|
|
19
|
+
- فایروال / mixed content (https صفحه با ws ناامن)
|
|
20
|
+
|
|
21
|
+
## آواتار نامرئی / منفجر
|
|
22
|
+
|
|
23
|
+
مدل GLB ناسازگار؛ از presetهای تأییدشده پلتفرم استفاده کنید. مسیر bake/fallback داخل SDK برای بعضی مدلها هست ولی مدل بسیار سنگین موبایل را میخواباند.
|
|
24
|
+
|
|
25
|
+
## چت میآید ولی data نه
|
|
26
|
+
|
|
27
|
+
کانال data جداست؛ فلگ/مجوز سرور و طول payload را چک کنید. متن را در چت نفرستید.
|
|
28
|
+
|
|
29
|
+
## `applyPlazaLayout` برخورد ندارد
|
|
30
|
+
|
|
31
|
+
متد روی instance را صدا بزنید نه تابع export خام.
|
|
32
|
+
|
|
33
|
+
## ساخت از GitHub خراب است
|
|
34
|
+
|
|
35
|
+
`dist` باید بدون import به `@platform/lobby-protocol` باشد. تگ را عوض کنید یا از maintainer بخواهید pack تازه بگذارد.
|
|
36
|
+
|
|
37
|
+
## createDev به سرور وصل نمیشود
|
|
38
|
+
|
|
39
|
+
عمدی است. برای مالتیپلیر واقعی Direct یا Production را استفاده کنید.
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@oyna360/lobby-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "oyna360 3D Lobby SDK for game developers (Babylon.js). Protocol is bundled — do not install lobby-protocol.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "oyna360",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"oyna360",
|
|
9
|
+
"lobby-sdk",
|
|
10
|
+
"babylonjs",
|
|
11
|
+
"multiplayer",
|
|
12
|
+
"avatar"
|
|
13
|
+
],
|
|
14
|
+
"type": "module",
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"docs",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"sync:protocol": "node ../../scripts/sync-lobby-protocol.mjs",
|
|
32
|
+
"prebuild": "node ../../scripts/sync-lobby-protocol.mjs",
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"dev": "tsc --watch",
|
|
35
|
+
"prepublishOnly": "npm run build",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"lint": "echo \"No lint configured for @oyna360/lobby-sdk\"",
|
|
38
|
+
"check:protocol": "node ../../scripts/sync-lobby-protocol.mjs --check"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@babylonjs/loaders": "^7.44.0",
|
|
42
|
+
"socket.io-client": "^4.8.1"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@babylonjs/core": "^7.0.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@babylonjs/core": "^7.44.0",
|
|
49
|
+
"typescript": "^5.7.2"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git+https://github.com/mamadjavadrasti/oyna360-lobby-sdk.git"
|
|
57
|
+
},
|
|
58
|
+
"bugs": {
|
|
59
|
+
"url": "https://github.com/mamadjavadrasti/oyna360-lobby-sdk/issues"
|
|
60
|
+
},
|
|
61
|
+
"homepage": "https://github.com/mamadjavadrasti/oyna360-lobby-sdk#readme",
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public"
|
|
64
|
+
}
|
|
65
|
+
}
|