@combos-fun/plugin-renderer-3d 0.0.42 → 0.0.45
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/agent-skill.md +66 -6
- package/combos-plugin.json +11 -2
- package/dist/plugin-renderer-3d.cjs.js +959 -9
- package/dist/plugin-renderer-3d.cjs.js.map +1 -1
- package/dist/plugin-renderer-3d.cjs.prod.js +1 -1
- package/dist/plugin-renderer-3d.d.ts +257 -5
- package/dist/plugin-renderer-3d.esm.js +943 -13
- package/dist/plugin-renderer-3d.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,54 @@
|
|
|
1
|
-
import { System, Game, PureObserverInfo, ComponentChanged,
|
|
2
|
-
import { Scene, PerspectiveCamera, WebGLRenderer, Clock, AnimationMixer, Group,
|
|
1
|
+
import { GameObject, System, Game, PureObserverInfo, ComponentChanged, UpdateParams, Component, ResourceStruct } from '@combos-fun/engine';
|
|
2
|
+
import { Scene, PerspectiveCamera, WebGLRenderer, Clock, AnimationMixer, Group, Object3D, AnimationClip, Texture } from 'three';
|
|
3
3
|
|
|
4
|
+
interface PoseLike {
|
|
5
|
+
positionX?: number;
|
|
6
|
+
positionY?: number;
|
|
7
|
+
positionZ?: number;
|
|
8
|
+
rotationX?: number;
|
|
9
|
+
rotationY?: number;
|
|
10
|
+
rotationZ?: number;
|
|
11
|
+
scaleX?: number;
|
|
12
|
+
scaleY?: number;
|
|
13
|
+
scaleZ?: number;
|
|
14
|
+
}
|
|
15
|
+
declare function readPose(pose: PoseLike): {
|
|
16
|
+
positionX: number;
|
|
17
|
+
positionY: number;
|
|
18
|
+
positionZ: number;
|
|
19
|
+
rotationX: number;
|
|
20
|
+
rotationY: number;
|
|
21
|
+
rotationZ: number;
|
|
22
|
+
scaleX: number;
|
|
23
|
+
scaleY: number;
|
|
24
|
+
scaleZ: number;
|
|
25
|
+
};
|
|
26
|
+
declare function poseKeyOf(pose: PoseLike): string;
|
|
27
|
+
declare function copyPose(from: PoseLike, to: PoseLike): void;
|
|
28
|
+
declare function isIdentityPose(pose: PoseLike): boolean;
|
|
29
|
+
declare function seedTransform3D(visual: PoseLike, transform: PoseLike): void;
|
|
30
|
+
/**
|
|
31
|
+
* Keep a visual component's pose fields and a sibling Transform3D in sync.
|
|
32
|
+
* Returns true when the visual Object3D should still apply pose itself
|
|
33
|
+
* (no Transform3D root yet).
|
|
34
|
+
*/
|
|
35
|
+
declare class VisualPoseBridge {
|
|
36
|
+
lastVisual: string;
|
|
37
|
+
lastRoot: string;
|
|
38
|
+
sync(visual: PoseLike, root?: PoseLike | null): boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type ToneMappingKind = 'none' | 'aces' | 'linear' | 'reinhard' | 'cineon';
|
|
42
|
+
interface FogParams {
|
|
43
|
+
color?: number;
|
|
44
|
+
near?: number;
|
|
45
|
+
far?: number;
|
|
46
|
+
}
|
|
47
|
+
interface HemisphereLightParams {
|
|
48
|
+
skyColor?: number;
|
|
49
|
+
groundColor?: number;
|
|
50
|
+
intensity?: number;
|
|
51
|
+
}
|
|
4
52
|
interface ThreeContextParams {
|
|
5
53
|
canvas?: HTMLCanvasElement;
|
|
6
54
|
container?: HTMLElement;
|
|
@@ -9,17 +57,60 @@ interface ThreeContextParams {
|
|
|
9
57
|
antialias?: boolean;
|
|
10
58
|
backgroundColor?: number;
|
|
11
59
|
backgroundAlpha?: number;
|
|
60
|
+
fog?: boolean | FogParams;
|
|
61
|
+
hemisphereLight?: boolean | HemisphereLightParams;
|
|
62
|
+
shadows?: boolean;
|
|
63
|
+
toneMapping?: ToneMappingKind;
|
|
64
|
+
toneMappingExposure?: number;
|
|
65
|
+
ambientIntensity?: number;
|
|
66
|
+
directionalIntensity?: number;
|
|
67
|
+
}
|
|
68
|
+
interface Transform3DLike extends PoseLike {
|
|
69
|
+
worldPositionX?: number;
|
|
70
|
+
worldPositionY?: number;
|
|
71
|
+
worldPositionZ?: number;
|
|
72
|
+
worldRotationX?: number;
|
|
73
|
+
worldRotationY?: number;
|
|
74
|
+
worldRotationZ?: number;
|
|
12
75
|
}
|
|
13
76
|
declare class ThreeContext {
|
|
14
77
|
scene: Scene;
|
|
15
78
|
camera: PerspectiveCamera;
|
|
79
|
+
fallbackCamera: PerspectiveCamera;
|
|
16
80
|
renderer: WebGLRenderer;
|
|
17
81
|
clock: Clock;
|
|
18
82
|
mixers: Map<number, AnimationMixer>;
|
|
19
83
|
models: Map<number, Group>;
|
|
84
|
+
/** Root Object3D for each GameObject that has a 3D node. */
|
|
85
|
+
nodes: Map<number, Object3D>;
|
|
86
|
+
shadows: boolean;
|
|
87
|
+
defaultLights: Object3D[];
|
|
20
88
|
constructor(params: ThreeContextParams);
|
|
21
89
|
update(): void;
|
|
22
|
-
|
|
90
|
+
hasTransform3DRoot(id: number): boolean;
|
|
91
|
+
applyModelShadows(object: Object3D): void;
|
|
92
|
+
attachParsedModel(id: number, model: Group, animations?: AnimationClip[], gameObject?: GameObject): Group;
|
|
93
|
+
object3DFor(id: number): Object3D | undefined;
|
|
94
|
+
/** Place a GameObject's root Object3D under the nearest ancestor visual (or the scene). */
|
|
95
|
+
attachObject3D(id: number, object: Object3D, gameObject?: GameObject): void;
|
|
96
|
+
/**
|
|
97
|
+
* Attach a visual / camera / light under the Transform3D root when one exists.
|
|
98
|
+
* Otherwise the object itself becomes the GameObject root (legacy path).
|
|
99
|
+
*/
|
|
100
|
+
attachVisual(id: number, object: Object3D, gameObject?: GameObject): void;
|
|
101
|
+
detachVisual(id: number, object: Object3D): Object3D | undefined;
|
|
102
|
+
/** Remove a registered node without disposing it; child GameObject nodes stay in the scene. */
|
|
103
|
+
detachObject3D(id: number): Object3D | undefined;
|
|
104
|
+
reparentGameObject(gameObject: GameObject): void;
|
|
105
|
+
findParentNode(gameObject?: GameObject): Object3D;
|
|
106
|
+
adoptChildGameObjects(gameObject: GameObject, object: Object3D): void;
|
|
107
|
+
ensureTransformRoot(gameObject: GameObject, transform: Transform3DLike): Object3D;
|
|
108
|
+
applyTransform3D(gameObject: GameObject, transform: Transform3DLike): Object3D;
|
|
109
|
+
private applyTransformPose;
|
|
110
|
+
removeDefaultLights(): void;
|
|
111
|
+
setActiveCamera(camera: PerspectiveCamera): void;
|
|
112
|
+
restoreFallbackCamera(): void;
|
|
113
|
+
private rehomeRegisteredChildren;
|
|
23
114
|
playAnimation(id: number, animationIndex: number, speed: number): void;
|
|
24
115
|
stopAnimation(id: number): void;
|
|
25
116
|
removeModel(id: number): void;
|
|
@@ -72,19 +163,180 @@ declare class Renderer3DSystem extends System<Renderer3DSystemParams> {
|
|
|
72
163
|
rendererManager: Renderer3DManager;
|
|
73
164
|
init(params?: Renderer3DSystemParams): void;
|
|
74
165
|
update(e?: UpdateParams): void;
|
|
166
|
+
private handleHierarchyChange;
|
|
167
|
+
private ensureTransform3D;
|
|
75
168
|
lateUpdate(): void;
|
|
76
169
|
resize(width: number, height: number): void;
|
|
77
170
|
onDestroy(): void;
|
|
78
171
|
}
|
|
79
172
|
|
|
173
|
+
interface Transform3DParams {
|
|
174
|
+
positionX?: number;
|
|
175
|
+
positionY?: number;
|
|
176
|
+
positionZ?: number;
|
|
177
|
+
rotationX?: number;
|
|
178
|
+
rotationY?: number;
|
|
179
|
+
rotationZ?: number;
|
|
180
|
+
scaleX?: number;
|
|
181
|
+
scaleY?: number;
|
|
182
|
+
scaleZ?: number;
|
|
183
|
+
}
|
|
184
|
+
declare class Transform3D extends Component<Transform3DParams> {
|
|
185
|
+
static componentName: string;
|
|
186
|
+
positionX: number;
|
|
187
|
+
positionY: number;
|
|
188
|
+
positionZ: number;
|
|
189
|
+
rotationX: number;
|
|
190
|
+
rotationY: number;
|
|
191
|
+
rotationZ: number;
|
|
192
|
+
scaleX: number;
|
|
193
|
+
scaleY: number;
|
|
194
|
+
scaleZ: number;
|
|
195
|
+
worldPositionX: number;
|
|
196
|
+
worldPositionY: number;
|
|
197
|
+
worldPositionZ: number;
|
|
198
|
+
worldRotationX: number;
|
|
199
|
+
worldRotationY: number;
|
|
200
|
+
worldRotationZ: number;
|
|
201
|
+
init(obj?: Transform3DParams): void;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
interface Render3DParams {
|
|
205
|
+
visible?: boolean;
|
|
206
|
+
opacity?: number;
|
|
207
|
+
renderOrder?: number;
|
|
208
|
+
sortableChildren?: boolean;
|
|
209
|
+
}
|
|
210
|
+
declare class Render3D extends Component<Render3DParams> {
|
|
211
|
+
static componentName: string;
|
|
212
|
+
visible: boolean;
|
|
213
|
+
opacity: number;
|
|
214
|
+
renderOrder: number;
|
|
215
|
+
sortableChildren: boolean;
|
|
216
|
+
init(obj?: Render3DParams): void;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
interface Camera3DParams {
|
|
220
|
+
fov?: number;
|
|
221
|
+
near?: number;
|
|
222
|
+
far?: number;
|
|
223
|
+
active?: boolean;
|
|
224
|
+
lookAtX?: number;
|
|
225
|
+
lookAtY?: number;
|
|
226
|
+
lookAtZ?: number;
|
|
227
|
+
lookAt?: boolean;
|
|
228
|
+
}
|
|
229
|
+
declare class Camera3D extends Component<Camera3DParams> {
|
|
230
|
+
static componentName: string;
|
|
231
|
+
fov: number;
|
|
232
|
+
near: number;
|
|
233
|
+
far: number;
|
|
234
|
+
active: boolean;
|
|
235
|
+
lookAt: boolean;
|
|
236
|
+
lookAtX: number;
|
|
237
|
+
lookAtY: number;
|
|
238
|
+
lookAtZ: number;
|
|
239
|
+
init(obj?: Camera3DParams): void;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
type Light3DKind = 'ambient' | 'directional' | 'hemisphere' | 'point' | 'spot';
|
|
243
|
+
interface Light3DParams {
|
|
244
|
+
type?: Light3DKind | string;
|
|
245
|
+
color?: number;
|
|
246
|
+
intensity?: number;
|
|
247
|
+
castShadow?: boolean;
|
|
248
|
+
skyColor?: number;
|
|
249
|
+
groundColor?: number;
|
|
250
|
+
distance?: number;
|
|
251
|
+
decay?: number;
|
|
252
|
+
angle?: number;
|
|
253
|
+
penumbra?: number;
|
|
254
|
+
}
|
|
255
|
+
declare class Light3D extends Component<Light3DParams> {
|
|
256
|
+
static componentName: string;
|
|
257
|
+
type: string;
|
|
258
|
+
color: number;
|
|
259
|
+
intensity: number;
|
|
260
|
+
castShadow: boolean;
|
|
261
|
+
skyColor: number;
|
|
262
|
+
groundColor: number;
|
|
263
|
+
distance: number;
|
|
264
|
+
decay: number;
|
|
265
|
+
angle: number;
|
|
266
|
+
penumbra: number;
|
|
267
|
+
init(obj?: Light3DParams): void;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
declare class Transform3DSystem extends Renderer3D {
|
|
271
|
+
static systemName: string;
|
|
272
|
+
name: string;
|
|
273
|
+
init(): void;
|
|
274
|
+
componentChanged(changed: ComponentChanged): void;
|
|
275
|
+
rendererUpdate(gameObject: GameObject): void;
|
|
276
|
+
private ensureOn;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
declare class Render3DSystem extends Renderer3D {
|
|
280
|
+
static systemName: string;
|
|
281
|
+
name: string;
|
|
282
|
+
init(): void;
|
|
283
|
+
componentChanged(changed: ComponentChanged): void;
|
|
284
|
+
rendererUpdate(gameObject: GameObject): void;
|
|
285
|
+
private applyTo;
|
|
286
|
+
private apply;
|
|
287
|
+
private sortChildren;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
declare class Camera3DSystem extends Renderer3D {
|
|
291
|
+
static systemName: string;
|
|
292
|
+
name: string;
|
|
293
|
+
private cameras;
|
|
294
|
+
init(): void;
|
|
295
|
+
componentChanged(changed: ComponentChanged): void;
|
|
296
|
+
rendererUpdate(gameObject: GameObject): void;
|
|
297
|
+
private mount;
|
|
298
|
+
private sync;
|
|
299
|
+
private unmount;
|
|
300
|
+
private activateAnother;
|
|
301
|
+
private ensureTransform;
|
|
302
|
+
onDestroy(): void;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
declare class Light3DSystem extends Renderer3D {
|
|
306
|
+
static systemName: string;
|
|
307
|
+
name: string;
|
|
308
|
+
private lights;
|
|
309
|
+
init(): void;
|
|
310
|
+
componentChanged(changed: ComponentChanged): void;
|
|
311
|
+
rendererUpdate(_gameObject: GameObject): void;
|
|
312
|
+
private mount;
|
|
313
|
+
private createLight;
|
|
314
|
+
private sync;
|
|
315
|
+
private unmount;
|
|
316
|
+
private ensureTransform;
|
|
317
|
+
onDestroy(): void;
|
|
318
|
+
}
|
|
319
|
+
|
|
80
320
|
declare const COMBOS_GAME_OBJECT_ID = "combosGameObjectId";
|
|
321
|
+
declare const COMBOS_INSTANCE_GAME_OBJECT_IDS = "combosInstanceGameObjectIds";
|
|
322
|
+
declare const COMBOS_TRANSFORM3D = "combosTransform3D";
|
|
323
|
+
declare function isTransform3DRoot(object: Object3D | null | undefined): boolean;
|
|
81
324
|
/** Stamp a Three.js object (and its children) so Event3D raycasts can resolve the GameObject. */
|
|
82
325
|
declare function tagObject3D(object: Object3D, gameObjectId: number): void;
|
|
83
326
|
declare function gameObjectIdFromObject3D(object: Object3D | null | undefined): number | undefined;
|
|
327
|
+
/** Resolve a raycast hit, including InstancedMesh `instanceId` rows. */
|
|
328
|
+
declare function gameObjectIdFromIntersection(intersection: {
|
|
329
|
+
object?: Object3D;
|
|
330
|
+
instanceId?: number;
|
|
331
|
+
} | null | undefined): number | undefined;
|
|
84
332
|
|
|
85
333
|
declare function requireNamedResource(name: string): Promise<ResourceStruct>;
|
|
86
334
|
declare function textureFromResourceImage(res: ResourceStruct): Texture;
|
|
87
335
|
declare function textureFromNamedImage(name: string): Promise<Texture>;
|
|
88
336
|
|
|
89
|
-
|
|
90
|
-
|
|
337
|
+
/** True when this GameObject is a scene root (no 3D parent). */
|
|
338
|
+
declare function is3DSceneParent(gameObject: GameObject | undefined | null): boolean;
|
|
339
|
+
declare function has3DChildGameObjects(gameObject: GameObject | undefined | null): boolean;
|
|
340
|
+
|
|
341
|
+
export { COMBOS_GAME_OBJECT_ID, COMBOS_INSTANCE_GAME_OBJECT_IDS, COMBOS_TRANSFORM3D, Camera3D, Camera3DSystem, Light3D, Light3DSystem, Render3D, Render3DSystem, Renderer3D, Renderer3DManager, Renderer3DSystem, ThreeContext, Transform3D, Transform3DSystem, VisualPoseBridge, copyPose, gameObjectIdFromIntersection, gameObjectIdFromObject3D, has3DChildGameObjects, is3DSceneParent, isIdentityPose, isTransform3DRoot, poseKeyOf, readPose, requireNamedResource, seedTransform3D, tagObject3D, textureFromNamedImage, textureFromResourceImage };
|
|
342
|
+
export type { Camera3DParams, FogParams, HemisphereLightParams, Light3DKind, Light3DParams, PoseLike, Render3DParams, Renderer3DSystemParams, ThreeContextParams, ToneMappingKind, Transform3DLike, Transform3DParams };
|