@dcl/ecs 7.20.5-22670537517.commit-a403a9f → 7.20.5-22674879735.commit-6a30e67

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.
Files changed (65) hide show
  1. package/dist/components/extended/AudioAnalysis.d.ts +55 -0
  2. package/dist/components/extended/AudioAnalysis.js +66 -0
  3. package/dist/components/extended/Tween.d.ts +48 -1
  4. package/dist/components/extended/Tween.js +66 -0
  5. package/dist/components/generated/AudioAnalysis.gen.d.ts +1 -0
  6. package/dist/components/generated/AudioAnalysis.gen.js +25 -0
  7. package/dist/components/generated/AvatarLocomotionSettings.gen.d.ts +1 -0
  8. package/dist/components/generated/AvatarLocomotionSettings.gen.js +25 -0
  9. package/dist/components/generated/component-names.gen.js +2 -0
  10. package/dist/components/generated/global.gen.d.ts +4 -0
  11. package/dist/components/generated/global.gen.js +2 -0
  12. package/dist/components/generated/index.gen.d.ts +8 -0
  13. package/dist/components/generated/index.gen.js +10 -0
  14. package/dist/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.d.ts +37 -0
  15. package/dist/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.js +161 -0
  16. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +35 -0
  17. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +123 -0
  18. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +12 -2
  19. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +11 -0
  20. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events.gen.d.ts +5 -1
  21. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js +20 -1
  22. package/dist/components/generated/pb/decentraland/sdk/components/tween.gen.d.ts +21 -0
  23. package/dist/components/generated/pb/decentraland/sdk/components/tween.gen.js +99 -0
  24. package/dist/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.d.ts +3 -0
  25. package/dist/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.js +10 -1
  26. package/dist/components/index.d.ts +4 -0
  27. package/dist/components/index.js +3 -0
  28. package/dist/components/types.d.ts +2 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.js +1 -0
  31. package/dist/systems/events.d.ts +65 -0
  32. package/dist/systems/events.js +70 -8
  33. package/dist-cjs/components/extended/AudioAnalysis.d.ts +55 -0
  34. package/dist-cjs/components/extended/AudioAnalysis.js +70 -0
  35. package/dist-cjs/components/extended/Tween.d.ts +48 -1
  36. package/dist-cjs/components/extended/Tween.js +66 -0
  37. package/dist-cjs/components/generated/AudioAnalysis.gen.d.ts +1 -0
  38. package/dist-cjs/components/generated/AudioAnalysis.gen.js +28 -0
  39. package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.d.ts +1 -0
  40. package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.js +28 -0
  41. package/dist-cjs/components/generated/component-names.gen.js +2 -0
  42. package/dist-cjs/components/generated/global.gen.d.ts +4 -0
  43. package/dist-cjs/components/generated/global.gen.js +4 -1
  44. package/dist-cjs/components/generated/index.gen.d.ts +8 -0
  45. package/dist-cjs/components/generated/index.gen.js +14 -2
  46. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.d.ts +37 -0
  47. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.js +167 -0
  48. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +35 -0
  49. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +129 -0
  50. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +12 -2
  51. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +12 -1
  52. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.d.ts +5 -1
  53. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js +20 -1
  54. package/dist-cjs/components/generated/pb/decentraland/sdk/components/tween.gen.d.ts +21 -0
  55. package/dist-cjs/components/generated/pb/decentraland/sdk/components/tween.gen.js +100 -1
  56. package/dist-cjs/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.d.ts +3 -0
  57. package/dist-cjs/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.js +10 -1
  58. package/dist-cjs/components/index.d.ts +4 -0
  59. package/dist-cjs/components/index.js +5 -1
  60. package/dist-cjs/components/types.d.ts +2 -1
  61. package/dist-cjs/index.d.ts +2 -1
  62. package/dist-cjs/index.js +2 -1
  63. package/dist-cjs/systems/events.d.ts +65 -0
  64. package/dist-cjs/systems/events.js +70 -8
  65. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
1
  import { defineAnimatorComponent } from './extended/Animator';
2
2
  import { defineAudioSourceComponent } from './extended/AudioSource';
3
+ import { defineAudioAnalysisComponent } from './extended/AudioAnalysis';
3
4
  import { defineMaterialComponent } from './extended/Material';
4
5
  import { defineMeshColliderComponent } from './extended/MeshCollider';
5
6
  import { defineMeshRendererComponent } from './extended/MeshRenderer';
@@ -26,6 +27,8 @@ export const Animator = (engine) => defineAnimatorComponent(engine);
26
27
  /* @__PURE__ */
27
28
  export const AudioSource = (engine) => defineAudioSourceComponent(engine);
28
29
  /* @__PURE__ */
30
+ export const AudioAnalysis = (engine) => defineAudioAnalysisComponent(engine);
31
+ /* @__PURE__ */
29
32
  export const AudioStream = (engine) => defineAudioStreamComponent(engine);
30
33
  /* @__PURE__ */
31
34
  export const MeshRenderer = (engine) => defineMeshRendererComponent(engine);
@@ -1,10 +1,11 @@
1
1
  export type { AnimatorComponentDefinitionExtended } from './extended/Animator';
2
2
  export type { AudioSourceComponentDefinitionExtended } from './extended/AudioSource';
3
+ export type { AudioAnalysisComponentDefinitionExtended, AudioAnalysisView } from './extended/AudioAnalysis';
3
4
  export type { AudioStreamComponentDefinitionExtended } from './extended/AudioStream';
4
5
  export type { MeshRendererComponentDefinitionExtended } from './extended/MeshRenderer';
5
6
  export type { MeshColliderComponentDefinitionExtended } from './extended/MeshCollider';
6
7
  export type { TextureHelper, MaterialComponentDefinitionExtended, FlatTexture, ReadonlyFlatMaterial, ReadonlyFlatTexture, FlatMaterial } from './extended/Material';
7
- export type { TweenHelper, TweenComponentDefinitionExtended } from './extended/Tween';
8
+ export type { TweenHelper, TweenComponentDefinitionExtended, SetMoveRotateScaleParams, MoveRotateScaleModeParams } from './extended/Tween';
8
9
  export type { CameraTransitionHelper, VirtualCameraComponentDefinitionExtended } from './extended/VirtualCamera';
9
10
  export type { TransformComponentExtended, TransformTypeWithOptionals } from './manual/Transform';
10
11
  export type { NameComponent, NameType } from './manual/Name';
package/dist/index.d.ts CHANGED
@@ -13,12 +13,13 @@ export * from './systems/tween';
13
13
  export * from './systems/triggerArea';
14
14
  export * from './engine/entity';
15
15
  export * from './components/types';
16
- import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended } from './components/types';
16
+ import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioAnalysisComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended } from './components/types';
17
17
  import { NameComponent } from './components/manual/Name';
18
18
  import { TagsComponentDefinitionExtended } from './components/manual/Tags';
19
19
  export declare const Transform: TransformComponentExtended;
20
20
  export declare const Animator: AnimatorComponentDefinitionExtended;
21
21
  export declare const AudioSource: AudioSourceComponentDefinitionExtended;
22
+ export declare const AudioAnalysis: AudioAnalysisComponentDefinitionExtended;
22
23
  export declare const AudioStream: AudioStreamComponentDefinitionExtended;
23
24
  export declare const Material: MaterialComponentDefinitionExtended;
24
25
  export declare const MeshRenderer: MeshRendererComponentDefinitionExtended;
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ import { engine } from './runtime/initialization';
23
23
  export const Transform = /* @__PURE__*/ components.Transform(engine);
24
24
  export const Animator = /* @__PURE__*/ components.Animator(engine);
25
25
  export const AudioSource = /* @__PURE__*/ components.AudioSource(engine);
26
+ export const AudioAnalysis = /* @__PURE__*/ components.AudioAnalysis(engine);
26
27
  export const AudioStream = /* @__PURE__*/ components.AudioStream(engine);
27
28
  export const Material = /* @__PURE__*/ components.Material(engine);
28
29
  export const MeshRenderer = /* @__PURE__*/ components.MeshRenderer(engine);
@@ -17,6 +17,7 @@ export type EventSystemOptions = {
17
17
  showFeedback?: boolean;
18
18
  showHighlight?: boolean;
19
19
  maxPlayerDistance?: number;
20
+ priority?: number;
20
21
  };
21
22
  export declare const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
22
23
  /**
@@ -47,6 +48,30 @@ export interface PointerEventsSystem {
47
48
  * @param entity - Entity where the callback was attached
48
49
  */
49
50
  removeOnPointerHoverLeave(entity: Entity): void;
51
+ /**
52
+ * @public
53
+ * Remove the callback for onProximityDown event
54
+ * @param entity - Entity where the callback was attached
55
+ */
56
+ removeOnProximityDown(entity: Entity): void;
57
+ /**
58
+ * @public
59
+ * Remove the callback for onProximityUp event
60
+ * @param entity - Entity where the callback was attached
61
+ */
62
+ removeOnProximityUp(entity: Entity): void;
63
+ /**
64
+ * @public
65
+ * Remove the callback for onProximityEnter event
66
+ * @param entity - Entity where the callback was attached
67
+ */
68
+ removeOnProximityEnter(entity: Entity): void;
69
+ /**
70
+ * @public
71
+ * Remove the callback for onProximityLeave event
72
+ * @param entity - Entity where the callback was attached
73
+ */
74
+ removeOnProximityLeave(entity: Entity): void;
50
75
  /**
51
76
  * @public
52
77
  * Execute callback when the user press the InputButton pointing at the entity
@@ -101,6 +126,46 @@ export interface PointerEventsSystem {
101
126
  entity: Entity;
102
127
  opts?: Partial<EventSystemOptions>;
103
128
  }, cb: EventSystemCallback): void;
129
+ /**
130
+ * @public
131
+ * Execute callback when the user presses the proximity button on the entity
132
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
133
+ * @param cb - Function to execute when click fires
134
+ */
135
+ onProximityDown(pointerData: {
136
+ entity: Entity;
137
+ opts?: Partial<EventSystemOptions>;
138
+ }, cb: EventSystemCallback): void;
139
+ /**
140
+ * @public
141
+ * Execute callback when the user releases the proximity button on the entity
142
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
143
+ * @param cb - Function to execute when event fires
144
+ */
145
+ onProximityUp(pointerData: {
146
+ entity: Entity;
147
+ opts?: Partial<EventSystemOptions>;
148
+ }, cb: EventSystemCallback): void;
149
+ /**
150
+ * @public
151
+ * Execute callback when the entity enters the proximity zone of the user
152
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153
+ * @param cb - Function to execute when event fires
154
+ */
155
+ onProximityEnter(pointerData: {
156
+ entity: Entity;
157
+ opts?: Partial<EventSystemOptions>;
158
+ }, cb: EventSystemCallback): void;
159
+ /**
160
+ * @public
161
+ * Execute callback when the entity leaves the proximity zone of the user
162
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
163
+ * @param cb - Function to execute when event fires
164
+ */
165
+ onProximityLeave(pointerData: {
166
+ entity: Entity;
167
+ opts?: Partial<EventSystemOptions>;
168
+ }, cb: EventSystemCallback): void;
104
169
  }
105
170
  /**
106
171
  * @public
@@ -18,12 +18,14 @@ export function createPointerEventsSystem(engine, inputSystem) {
18
18
  EventType[EventType["Up"] = 2] = "Up";
19
19
  EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
20
20
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
21
+ EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
22
+ EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
21
23
  })(EventType || (EventType = {}));
22
24
  const eventsMap = new Map();
23
25
  function getEvent(entity) {
24
26
  return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
25
27
  }
26
- function setPointerEvent(entity, type, opts) {
28
+ function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
27
29
  const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
28
30
  pointerEvent.pointerEvents.push({
29
31
  eventType: type,
@@ -33,15 +35,19 @@ export function createPointerEventsSystem(engine, inputSystem) {
33
35
  showHighlight: opts.showHighlight,
34
36
  hoverText: opts.hoverText,
35
37
  maxDistance: opts.maxDistance,
36
- maxPlayerDistance: opts.maxPlayerDistance
37
- }
38
+ maxPlayerDistance: opts.maxPlayerDistance,
39
+ priority: opts.priority
40
+ },
41
+ interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
38
42
  });
39
43
  }
40
- function removePointerEvent(entity, type, button) {
44
+ function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
41
45
  const pointerEvent = PointerEvents.getMutableOrNull(entity);
42
46
  if (!pointerEvent)
43
47
  return;
44
- pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button && pointer.eventType === type));
48
+ pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
49
+ pointer.eventType === type &&
50
+ pointer.interactionType === interactionType));
45
51
  }
46
52
  function getPointerEvent(eventType) {
47
53
  if (eventType === EventType.Up) {
@@ -53,9 +59,15 @@ export function createPointerEventsSystem(engine, inputSystem) {
53
59
  else if (eventType === EventType.HoverEnter) {
54
60
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
55
61
  }
62
+ else if (eventType === EventType.ProximityEnter) {
63
+ return 4 /* PointerEventType.PET_PROXIMITY_ENTER */;
64
+ }
65
+ else if (eventType === EventType.ProximityLeave) {
66
+ return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
67
+ }
56
68
  return 1 /* PointerEventType.PET_DOWN */;
57
69
  }
58
- function removeEvent(entity, type) {
70
+ function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
59
71
  const event = getEvent(entity);
60
72
  const pointerEvent = event.get(type);
61
73
  if (pointerEvent?.opts.hoverText) {
@@ -78,7 +90,9 @@ export function createPointerEventsSystem(engine, inputSystem) {
78
90
  if (eventType === EventType.Down ||
79
91
  eventType === EventType.Up ||
80
92
  eventType === EventType.HoverEnter ||
81
- eventType === EventType.HoverLeave) {
93
+ eventType === EventType.HoverLeave ||
94
+ eventType === EventType.ProximityEnter ||
95
+ eventType === EventType.ProximityLeave) {
82
96
  const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
83
97
  if (command) {
84
98
  checkNotThenable(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
@@ -125,6 +139,38 @@ export function createPointerEventsSystem(engine, inputSystem) {
125
139
  getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
126
140
  setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
127
141
  };
142
+ const onProximityDown = (...args) => {
143
+ const [data, cb] = args;
144
+ const { entity, opts } = data;
145
+ const options = getDefaultOpts(opts);
146
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
147
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
148
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
149
+ };
150
+ const onProximityUp = (...args) => {
151
+ const [data, cb] = args;
152
+ const { entity, opts } = data;
153
+ const options = getDefaultOpts(opts);
154
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
155
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
156
+ setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
157
+ };
158
+ const onProximityEnter = (...args) => {
159
+ const [data, cb] = args;
160
+ const { entity, opts } = data;
161
+ const options = getDefaultOpts(opts);
162
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
163
+ getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
164
+ setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
165
+ };
166
+ const onProximityLeave = (...args) => {
167
+ const [data, cb] = args;
168
+ const { entity, opts } = data;
169
+ const options = getDefaultOpts(opts);
170
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
171
+ getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
172
+ setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
173
+ };
128
174
  return {
129
175
  removeOnClick(entity) {
130
176
  removeEvent(entity, EventType.Click);
@@ -141,6 +187,18 @@ export function createPointerEventsSystem(engine, inputSystem) {
141
187
  removeOnPointerHoverLeave(entity) {
142
188
  removeEvent(entity, EventType.HoverLeave);
143
189
  },
190
+ removeOnProximityDown(entity) {
191
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
192
+ },
193
+ removeOnProximityUp(entity) {
194
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
195
+ },
196
+ removeOnProximityEnter(entity) {
197
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
198
+ },
199
+ removeOnProximityLeave(entity) {
200
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
201
+ },
144
202
  onClick(value, cb) {
145
203
  const { entity } = value;
146
204
  const options = getDefaultOpts(value.opts);
@@ -153,6 +211,10 @@ export function createPointerEventsSystem(engine, inputSystem) {
153
211
  onPointerDown,
154
212
  onPointerUp,
155
213
  onPointerHoverEnter,
156
- onPointerHoverLeave
214
+ onPointerHoverLeave,
215
+ onProximityDown,
216
+ onProximityUp,
217
+ onProximityEnter,
218
+ onProximityLeave
157
219
  };
158
220
  }
@@ -0,0 +1,55 @@
1
+ import { Entity, IEngine } from '../../engine';
2
+ import { LastWriteWinElementSetComponentDefinition } from '../../engine/component';
3
+ import { PBAudioAnalysis, PBAudioAnalysisMode } from '../generated/pb/decentraland/sdk/components/audio_analysis.gen';
4
+ export interface AudioAnalysisComponentDefinitionExtended extends LastWriteWinElementSetComponentDefinition<PBAudioAnalysis> {
5
+ /**
6
+ * Reads the component data of `entity` into the provided `out` view.
7
+ *
8
+ * @throws Error if the entity does not have an AudioAnalysis component.
9
+ * @param entity - The entity whose AudioAnalysis data will be read.
10
+ * @param out - An existing AudioAnalysisView to populate with the latest values.
11
+ */
12
+ readIntoView(entity: Entity, out: AudioAnalysisView): void;
13
+ /**
14
+ * Attempts to read the component data of `entity` into the provided `out` view.
15
+ *
16
+ * @returns `true` if the component exists and data was written into `out`,
17
+ * `false` if the entity does not have an AudioAnalysis component.
18
+ * @param entity - The entity whose AudioAnalysis data will be read.
19
+ * @param out - An existing AudioAnalysisView to populate.
20
+ */
21
+ tryReadIntoView(entity: Entity, out: AudioAnalysisView): boolean;
22
+ /**
23
+ * Creates an AudioAnalysis component for the given `entity`.
24
+ *
25
+ * If a component already exists on the entity, this call fails (does not replace).
26
+ *
27
+ * @param entity - The entity to attach the component to.
28
+ * @param mode - Analysis mode. Defaults to `PBAudioAnalysisMode.MODE_LOGARITHMIC`.
29
+ * @param amplitudeGain - Optional amplitude gain multiplier.
30
+ * @param bandsGain - Optional gain multiplier applied to all frequency bands.
31
+ */
32
+ createAudioAnalysis(entity: Entity, mode?: PBAudioAnalysisMode, // default is PBAudioAnalysisMode.MODE_LOGARITHMIC
33
+ amplitudeGain?: number, bandsGain?: number): void;
34
+ /**
35
+ * Creates the AudioAnalysis component if missing, or replaces the existing one.
36
+ *
37
+ * @param entity - The target entity.
38
+ * @param mode - Analysis mode. Defaults to `PBAudioAnalysisMode.MODE_LOGARITHMIC`.
39
+ * @param amplitudeGain - Optional amplitude gain multiplier.
40
+ * @param bandsGain - Optional gain multiplier applied to the frequency bands.
41
+ */
42
+ createOrReplaceAudioAnalysis(entity: Entity, mode?: PBAudioAnalysisMode, // default is PBAudioAnalysisMode.MODE_LOGARITHMIC
43
+ amplitudeGain?: number, bandsGain?: number): void;
44
+ }
45
+ /**
46
+ * A read-only JavaScript-friendly view of AudioAnalysis ECS data.
47
+ *
48
+ * `amplitude` represents the aggregated signal strength.
49
+ * `bands` represents the processed frequency bands.
50
+ */
51
+ export type AudioAnalysisView = {
52
+ amplitude: number;
53
+ bands: number[];
54
+ };
55
+ export declare function defineAudioAnalysisComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): AudioAnalysisComponentDefinitionExtended;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineAudioAnalysisComponent = void 0;
4
+ const index_gen_1 = require("../generated/index.gen");
5
+ function defineAudioAnalysisComponent(engine) {
6
+ const theComponent = (0, index_gen_1.AudioAnalysis)(engine);
7
+ return {
8
+ ...theComponent,
9
+ readIntoView(entity, out) {
10
+ const audioAnalysis = theComponent.get(entity);
11
+ out.amplitude = audioAnalysis.amplitude;
12
+ out.bands[0] = audioAnalysis.band0;
13
+ out.bands[1] = audioAnalysis.band1;
14
+ out.bands[2] = audioAnalysis.band2;
15
+ out.bands[3] = audioAnalysis.band3;
16
+ out.bands[4] = audioAnalysis.band4;
17
+ out.bands[5] = audioAnalysis.band5;
18
+ out.bands[6] = audioAnalysis.band6;
19
+ out.bands[7] = audioAnalysis.band7;
20
+ },
21
+ tryReadIntoView(entity, out) {
22
+ const audioAnalysis = theComponent.getOrNull(entity);
23
+ if (!audioAnalysis)
24
+ return false;
25
+ out.amplitude = audioAnalysis.amplitude;
26
+ out.bands[0] = audioAnalysis.band0;
27
+ out.bands[1] = audioAnalysis.band1;
28
+ out.bands[2] = audioAnalysis.band2;
29
+ out.bands[3] = audioAnalysis.band3;
30
+ out.bands[4] = audioAnalysis.band4;
31
+ out.bands[5] = audioAnalysis.band5;
32
+ out.bands[6] = audioAnalysis.band6;
33
+ out.bands[7] = audioAnalysis.band7;
34
+ return true;
35
+ },
36
+ createAudioAnalysis(entity, mode, amplitudeGain, bandsGain) {
37
+ theComponent.create(entity, {
38
+ mode: mode || 1 /* PBAudioAnalysisMode.MODE_LOGARITHMIC */,
39
+ amplitudeGain: amplitudeGain ?? undefined,
40
+ bandsGain: bandsGain ?? undefined,
41
+ amplitude: 0,
42
+ band0: 0,
43
+ band1: 0,
44
+ band2: 0,
45
+ band3: 0,
46
+ band4: 0,
47
+ band5: 0,
48
+ band6: 0,
49
+ band7: 0
50
+ });
51
+ },
52
+ createOrReplaceAudioAnalysis(entity, mode, amplitudeGain, bandsGain) {
53
+ theComponent.createOrReplace(entity, {
54
+ mode: mode || 1 /* PBAudioAnalysisMode.MODE_LOGARITHMIC */,
55
+ amplitudeGain: amplitudeGain ?? undefined,
56
+ bandsGain: bandsGain ?? undefined,
57
+ amplitude: 0,
58
+ band0: 0,
59
+ band1: 0,
60
+ band2: 0,
61
+ band3: 0,
62
+ band4: 0,
63
+ band5: 0,
64
+ band6: 0,
65
+ band7: 0
66
+ });
67
+ }
68
+ };
69
+ }
70
+ exports.defineAudioAnalysisComponent = defineAudioAnalysisComponent;
@@ -1,6 +1,38 @@
1
1
  import { Entity, IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
2
  import { Quaternion, Vector2, Vector3 } from '../generated/pb/decentraland/common/vectors.gen';
3
3
  import { EasingFunction, Move, MoveContinuous, PBTween, Rotate, RotateContinuous, Scale, TextureMove, TextureMoveContinuous, TextureMovementType } from '../generated/index.gen';
4
+ /**
5
+ * @public
6
+ * Partial params for Tween.Mode.MoveRotateScale(). At least one of position, rotation, or scale must be provided.
7
+ * Use this when building a mode for Tween.createOrReplace() or TweenSequence (e.g. only positionStart/positionEnd).
8
+ */
9
+ export interface MoveRotateScaleModeParams {
10
+ /** Position tween (start → end). Optional. */
11
+ position?: {
12
+ start: Vector3;
13
+ end: Vector3;
14
+ };
15
+ /** Rotation tween (start → end). Optional. */
16
+ rotation?: {
17
+ start: Quaternion;
18
+ end: Quaternion;
19
+ };
20
+ /** Scale tween (start → end). Optional. */
21
+ scale?: {
22
+ start: Vector3;
23
+ end: Vector3;
24
+ };
25
+ }
26
+ /**
27
+ * @public
28
+ * Parameters for setMoveRotateScale. At least one of position, rotation, or scale must be provided.
29
+ */
30
+ export interface SetMoveRotateScaleParams extends MoveRotateScaleModeParams {
31
+ /** Duration of the tween in milliseconds. */
32
+ duration: number;
33
+ /** Easing function (defaults to EF_LINEAR). */
34
+ easingFunction?: EasingFunction;
35
+ }
4
36
  /**
5
37
  * @public
6
38
  */
@@ -33,13 +65,18 @@ export interface TweenHelper {
33
65
  * @returns a texture-move-continuous mode tween
34
66
  */
35
67
  TextureMoveContinuous: (textureMove: TextureMoveContinuous) => PBTween['mode'];
68
+ /**
69
+ * @returns a move-rotate-scale mode tween
70
+ * @param params - partial transform (at least one of position, rotation, scale); omit axes you don't need
71
+ */
72
+ MoveRotateScale: (params: MoveRotateScaleModeParams) => PBTween['mode'];
36
73
  }
37
74
  /**
38
75
  * @public
39
76
  */
40
77
  export interface TweenComponentDefinitionExtended extends LastWriteWinElementSetComponentDefinition<PBTween> {
41
78
  /**
42
- * Texture helpers with constructor
79
+ * Helpers with constructor
43
80
  */
44
81
  Mode: TweenHelper;
45
82
  /**
@@ -118,5 +155,15 @@ export interface TweenComponentDefinitionExtended extends LastWriteWinElementSet
118
155
  * @param duration - duration of the tween in milliseconds (defaults to 0 for infinite)
119
156
  */
120
157
  setTextureMoveContinuous(entity: Entity, direction: Vector2, speed: number, movementType?: TextureMovementType, duration?: number): void;
158
+ /**
159
+ * @public
160
+ *
161
+ * Creates or replaces a move-rotate-scale tween component that simultaneously animates
162
+ * an entity's position, rotation, and/or scale from start to end. Provide only the
163
+ * properties you need (at least one of position, rotation, or scale).
164
+ * @param entity - entity to apply the tween to
165
+ * @param params - object with optional position, rotation, scale (each with start/end), duration, and optional easingFunction
166
+ */
167
+ setMoveRotateScale(entity: Entity, params: SetMoveRotateScaleParams): void;
121
168
  }
122
169
  export declare function defineTweenComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): TweenComponentDefinitionExtended;
@@ -2,6 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineTweenComponent = void 0;
4
4
  const index_gen_1 = require("../generated/index.gen");
5
+ function assertDuration(duration, apiName) {
6
+ if (!Number.isFinite(duration) || duration < 0) {
7
+ throw new Error(`${apiName}: duration must be a non-negative finite number`);
8
+ }
9
+ }
10
+ /** Shared validation for params that have optional position/rotation/scale with start & end. */
11
+ function assertMoveRotateScaleAxesStartEnd(params, apiName) {
12
+ if (!params.position && !params.rotation && !params.scale) {
13
+ throw new Error(`${apiName}: at least one of position, rotation, or scale must be provided`);
14
+ }
15
+ if (params.position) {
16
+ const pos = params.position;
17
+ if (!pos.start || !pos.end) {
18
+ throw new Error(`${apiName}: position must have both start and end`);
19
+ }
20
+ }
21
+ if (params.rotation) {
22
+ const rot = params.rotation;
23
+ if (!rot.start || !rot.end) {
24
+ throw new Error(`${apiName}: rotation must have both start and end`);
25
+ }
26
+ }
27
+ if (params.scale) {
28
+ const scl = params.scale;
29
+ if (!scl.start || !scl.end) {
30
+ throw new Error(`${apiName}: scale must have both start and end`);
31
+ }
32
+ }
33
+ }
5
34
  const TweenHelper = {
6
35
  Move(move) {
7
36
  return {
@@ -44,6 +73,21 @@ const TweenHelper = {
44
73
  $case: 'textureMoveContinuous',
45
74
  textureMoveContinuous
46
75
  };
76
+ },
77
+ MoveRotateScale(params) {
78
+ assertMoveRotateScaleAxesStartEnd(params, 'Tween.Mode.MoveRotateScale');
79
+ const moveRotateScale = {
80
+ positionStart: params.position ? params.position.start : undefined,
81
+ positionEnd: params.position ? params.position.end : undefined,
82
+ rotationStart: params.rotation ? params.rotation.start : undefined,
83
+ rotationEnd: params.rotation ? params.rotation.end : undefined,
84
+ scaleStart: params.scale ? params.scale.start : undefined,
85
+ scaleEnd: params.scale ? params.scale.end : undefined
86
+ };
87
+ return {
88
+ $case: 'moveRotateScale',
89
+ moveRotateScale
90
+ };
47
91
  }
48
92
  };
49
93
  function defineTweenComponent(engine) {
@@ -150,6 +194,28 @@ function defineTweenComponent(engine) {
150
194
  easingFunction: 0 /* EasingFunction.EF_LINEAR */,
151
195
  playing: true
152
196
  });
197
+ },
198
+ setMoveRotateScale(entity, params) {
199
+ assertMoveRotateScaleAxesStartEnd(params, 'setMoveRotateScale');
200
+ assertDuration(params.duration, 'setMoveRotateScale');
201
+ const { position, rotation, scale, duration, easingFunction = 0 /* EasingFunction.EF_LINEAR */ } = params;
202
+ const moveRotateScale = {
203
+ positionStart: position ? position.start : undefined,
204
+ positionEnd: position ? position.end : undefined,
205
+ rotationStart: rotation ? rotation.start : undefined,
206
+ rotationEnd: rotation ? rotation.end : undefined,
207
+ scaleStart: scale ? scale.start : undefined,
208
+ scaleEnd: scale ? scale.end : undefined
209
+ };
210
+ theComponent.createOrReplace(entity, {
211
+ mode: {
212
+ $case: 'moveRotateScale',
213
+ moveRotateScale
214
+ },
215
+ duration,
216
+ easingFunction,
217
+ playing: true
218
+ });
153
219
  }
154
220
  };
155
221
  }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AudioAnalysisSchema = void 0;
4
+ const audio_analysis_gen_1 = require("./pb/decentraland/sdk/components/audio_analysis.gen");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.AudioAnalysisSchema = {
9
+ COMPONENT_ID: 1212,
10
+ serialize(value, builder) {
11
+ const writer = audio_analysis_gen_1.PBAudioAnalysis.encode(value);
12
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
13
+ builder.writeBuffer(buffer, false);
14
+ },
15
+ deserialize(reader) {
16
+ return audio_analysis_gen_1.PBAudioAnalysis.decode(reader.buffer(), reader.remainingBytes());
17
+ },
18
+ create() {
19
+ // TODO: this is a hack.
20
+ return audio_analysis_gen_1.PBAudioAnalysis.decode(new Uint8Array());
21
+ },
22
+ jsonSchema: {
23
+ type: "object",
24
+ properties: {},
25
+ serializationType: "protocol-buffer",
26
+ protocolBuffer: "PBAudioAnalysis"
27
+ }
28
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvatarLocomotionSettingsSchema = void 0;
4
+ const avatar_locomotion_settings_gen_1 = require("./pb/decentraland/sdk/components/avatar_locomotion_settings.gen");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.AvatarLocomotionSettingsSchema = {
9
+ COMPONENT_ID: 1211,
10
+ serialize(value, builder) {
11
+ const writer = avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.encode(value);
12
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
13
+ builder.writeBuffer(buffer, false);
14
+ },
15
+ deserialize(reader) {
16
+ return avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.decode(reader.buffer(), reader.remainingBytes());
17
+ },
18
+ create() {
19
+ // TODO: this is a hack.
20
+ return avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.decode(new Uint8Array());
21
+ },
22
+ jsonSchema: {
23
+ type: "object",
24
+ properties: {},
25
+ serializationType: "protocol-buffer",
26
+ protocolBuffer: "PBAvatarLocomotionSettings"
27
+ }
28
+ };
@@ -9,6 +9,7 @@ exports.coreComponentMappings = {
9
9
  "core::Animator": 1042,
10
10
  "core::AssetLoad": 1213,
11
11
  "core::AssetLoadLoadingState": 1214,
12
+ "core::AudioAnalysis": 1212,
12
13
  "core::AudioEvent": 1105,
13
14
  "core::AudioSource": 1020,
14
15
  "core::AudioStream": 1021,
@@ -16,6 +17,7 @@ exports.coreComponentMappings = {
16
17
  "core::AvatarBase": 1087,
17
18
  "core::AvatarEmoteCommand": 1088,
18
19
  "core::AvatarEquippedData": 1091,
20
+ "core::AvatarLocomotionSettings": 1211,
19
21
  "core::AvatarModifierArea": 1070,
20
22
  "core::AvatarShape": 1080,
21
23
  "core::Billboard": 1090,