@nice2dev/game-engine 0.1.0 → 1.0.2
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 +193 -1
- package/dist/cjs/audio/AudioBridge.js +454 -0
- package/dist/cjs/audio/AudioBridge.js.map +1 -0
- package/dist/cjs/devtools/GameplayAnalytics.js +651 -0
- package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -0
- package/dist/cjs/dialogue/DialogueSystem.js +1023 -0
- package/dist/cjs/dialogue/DialogueSystem.js.map +1 -0
- package/dist/cjs/editor/NiceGameEditor.js +569 -71
- package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
- package/dist/cjs/engine/SaveSystemV2.js +494 -0
- package/dist/cjs/engine/SaveSystemV2.js.map +1 -0
- package/dist/cjs/i18n/useTranslation.js +11 -11
- package/dist/cjs/index.js +90 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/input/GamepadNavigation.js +21 -21
- package/dist/cjs/input/useGamepads.js +6 -6
- package/dist/cjs/integration/IconSprite.js +281 -0
- package/dist/cjs/integration/IconSprite.js.map +1 -0
- package/dist/cjs/inventory/InventorySystem.js +930 -0
- package/dist/cjs/inventory/InventorySystem.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
- package/dist/cjs/quest/QuestSystem.js +924 -0
- package/dist/cjs/quest/QuestSystem.js.map +1 -0
- package/dist/cjs/rendering/WebGPURenderPipeline.js +658 -0
- package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -0
- package/dist/cjs/xr/ARVR.js.map +1 -1
- package/dist/esm/audio/AudioBridge.js +446 -0
- package/dist/esm/audio/AudioBridge.js.map +1 -0
- package/dist/esm/devtools/GameplayAnalytics.js +639 -0
- package/dist/esm/devtools/GameplayAnalytics.js.map +1 -0
- package/dist/esm/dialogue/DialogueSystem.js +1008 -0
- package/dist/esm/dialogue/DialogueSystem.js.map +1 -0
- package/dist/esm/editor/NiceGameEditor.js +556 -58
- package/dist/esm/editor/NiceGameEditor.js.map +1 -1
- package/dist/esm/engine/SaveSystemV2.js +487 -0
- package/dist/esm/engine/SaveSystemV2.js.map +1 -0
- package/dist/esm/index.js +11 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integration/IconSprite.js +266 -0
- package/dist/esm/integration/IconSprite.js.map +1 -0
- package/dist/esm/inventory/InventorySystem.js +924 -0
- package/dist/esm/inventory/InventorySystem.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
- package/dist/esm/quest/QuestSystem.js +916 -0
- package/dist/esm/quest/QuestSystem.js.map +1 -0
- package/dist/esm/rendering/WebGPURenderPipeline.js +642 -0
- package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -0
- package/dist/esm/xr/ARVR.js.map +1 -1
- package/dist/types/__tests__/setup.d.ts +1 -1
- package/dist/types/audio/AudioBridge.d.ts +199 -0
- package/dist/types/devtools/GameplayAnalytics.d.ts +279 -0
- package/dist/types/dialogue/DialogueSystem.d.ts +326 -0
- package/dist/types/dialogue/index.d.ts +2 -0
- package/dist/types/editor/NiceGameEditor.d.ts +12 -1
- package/dist/types/engine/SaveSystemV2.d.ts +155 -0
- package/dist/types/index.d.ts +19 -3
- package/dist/types/integration/IconSprite.d.ts +196 -0
- package/dist/types/inventory/InventorySystem.d.ts +336 -0
- package/dist/types/performance/WebGPUCompute.d.ts +0 -10
- package/dist/types/quest/QuestSystem.d.ts +287 -0
- package/dist/types/rendering/WebGPURenderPipeline.d.ts +255 -0
- package/package.json +7 -1
package/dist/esm/xr/ARVR.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ARVR.js","sources":["../../../src/xr/ARVR.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKmE;AAsB5D,MAAM,kBAAkB,GAAoB;AACjD,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,cAAc,EAAE,aAAa;IAC7B,gBAAgB,EAAE,CAAC,aAAa,CAAC;AACjC,IAAA,gBAAgB,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;AACpD,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,YAAY,EAAE,IAAI;;AAGb,MAAM,kBAAkB,GAAoB;AACjD,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,cAAc,EAAE,aAAa;AAC7B,IAAA,gBAAgB,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;IAC7C,gBAAgB,EAAE,CAAC,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,CAAC;AACnF,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,eAAe,EAAE,IAAI;;AAWhB,eAAe,oBAAoB,GAAA;AACxC,IAAA,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI;AAC/D,IAAA,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAI,
|
|
1
|
+
{"version":3,"file":"ARVR.js","sources":["../../../src/xr/ARVR.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { EventBus } from '../core/EventBus';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export type AudioBusType = 'master' | 'music' | 'sfx' | 'voice' | 'ambient' | 'ui';
|
|
4
|
+
export type SpatialModel = 'none' | '2d-panning' | '3d-hrtf' | '3d-equal-power';
|
|
5
|
+
export type AudioPoolStrategy = 'round-robin' | 'steal-oldest' | 'steal-quietest' | 'reject';
|
|
6
|
+
export interface AudioBusConfig {
|
|
7
|
+
type: AudioBusType;
|
|
8
|
+
volume: number;
|
|
9
|
+
muted: boolean;
|
|
10
|
+
effects: AudioEffectNode[];
|
|
11
|
+
}
|
|
12
|
+
export interface AudioEffectNode {
|
|
13
|
+
type: 'reverb' | 'delay' | 'distortion' | 'compressor' | 'eq' | 'lowpass' | 'highpass';
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
params: Record<string, number>;
|
|
16
|
+
}
|
|
17
|
+
export interface SpatialAudioConfig {
|
|
18
|
+
model: SpatialModel;
|
|
19
|
+
maxDistance: number;
|
|
20
|
+
refDistance: number;
|
|
21
|
+
rolloffFactor: number;
|
|
22
|
+
coneInnerAngle: number;
|
|
23
|
+
coneOuterAngle: number;
|
|
24
|
+
coneOuterGain: number;
|
|
25
|
+
}
|
|
26
|
+
export declare const DEFAULT_SPATIAL: SpatialAudioConfig;
|
|
27
|
+
export interface AudioPoolConfig {
|
|
28
|
+
id: string;
|
|
29
|
+
src: string;
|
|
30
|
+
maxInstances: number;
|
|
31
|
+
strategy: AudioPoolStrategy;
|
|
32
|
+
bus: AudioBusType;
|
|
33
|
+
spatial?: SpatialAudioConfig;
|
|
34
|
+
cooldownMs?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface GameAudioEvent {
|
|
37
|
+
type: 'play' | 'stop' | 'pause' | 'resume' | 'fade' | 'crossfade' | 'set-bus-volume';
|
|
38
|
+
sourceId?: string;
|
|
39
|
+
bus?: AudioBusType;
|
|
40
|
+
volume?: number;
|
|
41
|
+
fadeDuration?: number;
|
|
42
|
+
position?: {
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
z?: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface MusicTrack {
|
|
49
|
+
id: string;
|
|
50
|
+
src: string;
|
|
51
|
+
bpm?: number;
|
|
52
|
+
loopStart?: number;
|
|
53
|
+
loopEnd?: number;
|
|
54
|
+
tags: string[];
|
|
55
|
+
}
|
|
56
|
+
export interface MusicCrossfadeConfig {
|
|
57
|
+
fromTrackId: string | null;
|
|
58
|
+
toTrackId: string;
|
|
59
|
+
duration: number;
|
|
60
|
+
curve: 'linear' | 'equal-power' | 'ease-in' | 'ease-out';
|
|
61
|
+
}
|
|
62
|
+
export interface AdaptiveAudioRule {
|
|
63
|
+
id: string;
|
|
64
|
+
/** Game event that triggers this rule */
|
|
65
|
+
triggerEvent: string;
|
|
66
|
+
/** Action to take */
|
|
67
|
+
action: 'switch-track' | 'add-layer' | 'remove-layer' | 'set-intensity' | 'play-stinger';
|
|
68
|
+
targetTrackId?: string;
|
|
69
|
+
layerId?: string;
|
|
70
|
+
intensity?: number;
|
|
71
|
+
fadeDuration?: number;
|
|
72
|
+
stingerSrc?: string;
|
|
73
|
+
priority: number;
|
|
74
|
+
}
|
|
75
|
+
export interface AudioSnapshot {
|
|
76
|
+
timestamp: number;
|
|
77
|
+
busVolumes: Record<AudioBusType, number>;
|
|
78
|
+
activeSounds: {
|
|
79
|
+
id: string;
|
|
80
|
+
src: string;
|
|
81
|
+
bus: AudioBusType;
|
|
82
|
+
volume: number;
|
|
83
|
+
playing: boolean;
|
|
84
|
+
}[];
|
|
85
|
+
currentMusicTrack: string | null;
|
|
86
|
+
musicPosition: number;
|
|
87
|
+
}
|
|
88
|
+
export declare class AudioBusMixer {
|
|
89
|
+
private buses;
|
|
90
|
+
private eventBus;
|
|
91
|
+
constructor(eventBus: EventBus);
|
|
92
|
+
getBus(type: AudioBusType): AudioBusConfig | undefined;
|
|
93
|
+
setVolume(type: AudioBusType, volume: number): void;
|
|
94
|
+
setMuted(type: AudioBusType, muted: boolean): void;
|
|
95
|
+
/** Get effective volume considering master and mute */
|
|
96
|
+
getEffectiveVolume(type: AudioBusType): number;
|
|
97
|
+
addEffect(type: AudioBusType, effect: AudioEffectNode): void;
|
|
98
|
+
removeEffect(type: AudioBusType, effectType: AudioEffectNode['type']): void;
|
|
99
|
+
getAllBuses(): ReadonlyMap<AudioBusType, AudioBusConfig>;
|
|
100
|
+
snapshot(): Record<AudioBusType, number>;
|
|
101
|
+
}
|
|
102
|
+
export declare class SFXPool {
|
|
103
|
+
private config;
|
|
104
|
+
private sounds;
|
|
105
|
+
private nextId;
|
|
106
|
+
private lastPlayedAt;
|
|
107
|
+
constructor(config: AudioPoolConfig);
|
|
108
|
+
play(volume?: number, position?: {
|
|
109
|
+
x: number;
|
|
110
|
+
y: number;
|
|
111
|
+
z?: number;
|
|
112
|
+
}): number | null;
|
|
113
|
+
stop(id: number): void;
|
|
114
|
+
stopAll(): void;
|
|
115
|
+
getActiveCount(): number;
|
|
116
|
+
getConfig(): Readonly<AudioPoolConfig>;
|
|
117
|
+
}
|
|
118
|
+
export declare class MusicManager {
|
|
119
|
+
private tracks;
|
|
120
|
+
private currentTrackId;
|
|
121
|
+
private adaptiveRules;
|
|
122
|
+
private eventBus;
|
|
123
|
+
private intensity;
|
|
124
|
+
constructor(eventBus: EventBus);
|
|
125
|
+
registerTrack(track: MusicTrack): void;
|
|
126
|
+
unregisterTrack(id: string): void;
|
|
127
|
+
getTrack(id: string): MusicTrack | undefined;
|
|
128
|
+
getCurrentTrackId(): string | null;
|
|
129
|
+
/** Start playing or crossfade to a new track */
|
|
130
|
+
play(trackId: string, crossfadeDuration?: number): MusicCrossfadeConfig | null;
|
|
131
|
+
stop(fadeOutMs?: number): void;
|
|
132
|
+
/** Adaptive audio rules — respond to game events */
|
|
133
|
+
addRule(rule: AdaptiveAudioRule): void;
|
|
134
|
+
removeRule(id: string): void;
|
|
135
|
+
/** Process a game event and apply matching adaptive rules */
|
|
136
|
+
processGameEvent(eventName: string): AdaptiveAudioRule | null;
|
|
137
|
+
getIntensity(): number;
|
|
138
|
+
setIntensity(value: number): void;
|
|
139
|
+
getRules(): readonly AdaptiveAudioRule[];
|
|
140
|
+
getAllTracks(): MusicTrack[];
|
|
141
|
+
/** Find tracks matching tags */
|
|
142
|
+
findByTags(tags: string[]): MusicTrack[];
|
|
143
|
+
}
|
|
144
|
+
/** Main bridge class connecting @nice2dev/ui-audio features to the game engine */
|
|
145
|
+
export declare class GameAudioBridge {
|
|
146
|
+
readonly mixer: AudioBusMixer;
|
|
147
|
+
readonly music: MusicManager;
|
|
148
|
+
private pools;
|
|
149
|
+
private eventBus;
|
|
150
|
+
private paused;
|
|
151
|
+
private snapshot;
|
|
152
|
+
constructor(eventBus: EventBus);
|
|
153
|
+
private setupGameStateHandlers;
|
|
154
|
+
/** Register an SFX pool for frequent sounds */
|
|
155
|
+
registerPool(config: AudioPoolConfig): void;
|
|
156
|
+
/** Play a pooled SFX */
|
|
157
|
+
playSFX(poolId: string, volume?: number, position?: {
|
|
158
|
+
x: number;
|
|
159
|
+
y: number;
|
|
160
|
+
z?: number;
|
|
161
|
+
}): number | null;
|
|
162
|
+
/** Stop a pooled SFX instance */
|
|
163
|
+
stopSFX(poolId: string, instanceId: number): void;
|
|
164
|
+
/** Pause all audio (game menu, alt-tab, etc.) */
|
|
165
|
+
pauseAll(): void;
|
|
166
|
+
/** Resume all audio */
|
|
167
|
+
resumeAll(): void;
|
|
168
|
+
isPaused(): boolean;
|
|
169
|
+
/** Create a snapshot of current audio state for save/restore */
|
|
170
|
+
createSnapshot(): AudioSnapshot;
|
|
171
|
+
/** Restore audio from a snapshot */
|
|
172
|
+
restoreSnapshot(snap: AudioSnapshot): void;
|
|
173
|
+
/** Process a game audio event */
|
|
174
|
+
processEvent(event: GameAudioEvent): void;
|
|
175
|
+
getPool(id: string): SFXPool | undefined;
|
|
176
|
+
getAllPools(): Map<string, SFXPool>;
|
|
177
|
+
destroy(): void;
|
|
178
|
+
}
|
|
179
|
+
export declare function useGameAudio(eventBus: EventBus): {
|
|
180
|
+
bridge: GameAudioBridge;
|
|
181
|
+
playSFX: (poolId: string, volume?: number, position?: {
|
|
182
|
+
x: number;
|
|
183
|
+
y: number;
|
|
184
|
+
z?: number;
|
|
185
|
+
}) => number | null;
|
|
186
|
+
playMusic: (trackId: string, crossfadeDuration?: number) => MusicCrossfadeConfig | null;
|
|
187
|
+
stopMusic: (fadeOutMs?: number) => void;
|
|
188
|
+
setVolume: (bus: AudioBusType, volume: number) => void;
|
|
189
|
+
pauseAll: () => void;
|
|
190
|
+
resumeAll: () => void;
|
|
191
|
+
registerPool: (config: AudioPoolConfig) => void;
|
|
192
|
+
registerTrack: (track: MusicTrack) => void;
|
|
193
|
+
};
|
|
194
|
+
export interface GameAudioSettingsProps {
|
|
195
|
+
bridge: GameAudioBridge;
|
|
196
|
+
className?: string;
|
|
197
|
+
style?: React.CSSProperties;
|
|
198
|
+
}
|
|
199
|
+
export declare const GameAudioSettings: React.FC<GameAudioSettingsProps>;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { EventBus } from '../core/EventBus';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export type TelemetryEventCategory = 'gameplay' | 'combat' | 'navigation' | 'interaction' | 'economy' | 'social' | 'progression' | 'performance' | 'ui' | 'error' | 'custom';
|
|
4
|
+
export type HeatmapType = 'death' | 'traversal' | 'interaction' | 'combat' | 'loot' | 'custom';
|
|
5
|
+
export type SessionEventType = 'position' | 'action' | 'input' | 'state-change' | 'camera' | 'dialogue' | 'inventory' | 'quest';
|
|
6
|
+
export interface TelemetryEvent {
|
|
7
|
+
id: string;
|
|
8
|
+
category: TelemetryEventCategory;
|
|
9
|
+
name: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
sessionId: string;
|
|
12
|
+
userId?: string;
|
|
13
|
+
data: Record<string, unknown>;
|
|
14
|
+
position?: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
z?: number;
|
|
18
|
+
};
|
|
19
|
+
sceneId?: string;
|
|
20
|
+
/** Build/version where this event occurred */
|
|
21
|
+
buildVersion?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface TelemetryConfig {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
/** Batch size before flush */
|
|
26
|
+
batchSize: number;
|
|
27
|
+
/** Flush interval (ms) */
|
|
28
|
+
flushIntervalMs: number;
|
|
29
|
+
/** Max events to keep in memory */
|
|
30
|
+
maxBufferSize: number;
|
|
31
|
+
/** Filter: only collect these categories (empty = all) */
|
|
32
|
+
categories: TelemetryEventCategory[];
|
|
33
|
+
/** Sample rate (0–1): fraction of events to keep */
|
|
34
|
+
sampleRate: number;
|
|
35
|
+
/** Custom endpoint for sending events */
|
|
36
|
+
endpoint?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const DEFAULT_TELEMETRY_CONFIG: TelemetryConfig;
|
|
39
|
+
export interface HeatmapConfig {
|
|
40
|
+
type: HeatmapType;
|
|
41
|
+
/** Grid cell size in world units */
|
|
42
|
+
cellSize: number;
|
|
43
|
+
/** World bounds */
|
|
44
|
+
bounds: {
|
|
45
|
+
minX: number;
|
|
46
|
+
minY: number;
|
|
47
|
+
maxX: number;
|
|
48
|
+
maxY: number;
|
|
49
|
+
};
|
|
50
|
+
/** Color gradient (value 0→1 mapped to colors) */
|
|
51
|
+
colorStops: {
|
|
52
|
+
value: number;
|
|
53
|
+
color: string;
|
|
54
|
+
}[];
|
|
55
|
+
/** Max value for normalization (0 = auto) */
|
|
56
|
+
maxValue: number;
|
|
57
|
+
/** Gaussian blur radius (cells) */
|
|
58
|
+
blurRadius: number;
|
|
59
|
+
}
|
|
60
|
+
export interface HeatmapCell {
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
value: number;
|
|
64
|
+
events: number;
|
|
65
|
+
}
|
|
66
|
+
export declare const DEFAULT_HEATMAP_CONFIG: HeatmapConfig;
|
|
67
|
+
export interface SessionFrame {
|
|
68
|
+
timestamp: number;
|
|
69
|
+
delta: number;
|
|
70
|
+
events: SessionRecordedEvent[];
|
|
71
|
+
}
|
|
72
|
+
export interface SessionRecordedEvent {
|
|
73
|
+
type: SessionEventType;
|
|
74
|
+
data: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
export interface SessionRecording {
|
|
77
|
+
id: string;
|
|
78
|
+
sessionId: string;
|
|
79
|
+
startedAt: number;
|
|
80
|
+
endedAt: number;
|
|
81
|
+
durationMs: number;
|
|
82
|
+
frameCount: number;
|
|
83
|
+
frames: SessionFrame[];
|
|
84
|
+
metadata: {
|
|
85
|
+
sceneId: string;
|
|
86
|
+
buildVersion: string;
|
|
87
|
+
playerLevel?: number;
|
|
88
|
+
tags: string[];
|
|
89
|
+
};
|
|
90
|
+
/** Compressed size in bytes (if compressed) */
|
|
91
|
+
sizeBytes: number;
|
|
92
|
+
}
|
|
93
|
+
export interface SessionRecordingConfig {
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
/** Target frames per second for recording */
|
|
96
|
+
fps: number;
|
|
97
|
+
/** Max recording duration (ms, 0 = unlimited) */
|
|
98
|
+
maxDurationMs: number;
|
|
99
|
+
/** What events to record */
|
|
100
|
+
recordTypes: SessionEventType[];
|
|
101
|
+
/** Record player position every frame */
|
|
102
|
+
recordPosition: boolean;
|
|
103
|
+
/** Compress recording data */
|
|
104
|
+
compress: boolean;
|
|
105
|
+
}
|
|
106
|
+
export declare const DEFAULT_RECORDING_CONFIG: SessionRecordingConfig;
|
|
107
|
+
export interface FunnelStep {
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
description?: string;
|
|
111
|
+
/** Number of users/sessions that reached this step */
|
|
112
|
+
count: number;
|
|
113
|
+
/** Drop-off rate from previous step */
|
|
114
|
+
dropOffRate: number;
|
|
115
|
+
}
|
|
116
|
+
export interface FunnelDefinition {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
steps: {
|
|
120
|
+
id: string;
|
|
121
|
+
name: string;
|
|
122
|
+
eventName: string;
|
|
123
|
+
}[];
|
|
124
|
+
}
|
|
125
|
+
export declare class TelemetryPipeline {
|
|
126
|
+
private config;
|
|
127
|
+
private buffer;
|
|
128
|
+
private flushed;
|
|
129
|
+
private flushTimer;
|
|
130
|
+
private sessionId;
|
|
131
|
+
private eventCounter;
|
|
132
|
+
private eventBus;
|
|
133
|
+
constructor(eventBus: EventBus, config?: Partial<TelemetryConfig>);
|
|
134
|
+
private generateId;
|
|
135
|
+
/** Track a telemetry event */
|
|
136
|
+
track(category: TelemetryEventCategory, name: string, data?: Record<string, unknown>, position?: {
|
|
137
|
+
x: number;
|
|
138
|
+
y: number;
|
|
139
|
+
z?: number;
|
|
140
|
+
}): void;
|
|
141
|
+
/** Flush buffered events */
|
|
142
|
+
flush(): TelemetryEvent[];
|
|
143
|
+
private startFlushTimer;
|
|
144
|
+
/** Get all events (current buffer + flushed) */
|
|
145
|
+
getAllEvents(): TelemetryEvent[];
|
|
146
|
+
/** Get events by category */
|
|
147
|
+
getByCategory(category: TelemetryEventCategory): TelemetryEvent[];
|
|
148
|
+
/** Get event count by name */
|
|
149
|
+
countByName(name: string): number;
|
|
150
|
+
getSessionId(): string;
|
|
151
|
+
getBufferSize(): number;
|
|
152
|
+
getTotalEvents(): number;
|
|
153
|
+
clear(): void;
|
|
154
|
+
destroy(): void;
|
|
155
|
+
}
|
|
156
|
+
export declare class HeatmapGenerator {
|
|
157
|
+
private config;
|
|
158
|
+
private grid;
|
|
159
|
+
private totalEvents;
|
|
160
|
+
constructor(config?: Partial<HeatmapConfig>);
|
|
161
|
+
private cellKey;
|
|
162
|
+
private worldToCell;
|
|
163
|
+
/** Add an event at a world position */
|
|
164
|
+
addEvent(x: number, y: number, weight?: number): void;
|
|
165
|
+
/** Add events from telemetry data */
|
|
166
|
+
addFromTelemetry(events: TelemetryEvent[]): void;
|
|
167
|
+
/** Get the grid as an array of cells with normalized values */
|
|
168
|
+
getCells(): HeatmapCell[];
|
|
169
|
+
/** Apply Gaussian blur to the grid */
|
|
170
|
+
getBlurredCells(): HeatmapCell[];
|
|
171
|
+
/** Render heatmap to a canvas */
|
|
172
|
+
renderToCanvas(ctx: CanvasRenderingContext2D, width: number, height: number): void;
|
|
173
|
+
private interpolateColor;
|
|
174
|
+
private lerpColor;
|
|
175
|
+
getTotalEvents(): number;
|
|
176
|
+
getConfig(): Readonly<HeatmapConfig>;
|
|
177
|
+
clear(): void;
|
|
178
|
+
}
|
|
179
|
+
export declare class SessionRecorder {
|
|
180
|
+
private config;
|
|
181
|
+
private recording;
|
|
182
|
+
private frames;
|
|
183
|
+
private startedAt;
|
|
184
|
+
private lastFrameTime;
|
|
185
|
+
private pendingEvents;
|
|
186
|
+
private recordTimer;
|
|
187
|
+
private sessionId;
|
|
188
|
+
constructor(config?: Partial<SessionRecordingConfig>);
|
|
189
|
+
/** Start recording */
|
|
190
|
+
start(): void;
|
|
191
|
+
/** Stop recording and return the session */
|
|
192
|
+
stop(sceneId?: string, buildVersion?: string): SessionRecording;
|
|
193
|
+
/** Add an event to the current frame batch */
|
|
194
|
+
recordEvent(type: SessionEventType, data: Record<string, unknown>): void;
|
|
195
|
+
/** Record player position (convenience) */
|
|
196
|
+
recordPosition(x: number, y: number, z?: number): void;
|
|
197
|
+
private captureFrame;
|
|
198
|
+
isRecording(): boolean;
|
|
199
|
+
getFrameCount(): number;
|
|
200
|
+
getDurationMs(): number;
|
|
201
|
+
}
|
|
202
|
+
export declare class SessionPlayer {
|
|
203
|
+
private recording;
|
|
204
|
+
private currentFrame;
|
|
205
|
+
private playing;
|
|
206
|
+
private speed;
|
|
207
|
+
private playTimer;
|
|
208
|
+
private onFrame;
|
|
209
|
+
load(recording: SessionRecording): void;
|
|
210
|
+
/** Start playback */
|
|
211
|
+
play(onFrame: (frame: SessionFrame, index: number) => void): void;
|
|
212
|
+
private advanceFrame;
|
|
213
|
+
stop(): void;
|
|
214
|
+
pause(): void;
|
|
215
|
+
seek(frameIndex: number): void;
|
|
216
|
+
setSpeed(speed: number): void;
|
|
217
|
+
getProgress(): number;
|
|
218
|
+
isPlaying(): boolean;
|
|
219
|
+
}
|
|
220
|
+
export declare class FunnelTracker {
|
|
221
|
+
private funnels;
|
|
222
|
+
private progress;
|
|
223
|
+
define(funnel: FunnelDefinition): void;
|
|
224
|
+
/** Record that a session reached a funnel step */
|
|
225
|
+
recordStep(funnelId: string, stepEventName: string, sessionId: string): void;
|
|
226
|
+
/** Get funnel analysis */
|
|
227
|
+
analyze(funnelId: string): FunnelStep[];
|
|
228
|
+
getFunnels(): FunnelDefinition[];
|
|
229
|
+
}
|
|
230
|
+
export declare class GameplayAnalytics {
|
|
231
|
+
readonly telemetry: TelemetryPipeline;
|
|
232
|
+
readonly recorder: SessionRecorder;
|
|
233
|
+
readonly funnels: FunnelTracker;
|
|
234
|
+
private heatmaps;
|
|
235
|
+
private eventBus;
|
|
236
|
+
constructor(eventBus: EventBus, telemetryConfig?: Partial<TelemetryConfig>, recordingConfig?: Partial<SessionRecordingConfig>);
|
|
237
|
+
/** Create or get a heatmap */
|
|
238
|
+
heatmap(id: string, config?: Partial<HeatmapConfig>): HeatmapGenerator;
|
|
239
|
+
/** Track and automatically distribute to relevant heatmaps */
|
|
240
|
+
trackEvent(category: TelemetryEventCategory, name: string, data?: Record<string, unknown>, position?: {
|
|
241
|
+
x: number;
|
|
242
|
+
y: number;
|
|
243
|
+
z?: number;
|
|
244
|
+
}): void;
|
|
245
|
+
/** Get summary stats */
|
|
246
|
+
getSummary(): {
|
|
247
|
+
totalEvents: number;
|
|
248
|
+
sessionId: string;
|
|
249
|
+
heatmapCount: number;
|
|
250
|
+
isRecording: boolean;
|
|
251
|
+
recordedFrames: number;
|
|
252
|
+
};
|
|
253
|
+
destroy(): void;
|
|
254
|
+
}
|
|
255
|
+
export declare function useGameplayAnalytics(eventBus: EventBus, telemetryConfig?: Partial<TelemetryConfig>, recordingConfig?: Partial<SessionRecordingConfig>): {
|
|
256
|
+
analytics: GameplayAnalytics;
|
|
257
|
+
trackEvent: (category: TelemetryEventCategory, name: string, data?: Record<string, unknown>, position?: {
|
|
258
|
+
x: number;
|
|
259
|
+
y: number;
|
|
260
|
+
z?: number;
|
|
261
|
+
}) => void;
|
|
262
|
+
summary: {
|
|
263
|
+
totalEvents: number;
|
|
264
|
+
sessionId: string;
|
|
265
|
+
heatmapCount: number;
|
|
266
|
+
isRecording: boolean;
|
|
267
|
+
recordedFrames: number;
|
|
268
|
+
};
|
|
269
|
+
refreshSummary: () => void;
|
|
270
|
+
startRecording: () => void;
|
|
271
|
+
stopRecording: (sceneId?: string) => SessionRecording;
|
|
272
|
+
heatmap: (id: string, config?: Partial<HeatmapConfig>) => HeatmapGenerator;
|
|
273
|
+
};
|
|
274
|
+
export interface AnalyticsDashboardProps {
|
|
275
|
+
analytics: GameplayAnalytics;
|
|
276
|
+
className?: string;
|
|
277
|
+
style?: React.CSSProperties;
|
|
278
|
+
}
|
|
279
|
+
export declare const AnalyticsDashboard: React.FC<AnalyticsDashboardProps>;
|