@nice2dev/game-engine 1.0.2 → 1.0.3
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/dist/cjs/ai/BehaviorTree.js +1215 -0
- package/dist/cjs/ai/BehaviorTree.js.map +1 -0
- package/dist/cjs/ai/StateMachine.js +783 -0
- package/dist/cjs/ai/StateMachine.js.map +1 -0
- package/dist/cjs/editor/ShaderGraph.js +1616 -0
- package/dist/cjs/editor/ShaderGraph.js.map +1 -0
- package/dist/cjs/editor/TimelineEditor.js +819 -0
- package/dist/cjs/editor/TimelineEditor.js.map +1 -0
- package/dist/cjs/export/GodotExporter.js +1102 -0
- package/dist/cjs/export/GodotExporter.js.map +1 -0
- package/dist/cjs/export/PlatformExporter.js +236 -0
- package/dist/cjs/export/PlatformExporter.js.map +1 -0
- package/dist/cjs/export/ThreeJSExporter.js +1116 -0
- package/dist/cjs/export/ThreeJSExporter.js.map +1 -0
- package/dist/cjs/export/UnityExporter.js +1193 -0
- package/dist/cjs/export/UnityExporter.js.map +1 -0
- package/dist/cjs/export/WebExporter.js +1036 -0
- package/dist/cjs/export/WebExporter.js.map +1 -0
- package/dist/cjs/export/index.js +58 -0
- package/dist/cjs/export/index.js.map +1 -0
- package/dist/cjs/import/AsepriteImporter.js +761 -0
- package/dist/cjs/import/AsepriteImporter.js.map +1 -0
- package/dist/cjs/import/DragonBonesImporter.js +499 -0
- package/dist/cjs/import/DragonBonesImporter.js.map +1 -0
- package/dist/cjs/import/GameMakerImporter.js +559 -0
- package/dist/cjs/import/GameMakerImporter.js.map +1 -0
- package/dist/cjs/import/GodotSceneImporter.js +824 -0
- package/dist/cjs/import/GodotSceneImporter.js.map +1 -0
- package/dist/cjs/import/LDtkImporter.js +481 -0
- package/dist/cjs/import/LDtkImporter.js.map +1 -0
- package/dist/cjs/import/Live2DImporter.js +553 -0
- package/dist/cjs/import/Live2DImporter.js.map +1 -0
- package/dist/cjs/import/NdgFormat.js +499 -0
- package/dist/cjs/import/NdgFormat.js.map +1 -0
- package/dist/cjs/import/OgmoImporter.js +529 -0
- package/dist/cjs/import/OgmoImporter.js.map +1 -0
- package/dist/cjs/import/RPGMakerImporter.js +520 -0
- package/dist/cjs/import/RPGMakerImporter.js.map +1 -0
- package/dist/cjs/import/SceneImporter.js +449 -0
- package/dist/cjs/import/SceneImporter.js.map +1 -0
- package/dist/cjs/import/SpineImporter.js +583 -0
- package/dist/cjs/import/SpineImporter.js.map +1 -0
- package/dist/cjs/import/SpriterImporter.js +652 -0
- package/dist/cjs/import/SpriterImporter.js.map +1 -0
- package/dist/cjs/import/TiledMapImporter.js +859 -0
- package/dist/cjs/import/TiledMapImporter.js.map +1 -0
- package/dist/cjs/import/UnitySceneImporter.js +732 -0
- package/dist/cjs/import/UnitySceneImporter.js.map +1 -0
- package/dist/cjs/import/index.js +305 -0
- package/dist/cjs/import/index.js.map +1 -0
- package/dist/cjs/index.js +201 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/scripting/GraphToAST.js +567 -0
- package/dist/cjs/scripting/GraphToAST.js.map +1 -0
- package/dist/cjs/scripting/LanguageExporter.js +321 -0
- package/dist/cjs/scripting/LanguageExporter.js.map +1 -0
- package/dist/cjs/scripting/ScriptAST.js +67 -0
- package/dist/cjs/scripting/ScriptAST.js.map +1 -0
- package/dist/cjs/scripting/VisualScripting2.js +1140 -0
- package/dist/cjs/scripting/VisualScripting2.js.map +1 -0
- package/dist/cjs/scripting/exporters/CSharpExporter.js +503 -0
- package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -0
- package/dist/cjs/scripting/exporters/GDScriptExporter.js +452 -0
- package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -0
- package/dist/cjs/scripting/exporters/LuaExporter.js +457 -0
- package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -0
- package/dist/cjs/scripting/exporters/PythonExporter.js +565 -0
- package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -0
- package/dist/cjs/scripting/exporters/RustExporter.js +525 -0
- package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -0
- package/dist/cjs/scripting/exporters/TypeScriptExporter.js +570 -0
- package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -0
- package/dist/cjs/systems/ParticleSystem2.js +1478 -0
- package/dist/cjs/systems/ParticleSystem2.js.map +1 -0
- package/dist/esm/ai/BehaviorTree.js +1186 -0
- package/dist/esm/ai/BehaviorTree.js.map +1 -0
- package/dist/esm/ai/StateMachine.js +767 -0
- package/dist/esm/ai/StateMachine.js.map +1 -0
- package/dist/esm/editor/ShaderGraph.js +1606 -0
- package/dist/esm/editor/ShaderGraph.js.map +1 -0
- package/dist/esm/editor/TimelineEditor.js +800 -0
- package/dist/esm/editor/TimelineEditor.js.map +1 -0
- package/dist/esm/export/GodotExporter.js +1100 -0
- package/dist/esm/export/GodotExporter.js.map +1 -0
- package/dist/esm/export/PlatformExporter.js +230 -0
- package/dist/esm/export/PlatformExporter.js.map +1 -0
- package/dist/esm/export/ThreeJSExporter.js +1114 -0
- package/dist/esm/export/ThreeJSExporter.js.map +1 -0
- package/dist/esm/export/UnityExporter.js +1191 -0
- package/dist/esm/export/UnityExporter.js.map +1 -0
- package/dist/esm/export/WebExporter.js +1033 -0
- package/dist/esm/export/WebExporter.js.map +1 -0
- package/dist/esm/export/index.js +44 -0
- package/dist/esm/export/index.js.map +1 -0
- package/dist/esm/import/AsepriteImporter.js +759 -0
- package/dist/esm/import/AsepriteImporter.js.map +1 -0
- package/dist/esm/import/DragonBonesImporter.js +496 -0
- package/dist/esm/import/DragonBonesImporter.js.map +1 -0
- package/dist/esm/import/GameMakerImporter.js +556 -0
- package/dist/esm/import/GameMakerImporter.js.map +1 -0
- package/dist/esm/import/GodotSceneImporter.js +822 -0
- package/dist/esm/import/GodotSceneImporter.js.map +1 -0
- package/dist/esm/import/LDtkImporter.js +479 -0
- package/dist/esm/import/LDtkImporter.js.map +1 -0
- package/dist/esm/import/Live2DImporter.js +550 -0
- package/dist/esm/import/Live2DImporter.js.map +1 -0
- package/dist/esm/import/NdgFormat.js +490 -0
- package/dist/esm/import/NdgFormat.js.map +1 -0
- package/dist/esm/import/OgmoImporter.js +526 -0
- package/dist/esm/import/OgmoImporter.js.map +1 -0
- package/dist/esm/import/RPGMakerImporter.js +517 -0
- package/dist/esm/import/RPGMakerImporter.js.map +1 -0
- package/dist/esm/import/SceneImporter.js +441 -0
- package/dist/esm/import/SceneImporter.js.map +1 -0
- package/dist/esm/import/SpineImporter.js +580 -0
- package/dist/esm/import/SpineImporter.js.map +1 -0
- package/dist/esm/import/SpriterImporter.js +649 -0
- package/dist/esm/import/SpriterImporter.js.map +1 -0
- package/dist/esm/import/TiledMapImporter.js +857 -0
- package/dist/esm/import/TiledMapImporter.js.map +1 -0
- package/dist/esm/import/UnitySceneImporter.js +730 -0
- package/dist/esm/import/UnitySceneImporter.js.map +1 -0
- package/dist/esm/import/index.js +279 -0
- package/dist/esm/import/index.js.map +1 -0
- package/dist/esm/index.js +36 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/scripting/GraphToAST.js +564 -0
- package/dist/esm/scripting/GraphToAST.js.map +1 -0
- package/dist/esm/scripting/LanguageExporter.js +311 -0
- package/dist/esm/scripting/LanguageExporter.js.map +1 -0
- package/dist/esm/scripting/ScriptAST.js +52 -0
- package/dist/esm/scripting/ScriptAST.js.map +1 -0
- package/dist/esm/scripting/VisualScripting2.js +1130 -0
- package/dist/esm/scripting/VisualScripting2.js.map +1 -0
- package/dist/esm/scripting/exporters/CSharpExporter.js +501 -0
- package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -0
- package/dist/esm/scripting/exporters/GDScriptExporter.js +450 -0
- package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -0
- package/dist/esm/scripting/exporters/LuaExporter.js +455 -0
- package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -0
- package/dist/esm/scripting/exporters/PythonExporter.js +563 -0
- package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -0
- package/dist/esm/scripting/exporters/RustExporter.js +523 -0
- package/dist/esm/scripting/exporters/RustExporter.js.map +1 -0
- package/dist/esm/scripting/exporters/TypeScriptExporter.js +568 -0
- package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -0
- package/dist/esm/systems/ParticleSystem2.js +1471 -0
- package/dist/esm/systems/ParticleSystem2.js.map +1 -0
- package/dist/types/ai/BehaviorTree.d.ts +375 -0
- package/dist/types/ai/StateMachine.d.ts +296 -0
- package/dist/types/editor/ShaderGraph.d.ts +207 -0
- package/dist/types/editor/TimelineEditor.d.ts +393 -0
- package/dist/types/export/GodotExporter.d.ts +56 -0
- package/dist/types/export/PlatformExporter.d.ts +201 -0
- package/dist/types/export/ThreeJSExporter.d.ts +40 -0
- package/dist/types/export/UnityExporter.d.ts +69 -0
- package/dist/types/export/WebExporter.d.ts +58 -0
- package/dist/types/export/index.d.ts +19 -0
- package/dist/types/import/AsepriteImporter.d.ts +46 -0
- package/dist/types/import/DragonBonesImporter.d.ts +331 -0
- package/dist/types/import/GameMakerImporter.d.ts +375 -0
- package/dist/types/import/GodotSceneImporter.d.ts +34 -0
- package/dist/types/import/LDtkImporter.d.ts +177 -0
- package/dist/types/import/Live2DImporter.d.ts +237 -0
- package/dist/types/import/NdgFormat.d.ts +387 -0
- package/dist/types/import/OgmoImporter.d.ts +237 -0
- package/dist/types/import/RPGMakerImporter.d.ts +186 -0
- package/dist/types/import/SceneImporter.d.ts +276 -0
- package/dist/types/import/SpineImporter.d.ts +372 -0
- package/dist/types/import/SpriterImporter.d.ts +230 -0
- package/dist/types/import/TiledMapImporter.d.ts +57 -0
- package/dist/types/import/UnitySceneImporter.d.ts +87 -0
- package/dist/types/import/index.d.ts +59 -0
- package/dist/types/index.d.ts +29 -17
- package/dist/types/scripting/GraphToAST.d.ts +55 -0
- package/dist/types/scripting/LanguageExporter.d.ts +136 -0
- package/dist/types/scripting/ScriptAST.d.ts +312 -0
- package/dist/types/scripting/VisualScripting2.d.ts +353 -0
- package/dist/types/scripting/exporters/CSharpExporter.d.ts +44 -0
- package/dist/types/scripting/exporters/GDScriptExporter.d.ts +46 -0
- package/dist/types/scripting/exporters/LuaExporter.d.ts +46 -0
- package/dist/types/scripting/exporters/PythonExporter.d.ts +49 -0
- package/dist/types/scripting/exporters/RustExporter.d.ts +46 -0
- package/dist/types/scripting/exporters/TypeScriptExporter.d.ts +48 -0
- package/dist/types/scripting/exporters/index.d.ts +8 -0
- package/dist/types/scripting/index.d.ts +11 -0
- package/dist/types/systems/ParticleSystem2.d.ts +646 -0
- package/package.json +2 -2
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file StateMachine.ts
|
|
3
|
+
* @description Finite State Machine System with Graphical Editor Support
|
|
4
|
+
* PRO-1.4: Professional Editor Features
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Hierarchical state machines (HSM)
|
|
8
|
+
* - Transitions with conditions and actions
|
|
9
|
+
* - Entry/Exit/Update callbacks
|
|
10
|
+
* - Transition triggers and events
|
|
11
|
+
* - Visual editor integration
|
|
12
|
+
* - Debugging and history
|
|
13
|
+
* - Parallel states
|
|
14
|
+
* - Animation state machine support
|
|
15
|
+
*/
|
|
16
|
+
import type { EntityId, Vec2 } from '../core/types';
|
|
17
|
+
export type SMStateType = 'normal' | 'entry' | 'exit' | 'any' | 'parallel' | 'submachine';
|
|
18
|
+
export interface SMParameter {
|
|
19
|
+
name: string;
|
|
20
|
+
type: 'bool' | 'int' | 'float' | 'trigger';
|
|
21
|
+
value: boolean | number;
|
|
22
|
+
}
|
|
23
|
+
export type SMConditionOperator = 'equals' | 'notEquals' | 'greater' | 'less' | 'greaterEqual' | 'lessEqual';
|
|
24
|
+
export interface SMCondition {
|
|
25
|
+
id: string;
|
|
26
|
+
parameter: string;
|
|
27
|
+
operator: SMConditionOperator;
|
|
28
|
+
value: boolean | number;
|
|
29
|
+
}
|
|
30
|
+
export interface SMConditionGroup {
|
|
31
|
+
id: string;
|
|
32
|
+
/** AND = all must pass, OR = any must pass */
|
|
33
|
+
mode: 'and' | 'or';
|
|
34
|
+
conditions: SMCondition[];
|
|
35
|
+
}
|
|
36
|
+
export interface SMTransition {
|
|
37
|
+
id: string;
|
|
38
|
+
name?: string;
|
|
39
|
+
/** Source state ID (or 'any' for any-state transitions) */
|
|
40
|
+
from: string;
|
|
41
|
+
/** Target state ID */
|
|
42
|
+
to: string;
|
|
43
|
+
/** Conditions that must be met */
|
|
44
|
+
conditions: SMConditionGroup[];
|
|
45
|
+
/** Transition duration (for blending) */
|
|
46
|
+
duration: number;
|
|
47
|
+
/** Priority (lower = higher priority) */
|
|
48
|
+
priority: number;
|
|
49
|
+
/** Can interrupt current state */
|
|
50
|
+
canInterrupt: boolean;
|
|
51
|
+
/** Trigger name (consumed on use) */
|
|
52
|
+
trigger?: string;
|
|
53
|
+
/** Offset into target state (0-1) for animation */
|
|
54
|
+
targetOffset?: number;
|
|
55
|
+
/** Custom transition curve */
|
|
56
|
+
curve?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut';
|
|
57
|
+
/** Editor: control points for curved transition line */
|
|
58
|
+
controlPoints?: Vec2[];
|
|
59
|
+
/** Is this transition muted (disabled) */
|
|
60
|
+
muted?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface SMState {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
type: SMStateType;
|
|
66
|
+
/** Position in editor */
|
|
67
|
+
position: Vec2;
|
|
68
|
+
/** Size in editor (for comments) */
|
|
69
|
+
size?: Vec2;
|
|
70
|
+
/** Custom color */
|
|
71
|
+
color?: string;
|
|
72
|
+
/** State speed multiplier (for animation) */
|
|
73
|
+
speed: number;
|
|
74
|
+
/** Motion/animation clip reference */
|
|
75
|
+
motion?: string;
|
|
76
|
+
/** Is this the default state? */
|
|
77
|
+
isDefault?: boolean;
|
|
78
|
+
/** Sub-state machine ID (for submachine states) */
|
|
79
|
+
submachineId?: string;
|
|
80
|
+
/** Child states (for parallel/hierarchical) */
|
|
81
|
+
children?: string[];
|
|
82
|
+
/** Tags for grouping */
|
|
83
|
+
tags?: string[];
|
|
84
|
+
/** Custom data */
|
|
85
|
+
customData?: Record<string, unknown>;
|
|
86
|
+
/** Behaviors attached to this state */
|
|
87
|
+
behaviors?: SMStateBehavior[];
|
|
88
|
+
}
|
|
89
|
+
export interface SMStateBehavior {
|
|
90
|
+
id: string;
|
|
91
|
+
type: string;
|
|
92
|
+
enabled: boolean;
|
|
93
|
+
properties: Record<string, unknown>;
|
|
94
|
+
}
|
|
95
|
+
export interface SMLayer {
|
|
96
|
+
id: string;
|
|
97
|
+
name: string;
|
|
98
|
+
/** Layer weight (for animation blending) */
|
|
99
|
+
weight: number;
|
|
100
|
+
/** Blending mode */
|
|
101
|
+
blendMode: 'override' | 'additive';
|
|
102
|
+
/** Sync with another layer */
|
|
103
|
+
syncedLayer?: string;
|
|
104
|
+
/** Is this layer active? */
|
|
105
|
+
active: boolean;
|
|
106
|
+
/** States in this layer */
|
|
107
|
+
states: SMState[];
|
|
108
|
+
/** Transitions in this layer */
|
|
109
|
+
transitions: SMTransition[];
|
|
110
|
+
/** Default state ID */
|
|
111
|
+
defaultState?: string;
|
|
112
|
+
/** Any-state transitions */
|
|
113
|
+
anyStateTransitions: SMTransition[];
|
|
114
|
+
}
|
|
115
|
+
export interface SMDefinition {
|
|
116
|
+
id: string;
|
|
117
|
+
name: string;
|
|
118
|
+
description?: string;
|
|
119
|
+
/** Parameters */
|
|
120
|
+
parameters: SMParameter[];
|
|
121
|
+
/** Layers */
|
|
122
|
+
layers: SMLayer[];
|
|
123
|
+
/** Metadata */
|
|
124
|
+
metadata?: {
|
|
125
|
+
author?: string;
|
|
126
|
+
version?: string;
|
|
127
|
+
created?: number;
|
|
128
|
+
modified?: number;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export interface SMContext {
|
|
132
|
+
entityId: EntityId;
|
|
133
|
+
dt: number;
|
|
134
|
+
time: number;
|
|
135
|
+
world: unknown;
|
|
136
|
+
/** Custom services */
|
|
137
|
+
services: Map<string, unknown>;
|
|
138
|
+
}
|
|
139
|
+
export interface SMStateInstance {
|
|
140
|
+
stateId: string;
|
|
141
|
+
layerId: string;
|
|
142
|
+
enterTime: number;
|
|
143
|
+
elapsedTime: number;
|
|
144
|
+
normalizedTime: number;
|
|
145
|
+
isTransitioning: boolean;
|
|
146
|
+
}
|
|
147
|
+
export interface SMTransitionInstance {
|
|
148
|
+
transitionId: string;
|
|
149
|
+
fromState: string;
|
|
150
|
+
toState: string;
|
|
151
|
+
startTime: number;
|
|
152
|
+
duration: number;
|
|
153
|
+
progress: number;
|
|
154
|
+
}
|
|
155
|
+
export type SMEventType = 'state-enter' | 'state-exit' | 'state-update' | 'transition-start' | 'transition-complete' | 'parameter-changed';
|
|
156
|
+
export interface SMEvent {
|
|
157
|
+
type: SMEventType;
|
|
158
|
+
timestamp: number;
|
|
159
|
+
layerId: string;
|
|
160
|
+
data: unknown;
|
|
161
|
+
}
|
|
162
|
+
export type SMCallback = (context: SMContext, state: SMState) => void;
|
|
163
|
+
export type SMTransitionCallback = (context: SMContext, transition: SMTransition) => void;
|
|
164
|
+
export declare class StateMachine {
|
|
165
|
+
private definition;
|
|
166
|
+
private layerStates;
|
|
167
|
+
private activeTransitions;
|
|
168
|
+
private parameters;
|
|
169
|
+
private triggers;
|
|
170
|
+
/** Callbacks */
|
|
171
|
+
private onEnter;
|
|
172
|
+
private onExit;
|
|
173
|
+
private onUpdate;
|
|
174
|
+
private onTransitionStart;
|
|
175
|
+
private onTransitionComplete;
|
|
176
|
+
/** Event listeners */
|
|
177
|
+
private eventListeners;
|
|
178
|
+
/** Debugging */
|
|
179
|
+
private history;
|
|
180
|
+
private historyLimit;
|
|
181
|
+
debugMode: boolean;
|
|
182
|
+
constructor(definition: SMDefinition);
|
|
183
|
+
private initializeParameters;
|
|
184
|
+
private initializeLayers;
|
|
185
|
+
setParameter(name: string, value: boolean | number): void;
|
|
186
|
+
getParameter(name: string): boolean | number | undefined;
|
|
187
|
+
setBool(name: string, value: boolean): void;
|
|
188
|
+
getBool(name: string): boolean;
|
|
189
|
+
setFloat(name: string, value: number): void;
|
|
190
|
+
getFloat(name: string): number;
|
|
191
|
+
setInteger(name: string, value: number): void;
|
|
192
|
+
getInteger(name: string): number;
|
|
193
|
+
setTrigger(name: string): void;
|
|
194
|
+
resetTrigger(name: string): void;
|
|
195
|
+
update(context: SMContext): void;
|
|
196
|
+
private updateLayer;
|
|
197
|
+
private findValidTransition;
|
|
198
|
+
private evaluateConditions;
|
|
199
|
+
private evaluateConditionGroup;
|
|
200
|
+
private evaluateCondition;
|
|
201
|
+
private startTransition;
|
|
202
|
+
private completeTransition;
|
|
203
|
+
private callOnEnter;
|
|
204
|
+
private callOnExit;
|
|
205
|
+
private callOnUpdate;
|
|
206
|
+
registerOnEnter(stateId: string, callback: SMCallback): void;
|
|
207
|
+
registerOnExit(stateId: string, callback: SMCallback): void;
|
|
208
|
+
registerOnUpdate(stateId: string, callback: SMCallback): void;
|
|
209
|
+
registerOnTransitionStart(callback: SMTransitionCallback): void;
|
|
210
|
+
registerOnTransitionComplete(callback: SMTransitionCallback): void;
|
|
211
|
+
on(event: SMEventType, listener: (event: SMEvent) => void): void;
|
|
212
|
+
off(event: SMEventType, listener: (event: SMEvent) => void): void;
|
|
213
|
+
private emit;
|
|
214
|
+
getCurrentState(layerId?: string): SMState | null;
|
|
215
|
+
getCurrentStateId(layerId?: string): string | null;
|
|
216
|
+
isInState(stateId: string, layerId?: string): boolean;
|
|
217
|
+
isTransitioning(layerId?: string): boolean;
|
|
218
|
+
getTransitionProgress(layerId?: string): number;
|
|
219
|
+
getStateTime(layerId?: string): number;
|
|
220
|
+
forceState(stateId: string, layerId?: string): void;
|
|
221
|
+
reset(): void;
|
|
222
|
+
getHistory(): SMEvent[];
|
|
223
|
+
clearHistory(): void;
|
|
224
|
+
getDebugInfo(): {
|
|
225
|
+
layers: Array<{
|
|
226
|
+
id: string;
|
|
227
|
+
name: string;
|
|
228
|
+
currentState: string | null;
|
|
229
|
+
isTransitioning: boolean;
|
|
230
|
+
transitionProgress: number;
|
|
231
|
+
}>;
|
|
232
|
+
parameters: Record<string, boolean | number>;
|
|
233
|
+
};
|
|
234
|
+
getDefinition(): SMDefinition;
|
|
235
|
+
clone(): StateMachine;
|
|
236
|
+
}
|
|
237
|
+
/** Extended state machine for animation control */
|
|
238
|
+
export declare class AnimatorController extends StateMachine {
|
|
239
|
+
private motionValues;
|
|
240
|
+
private blendTrees;
|
|
241
|
+
constructor(definition: SMDefinition);
|
|
242
|
+
/** Get blended motion value for animation sampling */
|
|
243
|
+
getMotionValue(layerId: string): number;
|
|
244
|
+
/** Get current motion/clip name */
|
|
245
|
+
getMotionClip(layerId?: string): string | null;
|
|
246
|
+
/** Register a blend tree for a state */
|
|
247
|
+
registerBlendTree(stateId: string, blendTree: BlendTree): void;
|
|
248
|
+
/** Sample blend tree for current parameters */
|
|
249
|
+
sampleBlendTree(stateId: string): BlendTreeSample | null;
|
|
250
|
+
private getParameterMap;
|
|
251
|
+
}
|
|
252
|
+
export type BlendTreeType = '1d' | '2d-simple' | '2d-freeform' | 'direct';
|
|
253
|
+
export interface BlendTreeMotion {
|
|
254
|
+
clip: string;
|
|
255
|
+
position: number | Vec2;
|
|
256
|
+
speed?: number;
|
|
257
|
+
mirror?: boolean;
|
|
258
|
+
threshold?: number;
|
|
259
|
+
}
|
|
260
|
+
export interface BlendTreeSample {
|
|
261
|
+
clips: Array<{
|
|
262
|
+
clip: string;
|
|
263
|
+
weight: number;
|
|
264
|
+
speed: number;
|
|
265
|
+
mirror: boolean;
|
|
266
|
+
}>;
|
|
267
|
+
}
|
|
268
|
+
export declare class BlendTree {
|
|
269
|
+
type: BlendTreeType;
|
|
270
|
+
parameterX: string;
|
|
271
|
+
parameterY?: string;
|
|
272
|
+
motions: BlendTreeMotion[];
|
|
273
|
+
constructor(type: BlendTreeType, parameterX: string, parameterY?: string);
|
|
274
|
+
addMotion(motion: BlendTreeMotion): void;
|
|
275
|
+
sample(parameters: Record<string, number>): BlendTreeSample;
|
|
276
|
+
private sample1D;
|
|
277
|
+
private sample2D;
|
|
278
|
+
private sampleDirect;
|
|
279
|
+
}
|
|
280
|
+
export declare function createStateMachine(definition: SMDefinition): StateMachine;
|
|
281
|
+
export declare function createAnimatorController(definition: SMDefinition): AnimatorController;
|
|
282
|
+
export declare function createBlendTree1D(parameter: string): BlendTree;
|
|
283
|
+
export declare function createBlendTree2D(parameterX: string, parameterY: string, type?: '2d-simple' | '2d-freeform'): BlendTree;
|
|
284
|
+
export declare function createSMDefinition(name: string): SMDefinition;
|
|
285
|
+
export declare function createSMLayer(name: string): SMLayer;
|
|
286
|
+
export declare function createSMState(name: string, type?: SMStateType): SMState;
|
|
287
|
+
export declare function createSMTransition(from: string, to: string): SMTransition;
|
|
288
|
+
export declare function createSMParameter(name: string, type: SMParameter['type'], value?: boolean | number): SMParameter;
|
|
289
|
+
export declare function createSMCondition(parameter: string, operator: SMConditionOperator, value: boolean | number): SMCondition;
|
|
290
|
+
export declare function createSMConditionGroup(mode?: 'and' | 'or'): SMConditionGroup;
|
|
291
|
+
export declare function createSMContext(params: {
|
|
292
|
+
entityId: EntityId;
|
|
293
|
+
dt: number;
|
|
294
|
+
time: number;
|
|
295
|
+
world: unknown;
|
|
296
|
+
}): SMContext;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ShaderGraph.ts
|
|
3
|
+
* @description Visual Shader Graph Editor System
|
|
4
|
+
* PRO-1.4: Professional Editor Features
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Node-based shader editing
|
|
8
|
+
* - GLSL/WGSL/HLSL generation
|
|
9
|
+
* - Real-time preview
|
|
10
|
+
* - Material templates
|
|
11
|
+
* - Custom node creation
|
|
12
|
+
* - Subgraph support
|
|
13
|
+
* - PBR and unlit workflows
|
|
14
|
+
*/
|
|
15
|
+
export type ShaderTarget = 'glsl' | 'wgsl' | 'hlsl' | 'metal' | 'spirv';
|
|
16
|
+
export type ShaderStage = 'vertex' | 'fragment' | 'compute';
|
|
17
|
+
export type ShaderPrecision = 'lowp' | 'mediump' | 'highp';
|
|
18
|
+
export type ShaderDataType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'int' | 'ivec2' | 'ivec3' | 'ivec4' | 'bool' | 'bvec2' | 'bvec3' | 'bvec4' | 'mat2' | 'mat3' | 'mat4' | 'sampler2D' | 'samplerCube' | 'sampler3D' | 'void';
|
|
19
|
+
export type ShaderBlendMode = 'opaque' | 'alpha' | 'additive' | 'multiply' | 'premultiplied';
|
|
20
|
+
export type ShaderCullMode = 'none' | 'front' | 'back';
|
|
21
|
+
export type ShaderDepthTest = 'always' | 'never' | 'less' | 'lequal' | 'greater' | 'gequal' | 'equal' | 'notequal';
|
|
22
|
+
export interface ShaderPortDef {
|
|
23
|
+
name: string;
|
|
24
|
+
type: ShaderDataType;
|
|
25
|
+
description?: string;
|
|
26
|
+
default?: number | number[];
|
|
27
|
+
min?: number;
|
|
28
|
+
max?: number;
|
|
29
|
+
hidden?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ShaderNodeDef {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
category: ShaderNodeCategory;
|
|
35
|
+
description?: string;
|
|
36
|
+
inputs: ShaderPortDef[];
|
|
37
|
+
outputs: ShaderPortDef[];
|
|
38
|
+
/** GLSL code template with {{input}}, {{output}} placeholders */
|
|
39
|
+
glsl?: string;
|
|
40
|
+
/** WGSL code template */
|
|
41
|
+
wgsl?: string;
|
|
42
|
+
/** HLSL code template */
|
|
43
|
+
hlsl?: string;
|
|
44
|
+
/** Preview function name */
|
|
45
|
+
previewFunc?: string;
|
|
46
|
+
/** Custom properties */
|
|
47
|
+
properties?: ShaderPropertyDef[];
|
|
48
|
+
/** Whether this node is a master/output node */
|
|
49
|
+
isMaster?: boolean;
|
|
50
|
+
/** Stage restriction */
|
|
51
|
+
stage?: ShaderStage;
|
|
52
|
+
}
|
|
53
|
+
export type ShaderNodeCategory = 'input' | 'output' | 'math' | 'vector' | 'matrix' | 'texture' | 'uv' | 'color' | 'lighting' | 'channel' | 'procedural' | 'utility' | 'custom' | 'subgraph';
|
|
54
|
+
export interface ShaderPropertyDef {
|
|
55
|
+
name: string;
|
|
56
|
+
type: 'float' | 'int' | 'bool' | 'color' | 'texture' | 'dropdown' | 'vec2' | 'vec3' | 'vec4';
|
|
57
|
+
default?: unknown;
|
|
58
|
+
options?: string[];
|
|
59
|
+
min?: number;
|
|
60
|
+
max?: number;
|
|
61
|
+
}
|
|
62
|
+
export interface ShaderPort {
|
|
63
|
+
nodeId: string;
|
|
64
|
+
portName: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ShaderConnection {
|
|
67
|
+
id: string;
|
|
68
|
+
from: ShaderPort;
|
|
69
|
+
to: ShaderPort;
|
|
70
|
+
}
|
|
71
|
+
export interface ShaderNodeInstance {
|
|
72
|
+
id: string;
|
|
73
|
+
type: string;
|
|
74
|
+
position: {
|
|
75
|
+
x: number;
|
|
76
|
+
y: number;
|
|
77
|
+
};
|
|
78
|
+
properties: Record<string, unknown>;
|
|
79
|
+
/** Collapsed state */
|
|
80
|
+
collapsed?: boolean;
|
|
81
|
+
/** Preview enabled */
|
|
82
|
+
previewEnabled?: boolean;
|
|
83
|
+
/** Custom title override */
|
|
84
|
+
title?: string;
|
|
85
|
+
/** Comment/note */
|
|
86
|
+
comment?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ShaderSubgraph {
|
|
89
|
+
id: string;
|
|
90
|
+
name: string;
|
|
91
|
+
description?: string;
|
|
92
|
+
nodes: ShaderNodeInstance[];
|
|
93
|
+
connections: ShaderConnection[];
|
|
94
|
+
inputs: ShaderPortDef[];
|
|
95
|
+
outputs: ShaderPortDef[];
|
|
96
|
+
}
|
|
97
|
+
export interface ShaderGraphDef {
|
|
98
|
+
id: string;
|
|
99
|
+
name: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
target: ShaderTarget;
|
|
102
|
+
stage: ShaderStage;
|
|
103
|
+
nodes: ShaderNodeInstance[];
|
|
104
|
+
connections: ShaderConnection[];
|
|
105
|
+
/** Exposed properties for material instances */
|
|
106
|
+
properties: ShaderExposedProperty[];
|
|
107
|
+
/** Graph-level settings */
|
|
108
|
+
settings: ShaderGraphSettings;
|
|
109
|
+
/** Subgraphs */
|
|
110
|
+
subgraphs?: ShaderSubgraph[];
|
|
111
|
+
/** Custom functions */
|
|
112
|
+
customFunctions?: ShaderCustomFunction[];
|
|
113
|
+
/** Metadata */
|
|
114
|
+
metadata?: Record<string, unknown>;
|
|
115
|
+
}
|
|
116
|
+
export interface ShaderExposedProperty {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
displayName: string;
|
|
120
|
+
type: ShaderDataType;
|
|
121
|
+
default: unknown;
|
|
122
|
+
min?: number;
|
|
123
|
+
max?: number;
|
|
124
|
+
group?: string;
|
|
125
|
+
tooltip?: string;
|
|
126
|
+
}
|
|
127
|
+
export interface ShaderGraphSettings {
|
|
128
|
+
precision: ShaderPrecision;
|
|
129
|
+
blendMode: ShaderBlendMode;
|
|
130
|
+
cullMode: ShaderCullMode;
|
|
131
|
+
depthWrite: boolean;
|
|
132
|
+
depthTest: ShaderDepthTest;
|
|
133
|
+
alphaClip?: number;
|
|
134
|
+
castShadows: boolean;
|
|
135
|
+
receiveShadows: boolean;
|
|
136
|
+
doubleSided: boolean;
|
|
137
|
+
/** Surface type */
|
|
138
|
+
surfaceType: 'opaque' | 'transparent';
|
|
139
|
+
/** Render queue */
|
|
140
|
+
renderQueue: number;
|
|
141
|
+
/** Custom defines */
|
|
142
|
+
defines?: Record<string, string | number | boolean>;
|
|
143
|
+
}
|
|
144
|
+
export interface ShaderCustomFunction {
|
|
145
|
+
name: string;
|
|
146
|
+
returnType: ShaderDataType;
|
|
147
|
+
parameters: {
|
|
148
|
+
name: string;
|
|
149
|
+
type: ShaderDataType;
|
|
150
|
+
}[];
|
|
151
|
+
body: string;
|
|
152
|
+
}
|
|
153
|
+
export declare const SHADER_NODE_LIBRARY: ShaderNodeDef[];
|
|
154
|
+
export interface GeneratedShader {
|
|
155
|
+
vertex: string;
|
|
156
|
+
fragment: string;
|
|
157
|
+
uniforms: ShaderUniform[];
|
|
158
|
+
defines: string[];
|
|
159
|
+
}
|
|
160
|
+
export interface ShaderUniform {
|
|
161
|
+
name: string;
|
|
162
|
+
type: ShaderDataType;
|
|
163
|
+
value?: unknown;
|
|
164
|
+
}
|
|
165
|
+
export declare class ShaderCodeGenerator {
|
|
166
|
+
private graph;
|
|
167
|
+
private nodeLibrary;
|
|
168
|
+
private generatedCode;
|
|
169
|
+
private uniforms;
|
|
170
|
+
private defines;
|
|
171
|
+
private nodeCounter;
|
|
172
|
+
constructor(graph: ShaderGraphDef);
|
|
173
|
+
generate(): GeneratedShader;
|
|
174
|
+
private generateNode;
|
|
175
|
+
private defaultValue;
|
|
176
|
+
private formatValue;
|
|
177
|
+
private buildVertexShader;
|
|
178
|
+
private buildFragmentShader;
|
|
179
|
+
}
|
|
180
|
+
export interface ShaderGraphEditorState {
|
|
181
|
+
graph: ShaderGraphDef;
|
|
182
|
+
selectedNodes: string[];
|
|
183
|
+
hoveredNode: string | null;
|
|
184
|
+
hoveredPort: ShaderPort | null;
|
|
185
|
+
draggingConnection: {
|
|
186
|
+
from: ShaderPort;
|
|
187
|
+
toPosition: {
|
|
188
|
+
x: number;
|
|
189
|
+
y: number;
|
|
190
|
+
};
|
|
191
|
+
} | null;
|
|
192
|
+
viewOffset: {
|
|
193
|
+
x: number;
|
|
194
|
+
y: number;
|
|
195
|
+
};
|
|
196
|
+
zoom: number;
|
|
197
|
+
previewEnabled: boolean;
|
|
198
|
+
generatedShader: GeneratedShader | null;
|
|
199
|
+
compileErrors: string[];
|
|
200
|
+
}
|
|
201
|
+
export declare function createShaderGraphEditorState(graph?: ShaderGraphDef): ShaderGraphEditorState;
|
|
202
|
+
export declare function createEmptyShaderGraph(): ShaderGraphDef;
|
|
203
|
+
export declare function createShaderGraph(name: string, target?: ShaderTarget): ShaderGraphDef;
|
|
204
|
+
export declare function generateShader(graph: ShaderGraphDef): GeneratedShader;
|
|
205
|
+
export declare function getNodeLibrary(): ShaderNodeDef[];
|
|
206
|
+
export declare function getNodesByCategory(category: ShaderNodeCategory): ShaderNodeDef[];
|
|
207
|
+
export declare function findNodeDef(nodeType: string): ShaderNodeDef | undefined;
|