@nice2dev/game-engine 1.0.2 → 1.0.4
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 +3 -3
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file TimelineEditor.ts
|
|
3
|
+
* @description Timeline System for Cutscenes, Cinematics, and Sequencing
|
|
4
|
+
* PRO-1.4: Professional Editor Features
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Multi-track timeline
|
|
8
|
+
* - Track types: animation, audio, event, property, activation
|
|
9
|
+
* - Keyframe animation with curves
|
|
10
|
+
* - Clips with blending
|
|
11
|
+
* - Markers and events
|
|
12
|
+
* - Playback control
|
|
13
|
+
* - Recording mode
|
|
14
|
+
* - Debugger integration
|
|
15
|
+
*/
|
|
16
|
+
import type { EntityId, Vec2 } from '../core/types';
|
|
17
|
+
export type TimelinePlayState = 'stopped' | 'playing' | 'paused' | 'recording';
|
|
18
|
+
export type TimelineWrapMode = 'once' | 'loop' | 'pingPong' | 'clampForever';
|
|
19
|
+
export type TrackType = 'animation' | 'audio' | 'event' | 'property' | 'activation' | 'camera' | 'transform' | 'group' | 'override';
|
|
20
|
+
export type TangentMode = 'auto' | 'smooth' | 'linear' | 'constant' | 'free';
|
|
21
|
+
export type EasingFunction = 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' | 'easeInQuad' | 'easeOutQuad' | 'easeInOutQuad' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic' | 'easeInQuart' | 'easeOutQuart' | 'easeInOutQuart' | 'easeInQuint' | 'easeOutQuint' | 'easeInOutQuint' | 'easeInSine' | 'easeOutSine' | 'easeInOutSine' | 'easeInExpo' | 'easeOutExpo' | 'easeInOutExpo' | 'easeInCirc' | 'easeOutCirc' | 'easeInOutCirc' | 'easeInBack' | 'easeOutBack' | 'easeInOutBack' | 'easeInElastic' | 'easeOutElastic' | 'easeInOutElastic' | 'easeInBounce' | 'easeOutBounce' | 'easeInOutBounce';
|
|
22
|
+
export interface Keyframe<T = number> {
|
|
23
|
+
id: string;
|
|
24
|
+
time: number;
|
|
25
|
+
value: T;
|
|
26
|
+
/** Easing to next keyframe */
|
|
27
|
+
easing?: EasingFunction;
|
|
28
|
+
/** Bezier tangent mode */
|
|
29
|
+
tangentMode?: TangentMode;
|
|
30
|
+
/** In tangent (for bezier) */
|
|
31
|
+
inTangent?: Vec2;
|
|
32
|
+
/** Out tangent (for bezier) */
|
|
33
|
+
outTangent?: Vec2;
|
|
34
|
+
/** In weight (0-1) */
|
|
35
|
+
inWeight?: number;
|
|
36
|
+
/** Out weight (0-1) */
|
|
37
|
+
outWeight?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface AnimationCurve {
|
|
40
|
+
id: string;
|
|
41
|
+
property: string;
|
|
42
|
+
keyframes: Keyframe<number>[];
|
|
43
|
+
/** Pre-infinity mode */
|
|
44
|
+
preWrap?: TimelineWrapMode;
|
|
45
|
+
/** Post-infinity mode */
|
|
46
|
+
postWrap?: TimelineWrapMode;
|
|
47
|
+
}
|
|
48
|
+
export interface BaseClip {
|
|
49
|
+
id: string;
|
|
50
|
+
name: string;
|
|
51
|
+
trackId: string;
|
|
52
|
+
/** Start time in timeline */
|
|
53
|
+
startTime: number;
|
|
54
|
+
/** Duration of clip */
|
|
55
|
+
duration: number;
|
|
56
|
+
/** Clip can be trimmed from start */
|
|
57
|
+
clipIn?: number;
|
|
58
|
+
/** Speed multiplier */
|
|
59
|
+
speed?: number;
|
|
60
|
+
/** Blend in duration */
|
|
61
|
+
blendInDuration?: number;
|
|
62
|
+
/** Blend out duration */
|
|
63
|
+
blendOutDuration?: number;
|
|
64
|
+
/** Custom color */
|
|
65
|
+
color?: string;
|
|
66
|
+
/** Is this clip muted? */
|
|
67
|
+
muted?: boolean;
|
|
68
|
+
/** Is this clip locked? */
|
|
69
|
+
locked?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface AnimationClip extends BaseClip {
|
|
72
|
+
type: 'animation';
|
|
73
|
+
/** Animation curves */
|
|
74
|
+
curves: AnimationCurve[];
|
|
75
|
+
/** Root motion */
|
|
76
|
+
rootMotion?: {
|
|
77
|
+
extractPosition: boolean;
|
|
78
|
+
extractRotation: boolean;
|
|
79
|
+
};
|
|
80
|
+
/** Target binding */
|
|
81
|
+
binding?: {
|
|
82
|
+
type: 'entity' | 'component' | 'property';
|
|
83
|
+
path: string;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export interface AudioClip extends BaseClip {
|
|
87
|
+
type: 'audio';
|
|
88
|
+
/** Audio asset reference */
|
|
89
|
+
audioSource: string;
|
|
90
|
+
/** Volume (0-1) */
|
|
91
|
+
volume: number;
|
|
92
|
+
/** Volume curve */
|
|
93
|
+
volumeCurve?: AnimationCurve;
|
|
94
|
+
/** Spatial blend (0 = 2D, 1 = 3D) */
|
|
95
|
+
spatialBlend?: number;
|
|
96
|
+
/** Loop */
|
|
97
|
+
loop?: boolean;
|
|
98
|
+
}
|
|
99
|
+
export interface EventClip extends BaseClip {
|
|
100
|
+
type: 'event';
|
|
101
|
+
/** Event name to fire */
|
|
102
|
+
eventName: string;
|
|
103
|
+
/** Event payload */
|
|
104
|
+
payload?: Record<string, unknown>;
|
|
105
|
+
/** Fire once or every frame */
|
|
106
|
+
fireMode: 'once' | 'every-frame' | 'on-exit';
|
|
107
|
+
}
|
|
108
|
+
export interface PropertyClip extends BaseClip {
|
|
109
|
+
type: 'property';
|
|
110
|
+
/** Target property path */
|
|
111
|
+
propertyPath: string;
|
|
112
|
+
/** Property curves */
|
|
113
|
+
curves: AnimationCurve[];
|
|
114
|
+
}
|
|
115
|
+
export interface ActivationClip extends BaseClip {
|
|
116
|
+
type: 'activation';
|
|
117
|
+
/** Entity to activate/deactivate */
|
|
118
|
+
targetEntity: EntityId;
|
|
119
|
+
/** Activation state */
|
|
120
|
+
active: boolean;
|
|
121
|
+
}
|
|
122
|
+
export interface TransformClip extends BaseClip {
|
|
123
|
+
type: 'transform';
|
|
124
|
+
/** Position curve */
|
|
125
|
+
positionCurve?: {
|
|
126
|
+
x: AnimationCurve;
|
|
127
|
+
y: AnimationCurve;
|
|
128
|
+
z: AnimationCurve;
|
|
129
|
+
};
|
|
130
|
+
/** Rotation curve (euler) */
|
|
131
|
+
rotationCurve?: {
|
|
132
|
+
x: AnimationCurve;
|
|
133
|
+
y: AnimationCurve;
|
|
134
|
+
z: AnimationCurve;
|
|
135
|
+
};
|
|
136
|
+
/** Scale curve */
|
|
137
|
+
scaleCurve?: {
|
|
138
|
+
x: AnimationCurve;
|
|
139
|
+
y: AnimationCurve;
|
|
140
|
+
z: AnimationCurve;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export interface CameraClip extends BaseClip {
|
|
144
|
+
type: 'camera';
|
|
145
|
+
/** Camera property curves */
|
|
146
|
+
fieldOfView?: AnimationCurve;
|
|
147
|
+
nearClip?: AnimationCurve;
|
|
148
|
+
farClip?: AnimationCurve;
|
|
149
|
+
/** Depth of field */
|
|
150
|
+
dof?: {
|
|
151
|
+
focusDistance: AnimationCurve;
|
|
152
|
+
aperture: AnimationCurve;
|
|
153
|
+
focalLength: AnimationCurve;
|
|
154
|
+
};
|
|
155
|
+
/** Camera shake */
|
|
156
|
+
shake?: {
|
|
157
|
+
amplitude: AnimationCurve;
|
|
158
|
+
frequency: AnimationCurve;
|
|
159
|
+
};
|
|
160
|
+
/** Look-at target */
|
|
161
|
+
lookAtTarget?: EntityId;
|
|
162
|
+
}
|
|
163
|
+
export type TimelineClip = AnimationClip | AudioClip | EventClip | PropertyClip | ActivationClip | TransformClip | CameraClip;
|
|
164
|
+
export interface BaseTrack {
|
|
165
|
+
id: string;
|
|
166
|
+
name: string;
|
|
167
|
+
type: TrackType;
|
|
168
|
+
/** Parent track (for grouping) */
|
|
169
|
+
parentId?: string;
|
|
170
|
+
/** Track color */
|
|
171
|
+
color?: string;
|
|
172
|
+
/** Is track muted? */
|
|
173
|
+
muted?: boolean;
|
|
174
|
+
/** Is track locked? */
|
|
175
|
+
locked?: boolean;
|
|
176
|
+
/** Is track collapsed in UI? */
|
|
177
|
+
collapsed?: boolean;
|
|
178
|
+
/** Track height in editor */
|
|
179
|
+
height?: number;
|
|
180
|
+
/** Clips on this track */
|
|
181
|
+
clips: TimelineClip[];
|
|
182
|
+
/** Override tracks (for track mixing) */
|
|
183
|
+
overrides?: string[];
|
|
184
|
+
}
|
|
185
|
+
export interface AnimationTrack extends BaseTrack {
|
|
186
|
+
type: 'animation';
|
|
187
|
+
/** Binding target */
|
|
188
|
+
binding?: {
|
|
189
|
+
entityId: EntityId;
|
|
190
|
+
animator?: string;
|
|
191
|
+
};
|
|
192
|
+
/** Default animator state */
|
|
193
|
+
defaultState?: string;
|
|
194
|
+
}
|
|
195
|
+
export interface AudioTrack extends BaseTrack {
|
|
196
|
+
type: 'audio';
|
|
197
|
+
/** Output audio group */
|
|
198
|
+
outputGroup?: string;
|
|
199
|
+
/** Master volume */
|
|
200
|
+
volume?: number;
|
|
201
|
+
}
|
|
202
|
+
export interface EventTrack extends BaseTrack {
|
|
203
|
+
type: 'event';
|
|
204
|
+
/** Target listener */
|
|
205
|
+
listenerPath?: string;
|
|
206
|
+
}
|
|
207
|
+
export interface PropertyTrack extends BaseTrack {
|
|
208
|
+
type: 'property';
|
|
209
|
+
/** Target entity */
|
|
210
|
+
targetEntity: EntityId;
|
|
211
|
+
/** Property path */
|
|
212
|
+
propertyPath: string;
|
|
213
|
+
}
|
|
214
|
+
export interface ActivationTrack extends BaseTrack {
|
|
215
|
+
type: 'activation';
|
|
216
|
+
/** Target entity */
|
|
217
|
+
targetEntity: EntityId;
|
|
218
|
+
}
|
|
219
|
+
export interface TransformTrack extends BaseTrack {
|
|
220
|
+
type: 'transform';
|
|
221
|
+
/** Target entity */
|
|
222
|
+
targetEntity: EntityId;
|
|
223
|
+
/** Space */
|
|
224
|
+
space: 'local' | 'world';
|
|
225
|
+
}
|
|
226
|
+
export interface CameraTrack extends BaseTrack {
|
|
227
|
+
type: 'camera';
|
|
228
|
+
/** Target camera entity */
|
|
229
|
+
cameraEntity: EntityId;
|
|
230
|
+
}
|
|
231
|
+
export interface GroupTrack extends BaseTrack {
|
|
232
|
+
type: 'group';
|
|
233
|
+
/** Child track IDs */
|
|
234
|
+
children: string[];
|
|
235
|
+
}
|
|
236
|
+
export type TimelineTrack = AnimationTrack | AudioTrack | EventTrack | PropertyTrack | ActivationTrack | TransformTrack | CameraTrack | GroupTrack;
|
|
237
|
+
export interface TimelineMarker {
|
|
238
|
+
id: string;
|
|
239
|
+
name: string;
|
|
240
|
+
time: number;
|
|
241
|
+
color?: string;
|
|
242
|
+
/** Marker type */
|
|
243
|
+
type: 'marker' | 'signal' | 'jump';
|
|
244
|
+
/** For signal markers */
|
|
245
|
+
signalName?: string;
|
|
246
|
+
signalPayload?: Record<string, unknown>;
|
|
247
|
+
/** For jump markers */
|
|
248
|
+
jumpTarget?: string;
|
|
249
|
+
jumpCondition?: string;
|
|
250
|
+
}
|
|
251
|
+
export interface TimelineDefinition {
|
|
252
|
+
id: string;
|
|
253
|
+
name: string;
|
|
254
|
+
description?: string;
|
|
255
|
+
/** Total duration */
|
|
256
|
+
duration: number;
|
|
257
|
+
/** Frames per second */
|
|
258
|
+
fps: number;
|
|
259
|
+
/** Wrap mode */
|
|
260
|
+
wrapMode: TimelineWrapMode;
|
|
261
|
+
/** Tracks */
|
|
262
|
+
tracks: TimelineTrack[];
|
|
263
|
+
/** Markers */
|
|
264
|
+
markers: TimelineMarker[];
|
|
265
|
+
/** Metadata */
|
|
266
|
+
metadata?: {
|
|
267
|
+
author?: string;
|
|
268
|
+
version?: string;
|
|
269
|
+
created?: number;
|
|
270
|
+
modified?: number;
|
|
271
|
+
tags?: string[];
|
|
272
|
+
};
|
|
273
|
+
/** Editor settings */
|
|
274
|
+
editorSettings?: {
|
|
275
|
+
snapToFrames: boolean;
|
|
276
|
+
showCurves: boolean;
|
|
277
|
+
showAudioWaveforms: boolean;
|
|
278
|
+
zoom: number;
|
|
279
|
+
scrollOffset: number;
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
export type TimelineEventType = 'play' | 'pause' | 'stop' | 'seek' | 'marker' | 'signal' | 'clip-enter' | 'clip-exit' | 'loop' | 'complete' | 'event';
|
|
283
|
+
export interface TimelineEvent {
|
|
284
|
+
type: TimelineEventType;
|
|
285
|
+
time: number;
|
|
286
|
+
data?: unknown;
|
|
287
|
+
}
|
|
288
|
+
export declare function applyEasing(t: number, easing?: EasingFunction): number;
|
|
289
|
+
export declare function evaluateCurve(curve: AnimationCurve, time: number): number;
|
|
290
|
+
export declare class TimelinePlayer {
|
|
291
|
+
private definition;
|
|
292
|
+
private state;
|
|
293
|
+
private currentTime;
|
|
294
|
+
private speed;
|
|
295
|
+
private direction;
|
|
296
|
+
/** Active clips per track */
|
|
297
|
+
private activeClips;
|
|
298
|
+
/** Previous time for detecting clip transitions */
|
|
299
|
+
private previousTime;
|
|
300
|
+
/** Event listeners */
|
|
301
|
+
private listeners;
|
|
302
|
+
/** Property bindings */
|
|
303
|
+
private propertyBindings;
|
|
304
|
+
/** Audio context */
|
|
305
|
+
private audioContext?;
|
|
306
|
+
private audioNodes;
|
|
307
|
+
/** Debug mode */
|
|
308
|
+
debugMode: boolean;
|
|
309
|
+
private history;
|
|
310
|
+
constructor(definition: TimelineDefinition);
|
|
311
|
+
play(): void;
|
|
312
|
+
pause(): void;
|
|
313
|
+
stop(): void;
|
|
314
|
+
seek(time: number): void;
|
|
315
|
+
seekToMarker(markerName: string): boolean;
|
|
316
|
+
setSpeed(speed: number): void;
|
|
317
|
+
getSpeed(): number;
|
|
318
|
+
update(dt: number): void;
|
|
319
|
+
private processTracks;
|
|
320
|
+
private processTrack;
|
|
321
|
+
private onClipEnter;
|
|
322
|
+
private onClipExit;
|
|
323
|
+
private updateClip;
|
|
324
|
+
private updateAnimationClip;
|
|
325
|
+
private updatePropertyClip;
|
|
326
|
+
private updateEventClip;
|
|
327
|
+
private updateTransformClip;
|
|
328
|
+
private updateCameraClip;
|
|
329
|
+
private updateAudioClip;
|
|
330
|
+
private fireEventClip;
|
|
331
|
+
private playAudioClip;
|
|
332
|
+
private stopAudioClip;
|
|
333
|
+
private stopAllAudio;
|
|
334
|
+
private processMarkers;
|
|
335
|
+
private evaluateCondition;
|
|
336
|
+
bindProperty(path: string, setter: (value: unknown) => void): void;
|
|
337
|
+
unbindProperty(path: string): void;
|
|
338
|
+
private applyProperty;
|
|
339
|
+
on(event: TimelineEventType, listener: (event: TimelineEvent) => void): void;
|
|
340
|
+
off(event: TimelineEventType, listener: (event: TimelineEvent) => void): void;
|
|
341
|
+
private emit;
|
|
342
|
+
getState(): TimelinePlayState;
|
|
343
|
+
getCurrentTime(): number;
|
|
344
|
+
getDuration(): number;
|
|
345
|
+
getProgress(): number;
|
|
346
|
+
isPlaying(): boolean;
|
|
347
|
+
isPaused(): boolean;
|
|
348
|
+
isStopped(): boolean;
|
|
349
|
+
getDefinition(): TimelineDefinition;
|
|
350
|
+
getHistory(): TimelineEvent[];
|
|
351
|
+
clearHistory(): void;
|
|
352
|
+
getDebugInfo(): {
|
|
353
|
+
state: TimelinePlayState;
|
|
354
|
+
time: number;
|
|
355
|
+
duration: number;
|
|
356
|
+
progress: number;
|
|
357
|
+
speed: number;
|
|
358
|
+
activeClipCount: number;
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
export interface RecordingOptions {
|
|
362
|
+
targetTrack: string;
|
|
363
|
+
propertyPath?: string;
|
|
364
|
+
sampleRate?: number;
|
|
365
|
+
autoKeyMode?: 'none' | 'all' | 'modified';
|
|
366
|
+
}
|
|
367
|
+
export declare class TimelineRecorder {
|
|
368
|
+
private player;
|
|
369
|
+
private options;
|
|
370
|
+
private recording;
|
|
371
|
+
private recordedKeyframes;
|
|
372
|
+
private lastSampleTime;
|
|
373
|
+
constructor(player: TimelinePlayer, options: RecordingOptions);
|
|
374
|
+
startRecording(): void;
|
|
375
|
+
stopRecording(): Map<string, Keyframe<number>[]>;
|
|
376
|
+
isRecording(): boolean;
|
|
377
|
+
recordValue(property: string, value: number): void;
|
|
378
|
+
getRecordedKeyframes(): Map<string, Keyframe<number>[]>;
|
|
379
|
+
}
|
|
380
|
+
export declare function createTimelineDefinition(name: string, duration?: number): TimelineDefinition;
|
|
381
|
+
export declare function createTimelinePlayer(definition: TimelineDefinition): TimelinePlayer;
|
|
382
|
+
export declare function createTimelineRecorder(player: TimelinePlayer, options: RecordingOptions): TimelineRecorder;
|
|
383
|
+
export declare function createTrack(name: string, type: TrackType): TimelineTrack;
|
|
384
|
+
export declare function createAnimationClip(trackId: string, startTime: number, duration: number): AnimationClip;
|
|
385
|
+
export declare function createAudioClip(trackId: string, startTime: number, duration: number, audioSource: string): AudioClip;
|
|
386
|
+
export declare function createEventClip(trackId: string, time: number, eventName: string): EventClip;
|
|
387
|
+
export declare function createPropertyClip(trackId: string, startTime: number, duration: number, propertyPath: string): PropertyClip;
|
|
388
|
+
export declare function createTransformClip(trackId: string, startTime: number, duration: number): TransformClip;
|
|
389
|
+
export declare function createCameraClip(trackId: string, startTime: number, duration: number): CameraClip;
|
|
390
|
+
export declare function createAnimationCurve(property: string): AnimationCurve;
|
|
391
|
+
export declare function createKeyframe<T = number>(time: number, value: T, easing?: EasingFunction): Keyframe<T>;
|
|
392
|
+
export declare function createMarker(name: string, time: number): TimelineMarker;
|
|
393
|
+
export declare function createSignalMarker(name: string, time: number, signalName: string, payload?: Record<string, unknown>): TimelineMarker;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { PlatformExporter, type PlatformInfo, type NiceProject, type ExportOptions } from './PlatformExporter';
|
|
2
|
+
export interface GodotExportOptions {
|
|
3
|
+
/** Godot version (4.0, 4.1, 4.2, etc.) */
|
|
4
|
+
godotVersion?: string;
|
|
5
|
+
/** Use typed GDScript */
|
|
6
|
+
useTypedGDScript?: boolean;
|
|
7
|
+
/** Generate C# scripts instead of GDScript */
|
|
8
|
+
useCSharp?: boolean;
|
|
9
|
+
/** Include autoload singletons */
|
|
10
|
+
includeAutoloads?: boolean;
|
|
11
|
+
/** Renderer type */
|
|
12
|
+
renderer?: 'forward_plus' | 'mobile' | 'gl_compatibility';
|
|
13
|
+
}
|
|
14
|
+
export declare class GodotExporter extends PlatformExporter {
|
|
15
|
+
readonly platformId: "godot";
|
|
16
|
+
readonly platformInfo: PlatformInfo;
|
|
17
|
+
private gdscriptExporter;
|
|
18
|
+
private graphToAST;
|
|
19
|
+
private resourceIdCounter;
|
|
20
|
+
private uidCounter;
|
|
21
|
+
protected doExport(project: NiceProject, options: ExportOptions): Promise<void>;
|
|
22
|
+
private exportProjectFile;
|
|
23
|
+
private exportScripts;
|
|
24
|
+
private exportScenes;
|
|
25
|
+
private createSceneTSCN;
|
|
26
|
+
private createGodotNode;
|
|
27
|
+
private createComponentNode;
|
|
28
|
+
private createTilemapNode;
|
|
29
|
+
private exportPrefabs;
|
|
30
|
+
private createPrefabTSCN;
|
|
31
|
+
private exportResources;
|
|
32
|
+
private createMaterialTRES;
|
|
33
|
+
private createAnimationLibrary;
|
|
34
|
+
private exportTilesets;
|
|
35
|
+
private createTileSetTRES;
|
|
36
|
+
private exportAutoloads;
|
|
37
|
+
private exportEnvironment;
|
|
38
|
+
private exportAssetImports;
|
|
39
|
+
private createImportFile;
|
|
40
|
+
private getAssetPath;
|
|
41
|
+
private addScriptResource;
|
|
42
|
+
private addTextureResource;
|
|
43
|
+
private addAudioResource;
|
|
44
|
+
private addTileSetResource;
|
|
45
|
+
private serializeTSCN;
|
|
46
|
+
private serializeNodes;
|
|
47
|
+
private formatValue;
|
|
48
|
+
private hexToGodotColor;
|
|
49
|
+
private linearToDb;
|
|
50
|
+
private sanitizeName;
|
|
51
|
+
private nextResourceId;
|
|
52
|
+
private nextUID;
|
|
53
|
+
private getHorizontalAlignment;
|
|
54
|
+
private getVerticalAlignment;
|
|
55
|
+
}
|
|
56
|
+
export default GodotExporter;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { ScriptGraph } from '../scripting/NodeGraph';
|
|
2
|
+
export type PlatformId = 'unity' | 'godot' | 'unreal' | 'pixijs' | 'phaser' | 'threejs' | 'cocos' | 'gamemaker' | 'roblox' | 'minecraft' | 'rpgmaker' | 'construct3' | 'gdevelop' | 'defold' | 'solar2d' | 'pico8' | 'tic80' | 'web-generic';
|
|
3
|
+
export interface PlatformInfo {
|
|
4
|
+
id: PlatformId;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
icon?: string;
|
|
8
|
+
website: string;
|
|
9
|
+
features: PlatformFeature[];
|
|
10
|
+
supportedAssets: AssetType[];
|
|
11
|
+
exportFormats: string[];
|
|
12
|
+
}
|
|
13
|
+
export type PlatformFeature = '2d-rendering' | '3d-rendering' | 'physics-2d' | 'physics-3d' | 'audio' | 'networking' | 'ui-system' | 'visual-scripting' | 'tilemaps' | 'particles' | 'animation' | 'vr-ar';
|
|
14
|
+
export type AssetType = 'sprite' | 'tileset' | 'audio' | 'font' | 'script' | 'scene' | 'prefab' | 'material' | 'shader' | 'animation' | 'tilemap' | 'particleSystem' | 'texture' | 'data';
|
|
15
|
+
export interface NiceProject {
|
|
16
|
+
name: string;
|
|
17
|
+
version: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
author?: string;
|
|
20
|
+
settings: ProjectSettings;
|
|
21
|
+
scenes: NiceScene[];
|
|
22
|
+
assets: NiceAsset[];
|
|
23
|
+
scripts: ScriptGraph[];
|
|
24
|
+
prefabs: NicePrefab[];
|
|
25
|
+
}
|
|
26
|
+
export interface ProjectSettings {
|
|
27
|
+
resolution: {
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
};
|
|
31
|
+
width?: number;
|
|
32
|
+
height?: number;
|
|
33
|
+
backgroundColor: string;
|
|
34
|
+
physics: {
|
|
35
|
+
gravity: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
};
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
velocityIterations?: number;
|
|
41
|
+
positionIterations?: number;
|
|
42
|
+
timeStep?: number;
|
|
43
|
+
};
|
|
44
|
+
audio: {
|
|
45
|
+
masterVolume: number;
|
|
46
|
+
musicVolume?: number;
|
|
47
|
+
sfxVolume?: number;
|
|
48
|
+
audioChannels?: number;
|
|
49
|
+
};
|
|
50
|
+
rendering: {
|
|
51
|
+
pixelArt: boolean;
|
|
52
|
+
antialias: boolean;
|
|
53
|
+
pixelPerfect?: boolean;
|
|
54
|
+
antialiasing?: boolean;
|
|
55
|
+
vsync?: boolean;
|
|
56
|
+
backgroundColor?: string;
|
|
57
|
+
};
|
|
58
|
+
input?: Record<string, unknown>;
|
|
59
|
+
}
|
|
60
|
+
export interface NiceScene {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
entities: NiceEntity[];
|
|
64
|
+
tilemaps?: NiceTilemap[];
|
|
65
|
+
metadata?: Record<string, unknown>;
|
|
66
|
+
settings?: Record<string, unknown>;
|
|
67
|
+
}
|
|
68
|
+
export interface NiceEntity {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
type?: string;
|
|
72
|
+
position?: {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
};
|
|
76
|
+
rotation?: number;
|
|
77
|
+
scale?: {
|
|
78
|
+
x: number;
|
|
79
|
+
y: number;
|
|
80
|
+
};
|
|
81
|
+
components: NiceComponent[];
|
|
82
|
+
children?: NiceEntity[];
|
|
83
|
+
prefabId?: string;
|
|
84
|
+
scriptId?: string;
|
|
85
|
+
tags?: string[];
|
|
86
|
+
active?: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface NiceComponent {
|
|
89
|
+
type: string;
|
|
90
|
+
properties?: Record<string, unknown>;
|
|
91
|
+
data?: Record<string, unknown>;
|
|
92
|
+
}
|
|
93
|
+
export interface NiceAsset {
|
|
94
|
+
id: string;
|
|
95
|
+
type: AssetType;
|
|
96
|
+
name: string;
|
|
97
|
+
path: string;
|
|
98
|
+
metadata?: Record<string, unknown>;
|
|
99
|
+
data?: Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
export interface NicePrefab {
|
|
102
|
+
id: string;
|
|
103
|
+
name: string;
|
|
104
|
+
entity: NiceEntity;
|
|
105
|
+
}
|
|
106
|
+
export interface NiceTilemap {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
tilesetId: string;
|
|
110
|
+
width: number;
|
|
111
|
+
height: number;
|
|
112
|
+
tileSize: number;
|
|
113
|
+
layers: TilemapLayer[];
|
|
114
|
+
}
|
|
115
|
+
export interface TilemapLayer {
|
|
116
|
+
name: string;
|
|
117
|
+
data: number[];
|
|
118
|
+
visible: boolean;
|
|
119
|
+
opacity: number;
|
|
120
|
+
}
|
|
121
|
+
export interface ExportOptions {
|
|
122
|
+
/** Target platform */
|
|
123
|
+
platform: PlatformId;
|
|
124
|
+
/** Output directory path */
|
|
125
|
+
outputDir: string;
|
|
126
|
+
/** Project name (used for folder/file naming) */
|
|
127
|
+
projectName?: string;
|
|
128
|
+
/** Whether to minify generated code */
|
|
129
|
+
minify?: boolean;
|
|
130
|
+
/** Include debug information */
|
|
131
|
+
debug?: boolean;
|
|
132
|
+
/** Platform-specific options */
|
|
133
|
+
platformOptions?: Record<string, unknown>;
|
|
134
|
+
}
|
|
135
|
+
export interface ExportResult {
|
|
136
|
+
success: boolean;
|
|
137
|
+
platform: PlatformId;
|
|
138
|
+
outputFiles: ExportedFile[];
|
|
139
|
+
errors: ExportError[];
|
|
140
|
+
warnings: ExportWarning[];
|
|
141
|
+
stats: ExportStats;
|
|
142
|
+
}
|
|
143
|
+
export interface ExportedFile {
|
|
144
|
+
path: string;
|
|
145
|
+
content: string | Uint8Array;
|
|
146
|
+
type: 'text' | 'binary';
|
|
147
|
+
}
|
|
148
|
+
export interface ExportError {
|
|
149
|
+
code: string;
|
|
150
|
+
message: string;
|
|
151
|
+
file?: string;
|
|
152
|
+
line?: number;
|
|
153
|
+
}
|
|
154
|
+
export interface ExportWarning {
|
|
155
|
+
code: string;
|
|
156
|
+
message: string;
|
|
157
|
+
suggestion?: string;
|
|
158
|
+
}
|
|
159
|
+
export interface ExportStats {
|
|
160
|
+
totalFiles: number;
|
|
161
|
+
totalSize: number;
|
|
162
|
+
duration: number;
|
|
163
|
+
assetsProcessed: number;
|
|
164
|
+
scriptsGenerated: number;
|
|
165
|
+
scenesExported: number;
|
|
166
|
+
}
|
|
167
|
+
export declare abstract class PlatformExporter {
|
|
168
|
+
abstract readonly platformId: PlatformId;
|
|
169
|
+
abstract readonly platformInfo: PlatformInfo;
|
|
170
|
+
protected errors: ExportError[];
|
|
171
|
+
protected warnings: ExportWarning[];
|
|
172
|
+
protected files: ExportedFile[];
|
|
173
|
+
/**
|
|
174
|
+
* Export a Nice2Dev project to this platform.
|
|
175
|
+
*/
|
|
176
|
+
export(project: NiceProject, options: ExportOptions): Promise<ExportResult>;
|
|
177
|
+
/**
|
|
178
|
+
* Check if this platform supports a feature.
|
|
179
|
+
*/
|
|
180
|
+
supportsFeature(feature: PlatformFeature): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Check if this platform supports an asset type.
|
|
183
|
+
*/
|
|
184
|
+
supportsAsset(type: AssetType): boolean;
|
|
185
|
+
protected addFile(path: string, content: string | Uint8Array, type?: 'text' | 'binary'): void;
|
|
186
|
+
protected addTextFile(path: string, content: string): void;
|
|
187
|
+
protected addBinaryFile(path: string, content: Uint8Array): void;
|
|
188
|
+
protected addError(code: string, message: string, file?: string, line?: number): void;
|
|
189
|
+
protected addWarning(code: string, message: string, suggestion?: string): void;
|
|
190
|
+
protected abstract doExport(project: NiceProject, options: ExportOptions): Promise<void>;
|
|
191
|
+
}
|
|
192
|
+
export interface DetectionResult {
|
|
193
|
+
platform: PlatformId;
|
|
194
|
+
confidence: number;
|
|
195
|
+
reasons: string[];
|
|
196
|
+
}
|
|
197
|
+
export declare function detectBestPlatform(project: NiceProject): DetectionResult[];
|
|
198
|
+
export declare function registerPlatform(info: PlatformInfo): void;
|
|
199
|
+
export declare function getPlatformInfo(id: PlatformId): PlatformInfo | undefined;
|
|
200
|
+
export declare function getAllPlatforms(): PlatformInfo[];
|
|
201
|
+
export default PlatformExporter;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PlatformExporter, type PlatformInfo, type NiceProject, type ExportOptions } from './PlatformExporter';
|
|
2
|
+
export interface ThreeJSExportOptions {
|
|
3
|
+
/** Use TypeScript */
|
|
4
|
+
typescript?: boolean;
|
|
5
|
+
/** Bundler to use */
|
|
6
|
+
bundler?: 'vite' | 'webpack' | 'parcel' | 'none';
|
|
7
|
+
/** Include VR/AR support */
|
|
8
|
+
xr?: boolean;
|
|
9
|
+
/** Use OrbitControls by default */
|
|
10
|
+
orbitControls?: boolean;
|
|
11
|
+
/** Include post-processing */
|
|
12
|
+
postProcessing?: boolean;
|
|
13
|
+
/** Physics engine */
|
|
14
|
+
physics?: 'cannon' | 'ammo' | 'rapier' | 'none';
|
|
15
|
+
/** Three.js version */
|
|
16
|
+
version?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class ThreeJSExporter extends PlatformExporter {
|
|
19
|
+
readonly platformId: "threejs";
|
|
20
|
+
readonly platformInfo: PlatformInfo;
|
|
21
|
+
private tsExporter;
|
|
22
|
+
private graphToAST;
|
|
23
|
+
protected doExport(project: NiceProject, options: ExportOptions): Promise<void>;
|
|
24
|
+
private exportPackageJson;
|
|
25
|
+
private exportIndexHtml;
|
|
26
|
+
private exportMainGame;
|
|
27
|
+
private exportScenes;
|
|
28
|
+
private exportScene;
|
|
29
|
+
private generateEntityCode;
|
|
30
|
+
private generateMeshCode;
|
|
31
|
+
private generateModelCode;
|
|
32
|
+
private generateLightCode;
|
|
33
|
+
private exportScripts;
|
|
34
|
+
private exportUtilities;
|
|
35
|
+
private exportShaders;
|
|
36
|
+
private exportBundlerConfig;
|
|
37
|
+
private exportTSConfig;
|
|
38
|
+
private sanitizeName;
|
|
39
|
+
}
|
|
40
|
+
export default ThreeJSExporter;
|