@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
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import type { Vec2 } from '../core/types';
|
|
2
|
+
import { EventBus } from '../core/EventBus';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
/** Dialogue node types */
|
|
5
|
+
export type DialogueNodeType = 'start' | 'text' | 'choice' | 'branch' | 'set_variable' | 'check_variable' | 'event' | 'random' | 'end';
|
|
6
|
+
/** Variable types supported in dialogues */
|
|
7
|
+
export type DialogueVarType = 'boolean' | 'number' | 'string';
|
|
8
|
+
/** Comparison operators for conditions */
|
|
9
|
+
export type ComparisonOp = 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte' | 'contains' | 'startsWith' | 'endsWith';
|
|
10
|
+
/** Character emotion types */
|
|
11
|
+
export type EmotionType = 'neutral' | 'happy' | 'sad' | 'angry' | 'surprised' | 'scared' | 'disgusted' | 'confused' | 'thoughtful' | 'excited' | 'tired' | 'love' | 'custom';
|
|
12
|
+
/** Text effect types */
|
|
13
|
+
export type TextEffectType = 'none' | 'typewriter' | 'shake' | 'wave' | 'rainbow' | 'fade';
|
|
14
|
+
export interface DialogueVariable {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
type: DialogueVarType;
|
|
18
|
+
defaultValue: boolean | number | string;
|
|
19
|
+
description?: string;
|
|
20
|
+
persistent?: boolean;
|
|
21
|
+
scope: 'conversation' | 'global';
|
|
22
|
+
}
|
|
23
|
+
export interface VariableCondition {
|
|
24
|
+
variableId: string;
|
|
25
|
+
operator: ComparisonOp;
|
|
26
|
+
value: boolean | number | string;
|
|
27
|
+
}
|
|
28
|
+
export interface DialogueCharacter {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
displayName: string;
|
|
32
|
+
/** Portrait images per emotion */
|
|
33
|
+
portraits: Record<EmotionType, string>;
|
|
34
|
+
voiceId?: string;
|
|
35
|
+
defaultEmotion: EmotionType;
|
|
36
|
+
textColor?: string;
|
|
37
|
+
nameColor?: string;
|
|
38
|
+
textSpeed?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface DialogueNodeBase {
|
|
41
|
+
id: string;
|
|
42
|
+
type: DialogueNodeType;
|
|
43
|
+
position: Vec2;
|
|
44
|
+
comment?: string;
|
|
45
|
+
tags?: string[];
|
|
46
|
+
}
|
|
47
|
+
export interface StartNode extends DialogueNodeBase {
|
|
48
|
+
type: 'start';
|
|
49
|
+
label: string;
|
|
50
|
+
nextNode: string | null;
|
|
51
|
+
}
|
|
52
|
+
export interface TextNode extends DialogueNodeBase {
|
|
53
|
+
type: 'text';
|
|
54
|
+
characterId: string;
|
|
55
|
+
text: string;
|
|
56
|
+
emotion?: EmotionType;
|
|
57
|
+
textEffect?: TextEffectType;
|
|
58
|
+
audioClip?: string;
|
|
59
|
+
duration?: number;
|
|
60
|
+
nextNode: string | null;
|
|
61
|
+
}
|
|
62
|
+
export interface ChoiceOption {
|
|
63
|
+
id: string;
|
|
64
|
+
text: string;
|
|
65
|
+
nextNode: string | null;
|
|
66
|
+
conditions?: VariableCondition[];
|
|
67
|
+
/** Variables to set when this choice is selected */
|
|
68
|
+
setVariables?: {
|
|
69
|
+
variableId: string;
|
|
70
|
+
value: boolean | number | string;
|
|
71
|
+
}[];
|
|
72
|
+
disabled?: boolean;
|
|
73
|
+
tooltip?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ChoiceNode extends DialogueNodeBase {
|
|
76
|
+
type: 'choice';
|
|
77
|
+
characterId?: string;
|
|
78
|
+
prompt?: string;
|
|
79
|
+
options: ChoiceOption[];
|
|
80
|
+
timeout?: number;
|
|
81
|
+
defaultOption?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface BranchNode extends DialogueNodeBase {
|
|
84
|
+
type: 'branch';
|
|
85
|
+
conditions: VariableCondition[];
|
|
86
|
+
/** AND or OR logic for multiple conditions */
|
|
87
|
+
logic: 'and' | 'or';
|
|
88
|
+
trueNode: string | null;
|
|
89
|
+
falseNode: string | null;
|
|
90
|
+
}
|
|
91
|
+
export interface SetVariableNode extends DialogueNodeBase {
|
|
92
|
+
type: 'set_variable';
|
|
93
|
+
variableId: string;
|
|
94
|
+
operation: 'set' | 'add' | 'subtract' | 'multiply' | 'toggle' | 'append';
|
|
95
|
+
value: boolean | number | string;
|
|
96
|
+
nextNode: string | null;
|
|
97
|
+
}
|
|
98
|
+
export interface CheckVariableNode extends DialogueNodeBase {
|
|
99
|
+
type: 'check_variable';
|
|
100
|
+
conditions: VariableCondition[];
|
|
101
|
+
logic: 'and' | 'or';
|
|
102
|
+
trueNode: string | null;
|
|
103
|
+
falseNode: string | null;
|
|
104
|
+
}
|
|
105
|
+
export interface EventNode extends DialogueNodeBase {
|
|
106
|
+
type: 'event';
|
|
107
|
+
eventType: string;
|
|
108
|
+
eventData: Record<string, unknown>;
|
|
109
|
+
nextNode: string | null;
|
|
110
|
+
}
|
|
111
|
+
export interface RandomNode extends DialogueNodeBase {
|
|
112
|
+
type: 'random';
|
|
113
|
+
outputs: {
|
|
114
|
+
id: string;
|
|
115
|
+
weight: number;
|
|
116
|
+
nextNode: string | null;
|
|
117
|
+
}[];
|
|
118
|
+
}
|
|
119
|
+
export interface EndNode extends DialogueNodeBase {
|
|
120
|
+
type: 'end';
|
|
121
|
+
result?: 'success' | 'failure' | 'neutral';
|
|
122
|
+
setVariables?: {
|
|
123
|
+
variableId: string;
|
|
124
|
+
value: boolean | number | string;
|
|
125
|
+
}[];
|
|
126
|
+
}
|
|
127
|
+
export type DialogueNode = StartNode | TextNode | ChoiceNode | BranchNode | SetVariableNode | CheckVariableNode | EventNode | RandomNode | EndNode;
|
|
128
|
+
export interface DialogueTree {
|
|
129
|
+
id: string;
|
|
130
|
+
name: string;
|
|
131
|
+
description?: string;
|
|
132
|
+
version: string;
|
|
133
|
+
characters: DialogueCharacter[];
|
|
134
|
+
variables: DialogueVariable[];
|
|
135
|
+
nodes: DialogueNode[];
|
|
136
|
+
startNodeId: string;
|
|
137
|
+
metadata: {
|
|
138
|
+
author?: string;
|
|
139
|
+
created: string;
|
|
140
|
+
modified: string;
|
|
141
|
+
tags?: string[];
|
|
142
|
+
locale: string;
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export interface DialogueState {
|
|
146
|
+
treeId: string;
|
|
147
|
+
currentNodeId: string | null;
|
|
148
|
+
variables: Record<string, boolean | number | string>;
|
|
149
|
+
history: string[];
|
|
150
|
+
choicesMade: {
|
|
151
|
+
nodeId: string;
|
|
152
|
+
optionId: string;
|
|
153
|
+
timestamp: number;
|
|
154
|
+
}[];
|
|
155
|
+
startTime: number;
|
|
156
|
+
isActive: boolean;
|
|
157
|
+
isPaused: boolean;
|
|
158
|
+
}
|
|
159
|
+
export type DialogueEventType = 'dialogue:started' | 'dialogue:ended' | 'dialogue:node-entered' | 'dialogue:text-displayed' | 'dialogue:choice-selected' | 'dialogue:variable-changed' | 'dialogue:event-triggered' | 'dialogue:paused' | 'dialogue:resumed';
|
|
160
|
+
export interface DialogueEvent {
|
|
161
|
+
type: DialogueEventType;
|
|
162
|
+
treeId: string;
|
|
163
|
+
nodeId?: string;
|
|
164
|
+
data?: unknown;
|
|
165
|
+
timestamp: number;
|
|
166
|
+
}
|
|
167
|
+
export declare class DialogueEngine {
|
|
168
|
+
private trees;
|
|
169
|
+
private globalVariables;
|
|
170
|
+
private currentState;
|
|
171
|
+
private events;
|
|
172
|
+
private onTextCallback?;
|
|
173
|
+
private onChoiceCallback?;
|
|
174
|
+
private onEndCallback?;
|
|
175
|
+
constructor(events?: EventBus);
|
|
176
|
+
registerTree(tree: DialogueTree): void;
|
|
177
|
+
unregisterTree(treeId: string): void;
|
|
178
|
+
getTree(treeId: string): DialogueTree | undefined;
|
|
179
|
+
getAllTrees(): DialogueTree[];
|
|
180
|
+
setGlobalVariable(name: string, value: boolean | number | string): void;
|
|
181
|
+
getGlobalVariable(name: string): boolean | number | string | undefined;
|
|
182
|
+
getVariable(variableId: string): boolean | number | string | undefined;
|
|
183
|
+
private setVariable;
|
|
184
|
+
startDialogue(treeId: string, startLabel?: string): boolean;
|
|
185
|
+
endDialogue(): void;
|
|
186
|
+
pauseDialogue(): void;
|
|
187
|
+
resumeDialogue(): void;
|
|
188
|
+
getState(): DialogueState | null;
|
|
189
|
+
isActive(): boolean;
|
|
190
|
+
private goToNode;
|
|
191
|
+
private processNode;
|
|
192
|
+
private processTextNode;
|
|
193
|
+
private processChoiceNode;
|
|
194
|
+
private processBranchNode;
|
|
195
|
+
private processSetVariableNode;
|
|
196
|
+
private processEventNode;
|
|
197
|
+
private processRandomNode;
|
|
198
|
+
private processEndNode;
|
|
199
|
+
selectChoice(optionId: string): boolean;
|
|
200
|
+
/** Advance to next node (for text nodes) */
|
|
201
|
+
advance(): boolean;
|
|
202
|
+
private evaluateConditions;
|
|
203
|
+
private evaluateCondition;
|
|
204
|
+
onText(callback: (node: TextNode, character: DialogueCharacter) => void): void;
|
|
205
|
+
onChoice(callback: (node: ChoiceNode, options: ChoiceOption[]) => void): void;
|
|
206
|
+
onEnd(callback: (node: EndNode, state: DialogueState) => void): void;
|
|
207
|
+
private emitEvent;
|
|
208
|
+
subscribe(eventType: DialogueEventType, handler: (event: DialogueEvent) => void): () => void;
|
|
209
|
+
}
|
|
210
|
+
export declare class DialogueTreeBuilder {
|
|
211
|
+
private tree;
|
|
212
|
+
private nodeCounter;
|
|
213
|
+
constructor(id: string, name: string);
|
|
214
|
+
private generateId;
|
|
215
|
+
description(desc: string): this;
|
|
216
|
+
author(author: string): this;
|
|
217
|
+
locale(locale: string): this;
|
|
218
|
+
tags(tags: string[]): this;
|
|
219
|
+
addCharacter(character: DialogueCharacter): this;
|
|
220
|
+
addVariable(variable: DialogueVariable): this;
|
|
221
|
+
boolVar(id: string, name: string, defaultValue?: boolean, scope?: 'conversation' | 'global'): this;
|
|
222
|
+
numVar(id: string, name: string, defaultValue?: number, scope?: 'conversation' | 'global'): this;
|
|
223
|
+
strVar(id: string, name: string, defaultValue?: string, scope?: 'conversation' | 'global'): this;
|
|
224
|
+
addStart(label: string, nextNode?: string | null, position?: Vec2): this;
|
|
225
|
+
addText(characterId: string, text: string, nextNode?: string | null, options?: Partial<Omit<TextNode, 'id' | 'type' | 'characterId' | 'text' | 'nextNode'>>): this;
|
|
226
|
+
addChoice(options: ChoiceOption[], settings?: Partial<Omit<ChoiceNode, 'id' | 'type' | 'options'>>): this;
|
|
227
|
+
addBranch(conditions: VariableCondition[], trueNode: string | null, falseNode: string | null, logic?: 'and' | 'or', position?: Vec2): this;
|
|
228
|
+
addSetVariable(variableId: string, operation: SetVariableNode['operation'], value: boolean | number | string, nextNode?: string | null, position?: Vec2): this;
|
|
229
|
+
addEvent(eventType: string, eventData: Record<string, unknown>, nextNode?: string | null, position?: Vec2): this;
|
|
230
|
+
addRandom(outputs: {
|
|
231
|
+
weight: number;
|
|
232
|
+
nextNode: string | null;
|
|
233
|
+
}[], position?: Vec2): this;
|
|
234
|
+
addEnd(result?: EndNode['result'], setVariables?: EndNode['setVariables'], position?: Vec2): this;
|
|
235
|
+
build(): DialogueTree;
|
|
236
|
+
/** Get the ID of the last added node */
|
|
237
|
+
lastNodeId(): string;
|
|
238
|
+
/** Get node by index (1-based for readability) */
|
|
239
|
+
nodeId(index: number): string;
|
|
240
|
+
}
|
|
241
|
+
export interface DialogueBoxProps {
|
|
242
|
+
/** The text to display */
|
|
243
|
+
text: string;
|
|
244
|
+
/** Character name */
|
|
245
|
+
characterName?: string;
|
|
246
|
+
/** Character portrait URL */
|
|
247
|
+
portrait?: string;
|
|
248
|
+
/** Emotion for styling */
|
|
249
|
+
emotion?: EmotionType;
|
|
250
|
+
/** Text effect */
|
|
251
|
+
textEffect?: TextEffectType;
|
|
252
|
+
/** Characters per second for typewriter effect */
|
|
253
|
+
textSpeed?: number;
|
|
254
|
+
/** Called when text fully displayed */
|
|
255
|
+
onComplete?: () => void;
|
|
256
|
+
/** Called when user clicks to advance */
|
|
257
|
+
onAdvance?: () => void;
|
|
258
|
+
/** Custom styles */
|
|
259
|
+
className?: string;
|
|
260
|
+
style?: React.CSSProperties;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* React hook for typewriter text effect
|
|
264
|
+
*/
|
|
265
|
+
export declare function useTypewriter(text: string, speed?: number, enabled?: boolean): {
|
|
266
|
+
displayedText: string;
|
|
267
|
+
isComplete: boolean;
|
|
268
|
+
skip: () => void;
|
|
269
|
+
};
|
|
270
|
+
/**
|
|
271
|
+
* DialogueBox component for displaying dialogue text
|
|
272
|
+
*/
|
|
273
|
+
export declare const DialogueBox: React.FC<DialogueBoxProps>;
|
|
274
|
+
export interface ChoiceListProps {
|
|
275
|
+
/** Available choices */
|
|
276
|
+
options: ChoiceOption[];
|
|
277
|
+
/** Prompt text */
|
|
278
|
+
prompt?: string;
|
|
279
|
+
/** Called when a choice is selected */
|
|
280
|
+
onSelect: (optionId: string) => void;
|
|
281
|
+
/** Timeout in ms (optional) */
|
|
282
|
+
timeout?: number;
|
|
283
|
+
/** Custom styles */
|
|
284
|
+
className?: string;
|
|
285
|
+
style?: React.CSSProperties;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* ChoiceList component for displaying dialogue choices
|
|
289
|
+
*/
|
|
290
|
+
export declare const ChoiceList: React.FC<ChoiceListProps>;
|
|
291
|
+
/**
|
|
292
|
+
* Serialize dialogue tree to JSON string
|
|
293
|
+
*/
|
|
294
|
+
export declare function serializeDialogueTree(tree: DialogueTree): string;
|
|
295
|
+
/**
|
|
296
|
+
* Deserialize dialogue tree from JSON string
|
|
297
|
+
*/
|
|
298
|
+
export declare function deserializeDialogueTree(json: string): DialogueTree;
|
|
299
|
+
/**
|
|
300
|
+
* Validate dialogue tree structure
|
|
301
|
+
*/
|
|
302
|
+
export declare function validateDialogueTree(tree: unknown): DialogueTree;
|
|
303
|
+
/**
|
|
304
|
+
* Find unreachable nodes in dialogue tree
|
|
305
|
+
*/
|
|
306
|
+
export declare function findUnreachableNodes(tree: DialogueTree): string[];
|
|
307
|
+
export interface DialogueLocalization {
|
|
308
|
+
treeId: string;
|
|
309
|
+
locale: string;
|
|
310
|
+
texts: Record<string, string>;
|
|
311
|
+
characterNames: Record<string, string>;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Extract all translatable strings from a dialogue tree
|
|
315
|
+
*/
|
|
316
|
+
export declare function extractTranslatableStrings(tree: DialogueTree): {
|
|
317
|
+
nodeTexts: Record<string, string>;
|
|
318
|
+
characterNames: Record<string, string>;
|
|
319
|
+
};
|
|
320
|
+
/**
|
|
321
|
+
* Apply localization to a dialogue tree (creates a copy)
|
|
322
|
+
*/
|
|
323
|
+
export declare function applyLocalization(tree: DialogueTree, localization: DialogueLocalization): DialogueTree;
|
|
324
|
+
export declare const DEFAULT_TEXT_SPEED = 50;
|
|
325
|
+
export declare const EMOTION_COLORS: Record<EmotionType, string>;
|
|
326
|
+
export declare function createEmptyDialogueTree(id: string, name: string): DialogueTree;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { DialogueEngine, DialogueTreeBuilder, DialogueBox, ChoiceList, useTypewriter, serializeDialogueTree, deserializeDialogueTree, validateDialogueTree, findUnreachableNodes, extractTranslatableStrings, applyLocalization, DEFAULT_TEXT_SPEED, EMOTION_COLORS, createEmptyDialogueTree, } from './DialogueSystem';
|
|
2
|
+
export type { DialogueNodeType, DialogueNode, DialogueNodeBase, StartNode, TextNode, ChoiceNode, ChoiceOption, BranchNode, SetVariableNode, CheckVariableNode, EventNode, RandomNode, EndNode, DialogueVarType, DialogueVariable, VariableCondition, ComparisonOp, DialogueCharacter, EmotionType, TextEffectType, DialogueTree, DialogueState, DialogueEventType, DialogueEvent, DialogueLocalization, DialogueBoxProps, ChoiceListProps, } from './DialogueSystem';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { GameProject, EntityId } from '../core/types';
|
|
3
3
|
import { EventBus } from '../core/EventBus';
|
|
4
|
-
import { World } from '../ecs/World';
|
|
4
|
+
import { World, type ComponentMap } from '../ecs/World';
|
|
5
5
|
import { SceneManager } from '../scene/SceneManager';
|
|
6
6
|
export interface UndoEntry {
|
|
7
7
|
description: string;
|
|
@@ -94,6 +94,12 @@ type EditorAction = {
|
|
|
94
94
|
} | {
|
|
95
95
|
type: 'MARK_CLEAN';
|
|
96
96
|
};
|
|
97
|
+
export interface ConsoleEntry {
|
|
98
|
+
id: number;
|
|
99
|
+
level: 'info' | 'warn' | 'error';
|
|
100
|
+
message: string;
|
|
101
|
+
timestamp: number;
|
|
102
|
+
}
|
|
97
103
|
export interface EditorContextValue {
|
|
98
104
|
state: EditorState;
|
|
99
105
|
dispatch: React.Dispatch<EditorAction>;
|
|
@@ -101,6 +107,11 @@ export interface EditorContextValue {
|
|
|
101
107
|
undoStack: UndoStack;
|
|
102
108
|
sceneManager: SceneManager;
|
|
103
109
|
events: EventBus;
|
|
110
|
+
worldVersion: number;
|
|
111
|
+
refreshWorld: () => void;
|
|
112
|
+
createNewEntity: (name: string, components?: (keyof ComponentMap)[]) => number;
|
|
113
|
+
consoleLogs: ConsoleEntry[];
|
|
114
|
+
addLog: (level: ConsoleEntry['level'], message: string) => void;
|
|
104
115
|
}
|
|
105
116
|
export declare function useEditor(): EditorContextValue;
|
|
106
117
|
export declare function serializeProject(project: GameProject): string;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { EventBus } from '../core/EventBus';
|
|
2
|
+
export type SaveSlotType = 'manual' | 'auto' | 'checkpoint' | 'quick';
|
|
3
|
+
export type SaveConflictStrategy = 'local-wins' | 'remote-wins' | 'newest-wins' | 'merge' | 'prompt-user';
|
|
4
|
+
export type SaveStorageBackend = 'indexeddb' | 'localstorage' | 'filesystem' | 'cloud';
|
|
5
|
+
export type MigrationDirection = 'up' | 'down';
|
|
6
|
+
export interface SaveSlotMeta {
|
|
7
|
+
slotId: string;
|
|
8
|
+
type: SaveSlotType;
|
|
9
|
+
label: string;
|
|
10
|
+
schemaVersion: number;
|
|
11
|
+
createdAt: number;
|
|
12
|
+
updatedAt: number;
|
|
13
|
+
playtimeMs: number;
|
|
14
|
+
/** Scene/level the player was in */
|
|
15
|
+
location: string;
|
|
16
|
+
/** Preview thumbnail (data URL) */
|
|
17
|
+
thumbnail?: string;
|
|
18
|
+
/** Compressed size in bytes */
|
|
19
|
+
sizeBytes: number;
|
|
20
|
+
/** CRC32 checksum */
|
|
21
|
+
checksum: number;
|
|
22
|
+
/** Cloud sync status */
|
|
23
|
+
cloudSynced: boolean;
|
|
24
|
+
cloudTimestamp?: number;
|
|
25
|
+
/** Custom tags for filtering */
|
|
26
|
+
tags: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface SaveData {
|
|
29
|
+
meta: SaveSlotMeta;
|
|
30
|
+
payload: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface SaveMigration {
|
|
33
|
+
fromVersion: number;
|
|
34
|
+
toVersion: number;
|
|
35
|
+
description: string;
|
|
36
|
+
/** Transform the payload from one version to the next */
|
|
37
|
+
migrate: (payload: Record<string, unknown>) => Record<string, unknown>;
|
|
38
|
+
/** Optional rollback */
|
|
39
|
+
rollback?: (payload: Record<string, unknown>) => Record<string, unknown>;
|
|
40
|
+
}
|
|
41
|
+
export interface CloudSyncConfig {
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
endpoint?: string;
|
|
44
|
+
apiKey?: string;
|
|
45
|
+
conflictStrategy: SaveConflictStrategy;
|
|
46
|
+
syncIntervalMs: number;
|
|
47
|
+
maxCloudSlots: number;
|
|
48
|
+
}
|
|
49
|
+
export interface AutoSaveConfig {
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
intervalMs: number;
|
|
52
|
+
maxAutoSaves: number;
|
|
53
|
+
/** Only auto-save when game state is "safe" (not in combat, etc.) */
|
|
54
|
+
requireSafeState: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface SaveSystemConfig {
|
|
57
|
+
schemaVersion: number;
|
|
58
|
+
storageBackend: SaveStorageBackend;
|
|
59
|
+
storageKey: string;
|
|
60
|
+
maxSlots: number;
|
|
61
|
+
compressionEnabled: boolean;
|
|
62
|
+
autoSave: AutoSaveConfig;
|
|
63
|
+
cloud: CloudSyncConfig;
|
|
64
|
+
}
|
|
65
|
+
export declare const DEFAULT_SAVE_CONFIG: SaveSystemConfig;
|
|
66
|
+
export interface SaveConflict {
|
|
67
|
+
slotId: string;
|
|
68
|
+
localMeta: SaveSlotMeta;
|
|
69
|
+
remoteMeta: SaveSlotMeta;
|
|
70
|
+
resolvedWith?: SaveConflictStrategy;
|
|
71
|
+
}
|
|
72
|
+
export interface SaveResult {
|
|
73
|
+
success: boolean;
|
|
74
|
+
slotId: string;
|
|
75
|
+
sizeBytes: number;
|
|
76
|
+
compressed: boolean;
|
|
77
|
+
error?: string;
|
|
78
|
+
}
|
|
79
|
+
/** Simple compression for JSON save data (dictionary-based) */
|
|
80
|
+
export declare function compressSaveData(json: string): Uint8Array;
|
|
81
|
+
/** Decompress save data */
|
|
82
|
+
export declare function decompressSaveData(data: Uint8Array): string;
|
|
83
|
+
export declare function crc32(data: Uint8Array): number;
|
|
84
|
+
export declare class MigrationEngine {
|
|
85
|
+
private migrations;
|
|
86
|
+
register(migration: SaveMigration): void;
|
|
87
|
+
/** Migrate payload from fromVersion to toVersion */
|
|
88
|
+
migrate(payload: Record<string, unknown>, fromVersion: number, toVersion: number): {
|
|
89
|
+
payload: Record<string, unknown>;
|
|
90
|
+
applied: string[];
|
|
91
|
+
};
|
|
92
|
+
getRegistered(): readonly SaveMigration[];
|
|
93
|
+
canMigrate(from: number, to: number): boolean;
|
|
94
|
+
}
|
|
95
|
+
export declare class SaveSystemV2 {
|
|
96
|
+
private config;
|
|
97
|
+
private migrationEngine;
|
|
98
|
+
private eventBus;
|
|
99
|
+
private slots;
|
|
100
|
+
private autoSaveTimer;
|
|
101
|
+
private autoSaveCounter;
|
|
102
|
+
private safeToSave;
|
|
103
|
+
constructor(eventBus: EventBus, config?: Partial<SaveSystemConfig>);
|
|
104
|
+
private setupEventHandlers;
|
|
105
|
+
/** Register a schema migration */
|
|
106
|
+
registerMigration(migration: SaveMigration): void;
|
|
107
|
+
/** Save game state to a slot */
|
|
108
|
+
save(slotId: string, payload: Record<string, unknown>, options?: {
|
|
109
|
+
type?: SaveSlotType;
|
|
110
|
+
label?: string;
|
|
111
|
+
location?: string;
|
|
112
|
+
thumbnail?: string;
|
|
113
|
+
tags?: string[];
|
|
114
|
+
}): SaveResult;
|
|
115
|
+
/** Load game state from a slot */
|
|
116
|
+
load(slotId: string): {
|
|
117
|
+
payload: Record<string, unknown>;
|
|
118
|
+
meta: SaveSlotMeta;
|
|
119
|
+
migrated: boolean;
|
|
120
|
+
} | null;
|
|
121
|
+
/** Delete a save slot */
|
|
122
|
+
delete(slotId: string): boolean;
|
|
123
|
+
/** List all save slot metadata (sorted by updatedAt desc) */
|
|
124
|
+
listSlots(): SaveSlotMeta[];
|
|
125
|
+
/** Get slot metadata without loading payload */
|
|
126
|
+
getSlotMeta(slotId: string): SaveSlotMeta | null;
|
|
127
|
+
/** Check if a slot exists */
|
|
128
|
+
hasSlot(slotId: string): boolean;
|
|
129
|
+
/** Start auto-save timer */
|
|
130
|
+
startAutoSave(getPayload: () => Record<string, unknown>, getLocation: () => string): void;
|
|
131
|
+
/** Stop auto-save */
|
|
132
|
+
stopAutoSave(): void;
|
|
133
|
+
/** Quick save (overwriting the single quick save slot) */
|
|
134
|
+
quickSave(payload: Record<string, unknown>, location: string): SaveResult;
|
|
135
|
+
/** Quick load */
|
|
136
|
+
quickLoad(): ReturnType<SaveSystemV2['load']>;
|
|
137
|
+
/** Sync local saves to cloud (stub — needs actual endpoint) */
|
|
138
|
+
syncToCloud(): Promise<{
|
|
139
|
+
synced: string[];
|
|
140
|
+
conflicts: SaveConflict[];
|
|
141
|
+
}>;
|
|
142
|
+
/** Resolve a cloud sync conflict */
|
|
143
|
+
resolveConflict(conflict: SaveConflict, strategy: SaveConflictStrategy): SaveSlotMeta;
|
|
144
|
+
private persistSlot;
|
|
145
|
+
private removeFromStorage;
|
|
146
|
+
/** Load all slots from storage backend */
|
|
147
|
+
loadFromStorage(): Promise<number>;
|
|
148
|
+
/** Export all saves as a downloadable blob */
|
|
149
|
+
exportAll(): Blob;
|
|
150
|
+
/** Import saves from a blob */
|
|
151
|
+
importAll(blob: Blob): Promise<number>;
|
|
152
|
+
getConfig(): Readonly<SaveSystemConfig>;
|
|
153
|
+
getMigrationEngine(): MigrationEngine;
|
|
154
|
+
destroy(): void;
|
|
155
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { v2 } from './core/math';
|
|
|
8
8
|
export { World, System, createDefaultComponent, } from './ecs/World';
|
|
9
9
|
export type { Entity, ComponentMap, BuiltInComponent, TransformComponent, SpriteComponent, ShapeComponent, Collider2DComponent, RigidBody2DComponent, TextComponent, AnimatorComponent, ScriptComponent, AudioSourceComponent, ParticleEmitterComponent, CameraTargetComponent, SpriteAnimation, AnimationFrame, } from './ecs/World';
|
|
10
10
|
export { InputManager, PRESET_PLATFORMER, PRESET_TOPDOWN, PRESET_TWIN_STICK } from './input/InputManager';
|
|
11
|
-
export { GamepadNavigationProvider, useGamepadNavigation } from './input/GamepadNavigation';
|
|
11
|
+
export { GamepadNavigationProvider as NiceGamepadNavigationProvider, GamepadNavigationProvider, useGamepadNavigation } from './input/GamepadNavigation';
|
|
12
12
|
export type { FocusableMeta, GamepadNavigationContextType } from './input/GamepadNavigation';
|
|
13
13
|
export { useGamepads, useGamepadEdges } from './input/useGamepads';
|
|
14
14
|
export type { GamepadSnapshot } from './input/useGamepads';
|
|
@@ -18,13 +18,13 @@ export { Renderer2D, RenderSystem } from './rendering/Renderer2D';
|
|
|
18
18
|
export { PhysicsEngine2D, PhysicsSystem } from './physics/PhysicsEngine2D';
|
|
19
19
|
export { SceneManager } from './scene/SceneManager';
|
|
20
20
|
export type { SceneConfig, SceneTransition, TransitionType, PrefabDef } from './scene/SceneManager';
|
|
21
|
-
export { GameUI } from './ui/GameUI';
|
|
21
|
+
export { GameUI as NiceGameUI, GameUI } from './ui/GameUI';
|
|
22
22
|
export type { UIElement, UIStyle, UITheme, UIAnchor, UIElementType } from './ui/GameUI';
|
|
23
23
|
export { PlayerManager, SplitScreenManager, PLAYER_COLORS } from './multiplayer/LocalMultiplayer';
|
|
24
24
|
export type { Player, Viewport } from './multiplayer/LocalMultiplayer';
|
|
25
25
|
export { GameRegistry, gameRegistry, MINI_PLAYER_COLORS, MINI_PLAYER_NAMES, KEYBOARD_GROUPS, DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, } from './multiplayer/MiniGameTypes';
|
|
26
26
|
export type { PlayerSlot, InputSource, Dir, KeyboardGroup, MiniGameMeta, MiniGameConfig, } from './multiplayer/MiniGameTypes';
|
|
27
|
-
export { SeededRandom, PerlinNoise, WaveGenerator, LootTable, ProceduralSprite } from './procedural/Procedural';
|
|
27
|
+
export { SeededRandom, PerlinNoise, WaveGenerator, LootTable as ProceduralLootTable, ProceduralSprite } from './procedural/Procedural';
|
|
28
28
|
export type { WaveEntry, WaveConfig, LootDrop } from './procedural/Procedural';
|
|
29
29
|
export { NiceGameEngine } from './engine/NiceGameEngine';
|
|
30
30
|
export type { EngineOptions } from './engine/NiceGameEngine';
|
|
@@ -60,6 +60,8 @@ export { DEFAULT_MATCH3_CONFIG, createMatch3Board, findMatches, removeMatches, a
|
|
|
60
60
|
export type { Match3Config, GemType, Match3Board, BlockPuzzleConfig, BlockPuzzleState, PhysicsPuzzleConfig, PuzzleLevelDef, HiddenObjectConfig, HiddenObjectDef, HiddenObjectLevel, CardDef, DeckConfig, } from './templates/PuzzleTemplates';
|
|
61
61
|
export { DEFAULT_RPG_CONFIG, xpForLevel, createInventory, addItem, DEFAULT_VISUAL_NOVEL_CONFIG, parseVNLabels, createVNState, DEFAULT_POINT_AND_CLICK_CONFIG, DEFAULT_ROGUELIKE_CONFIG, generateDungeon, computeFOV, DEFAULT_DUNGEON_CRAWLER_CONFIG, } from './templates/RPGTemplates';
|
|
62
62
|
export type { RPGConfig, RPGStats, RPGCharacter, StatusEffect, ItemDef, Inventory, VisualNovelConfig, VNCommandType, VNCommand, VNChoice, VNScript, VNState, PointAndClickConfig, Hotspot, RoomDef, RoguelikeConfig, TileType, DungeonRoom, DungeonCrawlerConfig, DungeonFloorDef, } from './templates/RPGTemplates';
|
|
63
|
+
export { InventoryManager, InventoryProvider, useInventoryManager, useContainer, useEquipment, } from './inventory/InventorySystem';
|
|
64
|
+
export type { ItemRarity, ItemCategory, EquipmentSlot, StatType, ContainerType, StatModifier, ItemDefinition, ItemInstance, InventorySlot, Container, EquipmentState, CraftingIngredient, CraftingRecipe, LootEntry, LootTable, ShopListing, Shop, InventoryEventType, InventoryEvent, InventoryManagerConfig, InventorySnapshot, } from './inventory/InventorySystem';
|
|
63
65
|
export { DEFAULT_TOP_DOWN_RACING_CONFIG, createRacerState, updateRacer, DEFAULT_SIDE_SCROLLER_RACING_CONFIG, DEFAULT_SOCCER_CONFIG, DEFAULT_BASKETBALL_CONFIG, createSportsState, DEFAULT_GOLF_CONFIG, DEFAULT_BILLIARDS_CONFIG, updateBilliardsBalls, DEFAULT_RHYTHM_CONFIG, createRhythmState, judgeHit, applyHitResult, } from './templates/SportsTemplates';
|
|
64
66
|
export type { TopDownRacingConfig, RacerState, TrackCheckpoint, SideScrollerRacingConfig, SportType, SportsConfig, SportsState, GolfConfig, BilliardsConfig, BilliardsBall, RhythmConfig, NoteType, RhythmNote, RhythmChart, RhythmState, } from './templates/SportsTemplates';
|
|
65
67
|
export { DEFAULT_TOWER_DEFENSE_CONFIG, createTDState, DEFAULT_RTS_CONFIG, createRTSState, DEFAULT_TACTICS_CONFIG, createTurnOrder, nextUnit, DEFAULT_CITY_BUILDER_CONFIG, createCityState, updateCity, DEFAULT_IDLE_CONFIG, createIdleState, getGeneratorCost, getIdleIncome, formatNumber, } from './templates/StrategyTemplates';
|
|
@@ -125,3 +127,17 @@ export { GuidedWizard, BlockEditor, KID_BLOCK_PALETTES, } from './kids/KidTools'
|
|
|
125
127
|
export type { WizardChoice, WizardStep, WizardResult, BlockShape, DragBlock, BlockPalette, DragDropState, } from './kids/KidTools';
|
|
126
128
|
export { BenchmarkRunner, BUILTIN_BENCHMARKS, } from './performance/BenchmarkSuite';
|
|
127
129
|
export type { BenchmarkScenario, BenchmarkTimings, BenchmarkMemory, BenchmarkResult as BenchmarkScenarioResult, BenchmarkReport, RegressionResult, } from './performance/BenchmarkSuite';
|
|
130
|
+
export { iconToSvgString, svgToDataUrl, loadSvgImage, rasterizeSvg, getIconTextureId, registerIconTexture, registerIconCanvasTexture, createIconEntity, createIconAnimationClip, CHARACTER_ANIMATION_STATES, OBJECT_ANIMATION_STATES, registerIconAnimationSet, createIconAnimator, registerIconCatalog, } from './integration/IconSprite';
|
|
131
|
+
export type { IconComponent, IconComponentProps, IconSpriteOptions, IconEntityOptions, IconAnimationFrame, IconAnimationSheetOptions, IconCatalogEntry, } from './integration/IconSprite';
|
|
132
|
+
export { STANDARD_VERTEX_LAYOUT, INSTANCE_LAYOUT, DEFAULT_PBR, DEFAULT_RENDER_CONFIG, GPUResourceTracker, RenderPipelineManager, WebGPURenderer, PostProcessStack, BLOOM_DEFAULTS, FXAA_DEFAULTS, SSAO_DEFAULTS, DOF_DEFAULTS, COLOR_GRADING_DEFAULTS, QUALITY_PRESET_CONFIGS, applyQualityPreset, } from './rendering/WebGPURenderPipeline';
|
|
133
|
+
export type { GPUTextureFormatType, GPUBlendModeType, ToneMappingMode, MaterialType, RenderPassType, LightCategory, PostEffectType, VertexAttribute, VertexBufferLayout, GPUTextureRef, PBRMaterial, UnlitMaterial, SpriteMaterial, CustomMaterial, RenderMaterial, GPULight, RenderBatch, ClusteredLightConfig, ShadowConfig, PostProcessConfig, PostEffectSettings, WebGPURenderConfig, GPUResourceHandle, GPUStats, RenderPassDescriptor, WebGPURendererState, PostProcessPass, QualityPreset, } from './rendering/WebGPURenderPipeline';
|
|
134
|
+
export { AudioBusMixer, SFXPool, MusicManager, GameAudioBridge, useGameAudio, GameAudioSettings, DEFAULT_SPATIAL, } from './audio/AudioBridge';
|
|
135
|
+
export type { AudioBusType, SpatialModel, AudioPoolStrategy, AudioBusConfig, AudioEffectNode, SpatialAudioConfig, AudioPoolConfig, GameAudioEvent, MusicTrack, MusicCrossfadeConfig, AdaptiveAudioRule, AudioSnapshot, GameAudioSettingsProps, } from './audio/AudioBridge';
|
|
136
|
+
export { DialogueEngine, DialogueTreeBuilder, useTypewriter, DialogueBox, ChoiceList, serializeDialogueTree, deserializeDialogueTree, validateDialogueTree, findUnreachableNodes, extractTranslatableStrings, applyLocalization, DEFAULT_TEXT_SPEED, EMOTION_COLORS, createEmptyDialogueTree, } from './dialogue/DialogueSystem';
|
|
137
|
+
export type { DialogueNodeType, DialogueVarType, ComparisonOp, EmotionType, TextEffectType, DialogueVariable, VariableCondition, DialogueCharacter, DialogueNodeBase, StartNode, TextNode, ChoiceOption, ChoiceNode, BranchNode, SetVariableNode, CheckVariableNode, EventNode, RandomNode, EndNode, DialogueNode, DialogueTree, } from './dialogue/DialogueSystem';
|
|
138
|
+
export { QuestManager, QuestBuilder, QuestList, QuestTracker, createEmptyQuest, DIFFICULTY_COLORS, DIFFICULTY_XP_MULTIPLIERS, } from './quest/QuestSystem';
|
|
139
|
+
export type { QuestType, QuestStatus, QuestDifficulty, QuestPrerequisite, Quest, QuestState as QuestSystemState, QuestJournal as QuestSystemJournal, QuestEventType, QuestEvent, QuestListProps, QuestTrackerProps, RewardType as QuestRewardType, } from './quest/QuestSystem';
|
|
140
|
+
export { compressSaveData, decompressSaveData, crc32, MigrationEngine, SaveSystemV2, DEFAULT_SAVE_CONFIG, } from './engine/SaveSystemV2';
|
|
141
|
+
export type { SaveSlotType, SaveConflictStrategy, SaveStorageBackend, MigrationDirection, SaveSlotMeta, SaveData, SaveMigration, CloudSyncConfig, AutoSaveConfig, SaveSystemConfig, SaveConflict, SaveResult, } from './engine/SaveSystemV2';
|
|
142
|
+
export { TelemetryPipeline, HeatmapGenerator, SessionRecorder, SessionPlayer, FunnelTracker, GameplayAnalytics, useGameplayAnalytics, AnalyticsDashboard, DEFAULT_TELEMETRY_CONFIG, DEFAULT_HEATMAP_CONFIG, DEFAULT_RECORDING_CONFIG, } from './devtools/GameplayAnalytics';
|
|
143
|
+
export type { TelemetryEventCategory, HeatmapType, SessionEventType, TelemetryEvent, TelemetryConfig, HeatmapConfig, HeatmapCell, SessionFrame, SessionRecordedEvent, SessionRecording, SessionRecordingConfig, FunnelStep, FunnelDefinition, AnalyticsDashboardProps, } from './devtools/GameplayAnalytics';
|