@combos-fun/plugin-renderer-3d 0.0.42 → 0.0.44

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.
@@ -1,6 +1,54 @@
1
- import { System, Game, PureObserverInfo, ComponentChanged, GameObject, UpdateParams, ResourceStruct } from '@combos-fun/engine';
2
- import { Scene, PerspectiveCamera, WebGLRenderer, Clock, AnimationMixer, Group, AnimationClip, Object3D, Texture } from 'three';
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
- attachParsedModel(id: number, model: Group, animations?: AnimationClip[]): Group;
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
- export { COMBOS_GAME_OBJECT_ID, Renderer3D, Renderer3DManager, Renderer3DSystem, ThreeContext, gameObjectIdFromObject3D, requireNamedResource, tagObject3D, textureFromNamedImage, textureFromResourceImage };
90
- export type { Renderer3DSystemParams, ThreeContextParams };
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 };