@jgengine/ws 0.6.0 → 0.8.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/CHANGELOG.md +214 -2
- package/dist/createWsBackend.d.ts +37 -3
- package/dist/createWsBackend.js +128 -44
- package/dist/host.d.ts +85 -0
- package/dist/host.js +425 -0
- package/dist/hostRouter.d.ts +42 -0
- package/dist/hostRouter.js +493 -0
- package/dist/peer.d.ts +53 -0
- package/dist/peer.js +237 -0
- package/dist/pipe.d.ts +11 -0
- package/dist/pipe.js +16 -0
- package/dist/protocol.d.ts +78 -17
- package/dist/protocol.js +49 -2
- package/dist/readsHandler.d.ts +12 -0
- package/dist/readsHandler.js +65 -0
- package/dist/socketIoPipe.d.ts +14 -0
- package/dist/socketIoPipe.js +49 -0
- package/dist/voiceChannel.d.ts +35 -0
- package/dist/voiceChannel.js +81 -0
- package/llms.txt +1482 -0
- package/package.json +4 -3
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { computeFalloffGain } from "@jgengine/core/audio/audioFalloff";
|
|
2
|
+
export function computeVoiceGain(def, distance) {
|
|
3
|
+
const base = def.gain ?? 1;
|
|
4
|
+
if (!def.positional)
|
|
5
|
+
return base;
|
|
6
|
+
if (distance === null)
|
|
7
|
+
return 0;
|
|
8
|
+
return computeFalloffGain(distance, def.falloff) * base;
|
|
9
|
+
}
|
|
10
|
+
function distance3(a, b) {
|
|
11
|
+
const dx = a.x - b.x;
|
|
12
|
+
const dy = a.y - b.y;
|
|
13
|
+
const dz = a.z - b.z;
|
|
14
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
15
|
+
}
|
|
16
|
+
export function createVoiceChannelRouter(channels) {
|
|
17
|
+
const channelDefs = new Map();
|
|
18
|
+
for (const def of channels ?? [])
|
|
19
|
+
channelDefs.set(def.id, def);
|
|
20
|
+
const membership = new Map();
|
|
21
|
+
const positions = new Map();
|
|
22
|
+
const muted = new Set();
|
|
23
|
+
function memberChannels(userId) {
|
|
24
|
+
let set = membership.get(userId);
|
|
25
|
+
if (set === undefined) {
|
|
26
|
+
set = new Set();
|
|
27
|
+
membership.set(userId, set);
|
|
28
|
+
}
|
|
29
|
+
return set;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
registerChannel(def) {
|
|
33
|
+
channelDefs.set(def.id, def);
|
|
34
|
+
},
|
|
35
|
+
join(userId, channelId) {
|
|
36
|
+
memberChannels(userId).add(channelId);
|
|
37
|
+
},
|
|
38
|
+
leave(userId, channelId) {
|
|
39
|
+
membership.get(userId)?.delete(channelId);
|
|
40
|
+
},
|
|
41
|
+
leaveAll(userId) {
|
|
42
|
+
membership.delete(userId);
|
|
43
|
+
},
|
|
44
|
+
updatePosition(userId, position) {
|
|
45
|
+
positions.set(userId, position);
|
|
46
|
+
},
|
|
47
|
+
setMuted(userId, isMuted) {
|
|
48
|
+
if (isMuted)
|
|
49
|
+
muted.add(userId);
|
|
50
|
+
else
|
|
51
|
+
muted.delete(userId);
|
|
52
|
+
},
|
|
53
|
+
channelsOf(userId) {
|
|
54
|
+
return [...(membership.get(userId) ?? [])];
|
|
55
|
+
},
|
|
56
|
+
resolveRoutes(listenerUserId) {
|
|
57
|
+
const listenerChannels = membership.get(listenerUserId) ?? new Set();
|
|
58
|
+
if (listenerChannels.size === 0)
|
|
59
|
+
return [];
|
|
60
|
+
const listenerPosition = positions.get(listenerUserId) ?? null;
|
|
61
|
+
const routes = [];
|
|
62
|
+
for (const [speakerUserId, speakerChannels] of membership) {
|
|
63
|
+
if (speakerUserId === listenerUserId || muted.has(speakerUserId))
|
|
64
|
+
continue;
|
|
65
|
+
for (const channelId of speakerChannels) {
|
|
66
|
+
if (!listenerChannels.has(channelId))
|
|
67
|
+
continue;
|
|
68
|
+
const def = channelDefs.get(channelId);
|
|
69
|
+
if (def === undefined)
|
|
70
|
+
continue;
|
|
71
|
+
const speakerPosition = positions.get(speakerUserId) ?? null;
|
|
72
|
+
const distance = listenerPosition === null || speakerPosition === null
|
|
73
|
+
? null
|
|
74
|
+
: distance3(listenerPosition, speakerPosition);
|
|
75
|
+
routes.push({ fromUserId: speakerUserId, channelId, gain: computeVoiceGain(def, distance) });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return routes;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|