@dcl/ecs 7.24.5-29247185020.commit-e92dfe6 → 7.24.5-29255693632.commit-d9d75fe

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 (21) hide show
  1. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +6 -0
  2. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +30 -0
  3. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +3 -1
  4. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +2 -0
  5. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +38 -1
  6. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +136 -1
  7. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +33 -0
  8. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +102 -0
  9. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.d.ts +8 -0
  10. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.js +10 -1
  11. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +6 -0
  12. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +30 -0
  13. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +3 -1
  14. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +2 -0
  15. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +38 -1
  16. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +137 -2
  17. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +33 -0
  18. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +103 -1
  19. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.d.ts +8 -0
  20. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.js +10 -1
  21. package/package.json +2 -2
@@ -19,6 +19,12 @@ export interface PBAvatarLocomotionSettings {
19
19
  runJumpHeight?: number | undefined;
20
20
  /** Cooldown time after a hard landing before the avatar can move again (in seconds) */
21
21
  hardLandingCooldown?: number | undefined;
22
+ /** Height of the double jump (in meters) */
23
+ doubleJumpHeight?: number | undefined;
24
+ /** Maximum speed when gliding (in meters per second) */
25
+ glidingSpeed?: number | undefined;
26
+ /** Maximum falling speed when gliding (in meters per second) */
27
+ glidingFallingSpeed?: number | undefined;
22
28
  }
23
29
  /**
24
30
  * @public
@@ -9,6 +9,9 @@ function createBasePBAvatarLocomotionSettings() {
9
9
  jumpHeight: undefined,
10
10
  runJumpHeight: undefined,
11
11
  hardLandingCooldown: undefined,
12
+ doubleJumpHeight: undefined,
13
+ glidingSpeed: undefined,
14
+ glidingFallingSpeed: undefined,
12
15
  };
13
16
  }
14
17
  /**
@@ -35,6 +38,15 @@ export var PBAvatarLocomotionSettings;
35
38
  if (message.hardLandingCooldown !== undefined) {
36
39
  writer.uint32(53).float(message.hardLandingCooldown);
37
40
  }
41
+ if (message.doubleJumpHeight !== undefined) {
42
+ writer.uint32(61).float(message.doubleJumpHeight);
43
+ }
44
+ if (message.glidingSpeed !== undefined) {
45
+ writer.uint32(69).float(message.glidingSpeed);
46
+ }
47
+ if (message.glidingFallingSpeed !== undefined) {
48
+ writer.uint32(77).float(message.glidingFallingSpeed);
49
+ }
38
50
  return writer;
39
51
  }
40
52
  PBAvatarLocomotionSettings.encode = encode;
@@ -81,6 +93,24 @@ export var PBAvatarLocomotionSettings;
81
93
  }
82
94
  message.hardLandingCooldown = reader.float();
83
95
  continue;
96
+ case 7:
97
+ if (tag !== 61) {
98
+ break;
99
+ }
100
+ message.doubleJumpHeight = reader.float();
101
+ continue;
102
+ case 8:
103
+ if (tag !== 69) {
104
+ break;
105
+ }
106
+ message.glidingSpeed = reader.float();
107
+ continue;
108
+ case 9:
109
+ if (tag !== 77) {
110
+ break;
111
+ }
112
+ message.glidingFallingSpeed = reader.float();
113
+ continue;
84
114
  }
85
115
  if ((tag & 7) === 4 || tag === 0) {
86
116
  break;
@@ -8,7 +8,9 @@ export declare const enum AvatarModifierType {
8
8
  /** AMT_HIDE_AVATARS - avatars are invisible */
9
9
  AMT_HIDE_AVATARS = 0,
10
10
  /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */
11
- AMT_DISABLE_PASSPORTS = 1
11
+ AMT_DISABLE_PASSPORTS = 1,
12
+ /** AMT_HIDE_NAMETAGS - the name tag displayed above an avatar is hidden. */
13
+ AMT_HIDE_NAMETAGS = 2
12
14
  }
13
15
  /**
14
16
  * @public
@@ -12,6 +12,8 @@ export var AvatarModifierType;
12
12
  AvatarModifierType[AvatarModifierType["AMT_HIDE_AVATARS"] = 0] = "AMT_HIDE_AVATARS";
13
13
  /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */
14
14
  AvatarModifierType[AvatarModifierType["AMT_DISABLE_PASSPORTS"] = 1] = "AMT_DISABLE_PASSPORTS";
15
+ /** AMT_HIDE_NAMETAGS - the name tag displayed above an avatar is hidden. */
16
+ AvatarModifierType[AvatarModifierType["AMT_HIDE_NAMETAGS"] = 2] = "AMT_HIDE_NAMETAGS";
15
17
  })(AvatarModifierType || (AvatarModifierType = {}));
16
18
  /**
17
19
  * @public
@@ -5,11 +5,41 @@ import { Vector3 } from "../../common/vectors.gen";
5
5
  */
6
6
  export interface PBAvatarMovement {
7
7
  velocity: Vector3 | undefined;
8
- /** 0-360, we don't allow pitch/roll */
8
+ /** 0-360, yaw only; this is the authoritative facing (other clients read it, and physics treats the avatar as upright). Lean is expressed separately via tilt_pitch/tilt_roll. */
9
9
  orientation: number;
10
10
  groundDirection?: Vector3 | undefined;
11
11
  /** set for one frame when a walk_target ends: true = reached target, false = failed; absent = in progress or no walk */
12
12
  walkSuccess?: boolean | undefined;
13
+ /** if set, the engine plays this animation instead of selecting one from velocity heuristics */
14
+ animation?: MovementAnimation | undefined;
15
+ /** render-only forward/back lean in degrees, applied on top of `orientation` (rotation about the avatar's local X axis). Does not affect the physics capsule (stays upright) or the facing other clients read. Defaults to 0. */
16
+ tiltPitch?: number | undefined;
17
+ /** render-only sideways lean in degrees, applied on top of `orientation` (rotation about the avatar's local Z axis). Same constraints as tilt_pitch. Useful e.g. for glider banking. Defaults to 0. */
18
+ tiltRoll?: number | undefined;
19
+ }
20
+ /**
21
+ * Describes the animation the movement scene wants the avatar to play.
22
+ * One GLB = one clip (following the scene-emote convention: single clip, or a clip named with `_Avatar` suffix).
23
+ * When absent the engine falls back to its built-in velocity-based selection (walk/run/jump/idle).
24
+ */
25
+ /**
26
+ * @public
27
+ */
28
+ export interface MovementAnimation {
29
+ /** scene-relative path to the gltf/glb asset (resolved via the scene content map) */
30
+ src: string;
31
+ /** whether the clip repeats once it reaches the end */
32
+ loop: boolean;
33
+ /** playback speed multiplier (1.0 = clip's native rate) */
34
+ speed: number;
35
+ /** true: a triggerSceneEmote may take over; false: emotes are suppressed while this animation plays */
36
+ idle: boolean;
37
+ /** cross-fade duration when `src` changes; defaults to 0.2 when unset. Not applied to loop/speed/idle changes. */
38
+ transitionSeconds?: number | undefined;
39
+ /** if set, the engine seeks to this position (in seconds) this frame. Clear on subsequent frames to allow normal playback. The scene can read `AvatarAnimationState.playback_time` first to decide. */
40
+ playbackTime?: number | undefined;
41
+ /** scene-relative paths to audio clips (.mp3/.ogg) to play this frame on the avatar audio bus. Fire-and-forget: each listed clip plays once per frame it appears; leaving a clip set for multiple frames re-triggers it. No stop mechanism. Use `AvatarAnimationState.playback_time` to trigger sounds at the right point in the clip (e.g. foot plants). */
42
+ sounds: string[];
13
43
  }
14
44
  /**
15
45
  * @public
@@ -18,3 +48,10 @@ export declare namespace PBAvatarMovement {
18
48
  function encode(message: PBAvatarMovement, writer?: _m0.Writer): _m0.Writer;
19
49
  function decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarMovement;
20
50
  }
51
+ /**
52
+ * @public
53
+ */
54
+ export declare namespace MovementAnimation {
55
+ function encode(message: MovementAnimation, writer?: _m0.Writer): _m0.Writer;
56
+ function decode(input: _m0.Reader | Uint8Array, length?: number): MovementAnimation;
57
+ }
@@ -3,7 +3,15 @@ import _m0 from "protobufjs/minimal";
3
3
  import { Vector3 } from "../../common/vectors.gen";
4
4
  const protobufPackageSarasa = "decentraland.sdk.components";
5
5
  function createBasePBAvatarMovement() {
6
- return { velocity: undefined, orientation: 0, groundDirection: undefined, walkSuccess: undefined };
6
+ return {
7
+ velocity: undefined,
8
+ orientation: 0,
9
+ groundDirection: undefined,
10
+ walkSuccess: undefined,
11
+ animation: undefined,
12
+ tiltPitch: undefined,
13
+ tiltRoll: undefined,
14
+ };
7
15
  }
8
16
  /**
9
17
  * @public
@@ -23,6 +31,15 @@ export var PBAvatarMovement;
23
31
  if (message.walkSuccess !== undefined) {
24
32
  writer.uint32(32).bool(message.walkSuccess);
25
33
  }
34
+ if (message.animation !== undefined) {
35
+ MovementAnimation.encode(message.animation, writer.uint32(42).fork()).ldelim();
36
+ }
37
+ if (message.tiltPitch !== undefined) {
38
+ writer.uint32(53).float(message.tiltPitch);
39
+ }
40
+ if (message.tiltRoll !== undefined) {
41
+ writer.uint32(61).float(message.tiltRoll);
42
+ }
26
43
  return writer;
27
44
  }
28
45
  PBAvatarMovement.encode = encode;
@@ -57,6 +74,24 @@ export var PBAvatarMovement;
57
74
  }
58
75
  message.walkSuccess = reader.bool();
59
76
  continue;
77
+ case 5:
78
+ if (tag !== 42) {
79
+ break;
80
+ }
81
+ message.animation = MovementAnimation.decode(reader, reader.uint32());
82
+ continue;
83
+ case 6:
84
+ if (tag !== 53) {
85
+ break;
86
+ }
87
+ message.tiltPitch = reader.float();
88
+ continue;
89
+ case 7:
90
+ if (tag !== 61) {
91
+ break;
92
+ }
93
+ message.tiltRoll = reader.float();
94
+ continue;
60
95
  }
61
96
  if ((tag & 7) === 4 || tag === 0) {
62
97
  break;
@@ -67,3 +102,103 @@ export var PBAvatarMovement;
67
102
  }
68
103
  PBAvatarMovement.decode = decode;
69
104
  })(PBAvatarMovement || (PBAvatarMovement = {}));
105
+ function createBaseMovementAnimation() {
106
+ return {
107
+ src: "",
108
+ loop: false,
109
+ speed: 0,
110
+ idle: false,
111
+ transitionSeconds: undefined,
112
+ playbackTime: undefined,
113
+ sounds: [],
114
+ };
115
+ }
116
+ /**
117
+ * @public
118
+ */
119
+ export var MovementAnimation;
120
+ (function (MovementAnimation) {
121
+ function encode(message, writer = _m0.Writer.create()) {
122
+ if (message.src !== "") {
123
+ writer.uint32(10).string(message.src);
124
+ }
125
+ if (message.loop === true) {
126
+ writer.uint32(16).bool(message.loop);
127
+ }
128
+ if (message.speed !== 0) {
129
+ writer.uint32(29).float(message.speed);
130
+ }
131
+ if (message.idle === true) {
132
+ writer.uint32(32).bool(message.idle);
133
+ }
134
+ if (message.transitionSeconds !== undefined) {
135
+ writer.uint32(45).float(message.transitionSeconds);
136
+ }
137
+ if (message.playbackTime !== undefined) {
138
+ writer.uint32(53).float(message.playbackTime);
139
+ }
140
+ for (const v of message.sounds) {
141
+ writer.uint32(58).string(v);
142
+ }
143
+ return writer;
144
+ }
145
+ MovementAnimation.encode = encode;
146
+ function decode(input, length) {
147
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
148
+ let end = length === undefined ? reader.len : reader.pos + length;
149
+ const message = createBaseMovementAnimation();
150
+ while (reader.pos < end) {
151
+ const tag = reader.uint32();
152
+ switch (tag >>> 3) {
153
+ case 1:
154
+ if (tag !== 10) {
155
+ break;
156
+ }
157
+ message.src = reader.string();
158
+ continue;
159
+ case 2:
160
+ if (tag !== 16) {
161
+ break;
162
+ }
163
+ message.loop = reader.bool();
164
+ continue;
165
+ case 3:
166
+ if (tag !== 29) {
167
+ break;
168
+ }
169
+ message.speed = reader.float();
170
+ continue;
171
+ case 4:
172
+ if (tag !== 32) {
173
+ break;
174
+ }
175
+ message.idle = reader.bool();
176
+ continue;
177
+ case 5:
178
+ if (tag !== 45) {
179
+ break;
180
+ }
181
+ message.transitionSeconds = reader.float();
182
+ continue;
183
+ case 6:
184
+ if (tag !== 53) {
185
+ break;
186
+ }
187
+ message.playbackTime = reader.float();
188
+ continue;
189
+ case 7:
190
+ if (tag !== 58) {
191
+ break;
192
+ }
193
+ message.sounds.push(reader.string());
194
+ continue;
195
+ }
196
+ if ((tag & 7) === 4 || tag === 0) {
197
+ break;
198
+ }
199
+ reader.skipType(tag & 7);
200
+ }
201
+ return message;
202
+ }
203
+ MovementAnimation.decode = decode;
204
+ })(MovementAnimation || (MovementAnimation = {}));
@@ -22,6 +22,32 @@ export interface PBAvatarMovementInfo {
22
22
  walkTarget?: Vector3 | undefined;
23
23
  /** stop distance for walk_target; considered reached when within this distance */
24
24
  walkThreshold?: number | undefined;
25
+ /** current state of a scene-driven movement animation. Absent when the engine is using its velocity-based fallback. `playback_time` freezes while a triggerSceneEmote is overriding the animation. */
26
+ activeAnimationState?: AvatarAnimationState | undefined;
27
+ }
28
+ /**
29
+ * Mirror of the scene-driven movement animation currently playing, reported by the engine.
30
+ * Readable by any scene (not just the controller) so niche effects (e.g. dust cloud on landing) can react.
31
+ * Active emotes are not represented here — scenes already have their own way to read them.
32
+ */
33
+ /**
34
+ * @public
35
+ */
36
+ export interface AvatarAnimationState {
37
+ /** same scene-relative path the controlling scene supplied */
38
+ src: string;
39
+ /** mirrors the request */
40
+ loop: boolean;
41
+ /** mirrors the request */
42
+ speed: number;
43
+ /** mirrors the request */
44
+ idle: boolean;
45
+ /** seconds into the clip; wraps on loop; frozen while an emote override is playing */
46
+ playbackTime: number;
47
+ /** total clip length in seconds */
48
+ duration: number;
49
+ /** how many times the clip has completed since it started */
50
+ loopCount: number;
25
51
  }
26
52
  /**
27
53
  * @public
@@ -30,3 +56,10 @@ export declare namespace PBAvatarMovementInfo {
30
56
  function encode(message: PBAvatarMovementInfo, writer?: _m0.Writer): _m0.Writer;
31
57
  function decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarMovementInfo;
32
58
  }
59
+ /**
60
+ * @public
61
+ */
62
+ export declare namespace AvatarAnimationState {
63
+ function encode(message: AvatarAnimationState, writer?: _m0.Writer): _m0.Writer;
64
+ function decode(input: _m0.Reader | Uint8Array, length?: number): AvatarAnimationState;
65
+ }
@@ -15,6 +15,7 @@ function createBasePBAvatarMovementInfo() {
15
15
  activeInputModifier: undefined,
16
16
  walkTarget: undefined,
17
17
  walkThreshold: undefined,
18
+ activeAnimationState: undefined,
18
19
  };
19
20
  }
20
21
  /**
@@ -50,6 +51,9 @@ export var PBAvatarMovementInfo;
50
51
  if (message.walkThreshold !== undefined) {
51
52
  writer.uint32(77).float(message.walkThreshold);
52
53
  }
54
+ if (message.activeAnimationState !== undefined) {
55
+ AvatarAnimationState.encode(message.activeAnimationState, writer.uint32(82).fork()).ldelim();
56
+ }
53
57
  return writer;
54
58
  }
55
59
  PBAvatarMovementInfo.encode = encode;
@@ -114,6 +118,12 @@ export var PBAvatarMovementInfo;
114
118
  }
115
119
  message.walkThreshold = reader.float();
116
120
  continue;
121
+ case 10:
122
+ if (tag !== 82) {
123
+ break;
124
+ }
125
+ message.activeAnimationState = AvatarAnimationState.decode(reader, reader.uint32());
126
+ continue;
117
127
  }
118
128
  if ((tag & 7) === 4 || tag === 0) {
119
129
  break;
@@ -124,3 +134,95 @@ export var PBAvatarMovementInfo;
124
134
  }
125
135
  PBAvatarMovementInfo.decode = decode;
126
136
  })(PBAvatarMovementInfo || (PBAvatarMovementInfo = {}));
137
+ function createBaseAvatarAnimationState() {
138
+ return { src: "", loop: false, speed: 0, idle: false, playbackTime: 0, duration: 0, loopCount: 0 };
139
+ }
140
+ /**
141
+ * @public
142
+ */
143
+ export var AvatarAnimationState;
144
+ (function (AvatarAnimationState) {
145
+ function encode(message, writer = _m0.Writer.create()) {
146
+ if (message.src !== "") {
147
+ writer.uint32(10).string(message.src);
148
+ }
149
+ if (message.loop === true) {
150
+ writer.uint32(16).bool(message.loop);
151
+ }
152
+ if (message.speed !== 0) {
153
+ writer.uint32(29).float(message.speed);
154
+ }
155
+ if (message.idle === true) {
156
+ writer.uint32(32).bool(message.idle);
157
+ }
158
+ if (message.playbackTime !== 0) {
159
+ writer.uint32(45).float(message.playbackTime);
160
+ }
161
+ if (message.duration !== 0) {
162
+ writer.uint32(53).float(message.duration);
163
+ }
164
+ if (message.loopCount !== 0) {
165
+ writer.uint32(56).uint32(message.loopCount);
166
+ }
167
+ return writer;
168
+ }
169
+ AvatarAnimationState.encode = encode;
170
+ function decode(input, length) {
171
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
172
+ let end = length === undefined ? reader.len : reader.pos + length;
173
+ const message = createBaseAvatarAnimationState();
174
+ while (reader.pos < end) {
175
+ const tag = reader.uint32();
176
+ switch (tag >>> 3) {
177
+ case 1:
178
+ if (tag !== 10) {
179
+ break;
180
+ }
181
+ message.src = reader.string();
182
+ continue;
183
+ case 2:
184
+ if (tag !== 16) {
185
+ break;
186
+ }
187
+ message.loop = reader.bool();
188
+ continue;
189
+ case 3:
190
+ if (tag !== 29) {
191
+ break;
192
+ }
193
+ message.speed = reader.float();
194
+ continue;
195
+ case 4:
196
+ if (tag !== 32) {
197
+ break;
198
+ }
199
+ message.idle = reader.bool();
200
+ continue;
201
+ case 5:
202
+ if (tag !== 45) {
203
+ break;
204
+ }
205
+ message.playbackTime = reader.float();
206
+ continue;
207
+ case 6:
208
+ if (tag !== 53) {
209
+ break;
210
+ }
211
+ message.duration = reader.float();
212
+ continue;
213
+ case 7:
214
+ if (tag !== 56) {
215
+ break;
216
+ }
217
+ message.loopCount = reader.uint32();
218
+ continue;
219
+ }
220
+ if ((tag & 7) === 4 || tag === 0) {
221
+ break;
222
+ }
223
+ reader.skipType(tag & 7);
224
+ }
225
+ return message;
226
+ }
227
+ AvatarAnimationState.decode = decode;
228
+ })(AvatarAnimationState || (AvatarAnimationState = {}));
@@ -19,6 +19,14 @@ export interface PBUiCanvasInformation {
19
19
  * on the contrary, if the chat UI is shown, the rect would be smaller.
20
20
  */
21
21
  interactableArea: BorderRect | undefined;
22
+ /**
23
+ * informs the sdk about the screen inset area (safe margins). these are the
24
+ * insets from each edge of the screen that are reserved by the device or
25
+ * platform UI (for example: the notch, status bar, home indicator, or rounded
26
+ * corners on mobile). scenes should avoid placing critical UI within these
27
+ * insets to ensure it is not occluded. on desktop this is typically (0, 0, 0, 0).
28
+ */
29
+ screenInsetArea?: BorderRect | undefined;
22
30
  }
23
31
  /**
24
32
  * @public
@@ -3,7 +3,7 @@ import _m0 from "protobufjs/minimal";
3
3
  import { BorderRect } from "../../common/border_rect.gen";
4
4
  const protobufPackageSarasa = "decentraland.sdk.components";
5
5
  function createBasePBUiCanvasInformation() {
6
- return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined };
6
+ return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined, screenInsetArea: undefined };
7
7
  }
8
8
  /**
9
9
  * @public
@@ -23,6 +23,9 @@ export var PBUiCanvasInformation;
23
23
  if (message.interactableArea !== undefined) {
24
24
  BorderRect.encode(message.interactableArea, writer.uint32(34).fork()).ldelim();
25
25
  }
26
+ if (message.screenInsetArea !== undefined) {
27
+ BorderRect.encode(message.screenInsetArea, writer.uint32(42).fork()).ldelim();
28
+ }
26
29
  return writer;
27
30
  }
28
31
  PBUiCanvasInformation.encode = encode;
@@ -57,6 +60,12 @@ export var PBUiCanvasInformation;
57
60
  }
58
61
  message.interactableArea = BorderRect.decode(reader, reader.uint32());
59
62
  continue;
63
+ case 5:
64
+ if (tag !== 42) {
65
+ break;
66
+ }
67
+ message.screenInsetArea = BorderRect.decode(reader, reader.uint32());
68
+ continue;
60
69
  }
61
70
  if ((tag & 7) === 4 || tag === 0) {
62
71
  break;
@@ -19,6 +19,12 @@ export interface PBAvatarLocomotionSettings {
19
19
  runJumpHeight?: number | undefined;
20
20
  /** Cooldown time after a hard landing before the avatar can move again (in seconds) */
21
21
  hardLandingCooldown?: number | undefined;
22
+ /** Height of the double jump (in meters) */
23
+ doubleJumpHeight?: number | undefined;
24
+ /** Maximum speed when gliding (in meters per second) */
25
+ glidingSpeed?: number | undefined;
26
+ /** Maximum falling speed when gliding (in meters per second) */
27
+ glidingFallingSpeed?: number | undefined;
22
28
  }
23
29
  /**
24
30
  * @public
@@ -15,6 +15,9 @@ function createBasePBAvatarLocomotionSettings() {
15
15
  jumpHeight: undefined,
16
16
  runJumpHeight: undefined,
17
17
  hardLandingCooldown: undefined,
18
+ doubleJumpHeight: undefined,
19
+ glidingSpeed: undefined,
20
+ glidingFallingSpeed: undefined,
18
21
  };
19
22
  }
20
23
  /**
@@ -41,6 +44,15 @@ var PBAvatarLocomotionSettings;
41
44
  if (message.hardLandingCooldown !== undefined) {
42
45
  writer.uint32(53).float(message.hardLandingCooldown);
43
46
  }
47
+ if (message.doubleJumpHeight !== undefined) {
48
+ writer.uint32(61).float(message.doubleJumpHeight);
49
+ }
50
+ if (message.glidingSpeed !== undefined) {
51
+ writer.uint32(69).float(message.glidingSpeed);
52
+ }
53
+ if (message.glidingFallingSpeed !== undefined) {
54
+ writer.uint32(77).float(message.glidingFallingSpeed);
55
+ }
44
56
  return writer;
45
57
  }
46
58
  PBAvatarLocomotionSettings.encode = encode;
@@ -87,6 +99,24 @@ var PBAvatarLocomotionSettings;
87
99
  }
88
100
  message.hardLandingCooldown = reader.float();
89
101
  continue;
102
+ case 7:
103
+ if (tag !== 61) {
104
+ break;
105
+ }
106
+ message.doubleJumpHeight = reader.float();
107
+ continue;
108
+ case 8:
109
+ if (tag !== 69) {
110
+ break;
111
+ }
112
+ message.glidingSpeed = reader.float();
113
+ continue;
114
+ case 9:
115
+ if (tag !== 77) {
116
+ break;
117
+ }
118
+ message.glidingFallingSpeed = reader.float();
119
+ continue;
90
120
  }
91
121
  if ((tag & 7) === 4 || tag === 0) {
92
122
  break;
@@ -8,7 +8,9 @@ export declare const enum AvatarModifierType {
8
8
  /** AMT_HIDE_AVATARS - avatars are invisible */
9
9
  AMT_HIDE_AVATARS = 0,
10
10
  /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */
11
- AMT_DISABLE_PASSPORTS = 1
11
+ AMT_DISABLE_PASSPORTS = 1,
12
+ /** AMT_HIDE_NAMETAGS - the name tag displayed above an avatar is hidden. */
13
+ AMT_HIDE_NAMETAGS = 2
12
14
  }
13
15
  /**
14
16
  * @public
@@ -18,6 +18,8 @@ var AvatarModifierType;
18
18
  AvatarModifierType[AvatarModifierType["AMT_HIDE_AVATARS"] = 0] = "AMT_HIDE_AVATARS";
19
19
  /** AMT_DISABLE_PASSPORTS - selecting (e.g. clicking) an avatar will not bring up their profile. */
20
20
  AvatarModifierType[AvatarModifierType["AMT_DISABLE_PASSPORTS"] = 1] = "AMT_DISABLE_PASSPORTS";
21
+ /** AMT_HIDE_NAMETAGS - the name tag displayed above an avatar is hidden. */
22
+ AvatarModifierType[AvatarModifierType["AMT_HIDE_NAMETAGS"] = 2] = "AMT_HIDE_NAMETAGS";
21
23
  })(AvatarModifierType = exports.AvatarModifierType || (exports.AvatarModifierType = {}));
22
24
  /**
23
25
  * @public
@@ -5,11 +5,41 @@ import { Vector3 } from "../../common/vectors.gen";
5
5
  */
6
6
  export interface PBAvatarMovement {
7
7
  velocity: Vector3 | undefined;
8
- /** 0-360, we don't allow pitch/roll */
8
+ /** 0-360, yaw only; this is the authoritative facing (other clients read it, and physics treats the avatar as upright). Lean is expressed separately via tilt_pitch/tilt_roll. */
9
9
  orientation: number;
10
10
  groundDirection?: Vector3 | undefined;
11
11
  /** set for one frame when a walk_target ends: true = reached target, false = failed; absent = in progress or no walk */
12
12
  walkSuccess?: boolean | undefined;
13
+ /** if set, the engine plays this animation instead of selecting one from velocity heuristics */
14
+ animation?: MovementAnimation | undefined;
15
+ /** render-only forward/back lean in degrees, applied on top of `orientation` (rotation about the avatar's local X axis). Does not affect the physics capsule (stays upright) or the facing other clients read. Defaults to 0. */
16
+ tiltPitch?: number | undefined;
17
+ /** render-only sideways lean in degrees, applied on top of `orientation` (rotation about the avatar's local Z axis). Same constraints as tilt_pitch. Useful e.g. for glider banking. Defaults to 0. */
18
+ tiltRoll?: number | undefined;
19
+ }
20
+ /**
21
+ * Describes the animation the movement scene wants the avatar to play.
22
+ * One GLB = one clip (following the scene-emote convention: single clip, or a clip named with `_Avatar` suffix).
23
+ * When absent the engine falls back to its built-in velocity-based selection (walk/run/jump/idle).
24
+ */
25
+ /**
26
+ * @public
27
+ */
28
+ export interface MovementAnimation {
29
+ /** scene-relative path to the gltf/glb asset (resolved via the scene content map) */
30
+ src: string;
31
+ /** whether the clip repeats once it reaches the end */
32
+ loop: boolean;
33
+ /** playback speed multiplier (1.0 = clip's native rate) */
34
+ speed: number;
35
+ /** true: a triggerSceneEmote may take over; false: emotes are suppressed while this animation plays */
36
+ idle: boolean;
37
+ /** cross-fade duration when `src` changes; defaults to 0.2 when unset. Not applied to loop/speed/idle changes. */
38
+ transitionSeconds?: number | undefined;
39
+ /** if set, the engine seeks to this position (in seconds) this frame. Clear on subsequent frames to allow normal playback. The scene can read `AvatarAnimationState.playback_time` first to decide. */
40
+ playbackTime?: number | undefined;
41
+ /** scene-relative paths to audio clips (.mp3/.ogg) to play this frame on the avatar audio bus. Fire-and-forget: each listed clip plays once per frame it appears; leaving a clip set for multiple frames re-triggers it. No stop mechanism. Use `AvatarAnimationState.playback_time` to trigger sounds at the right point in the clip (e.g. foot plants). */
42
+ sounds: string[];
13
43
  }
14
44
  /**
15
45
  * @public
@@ -18,3 +48,10 @@ export declare namespace PBAvatarMovement {
18
48
  function encode(message: PBAvatarMovement, writer?: _m0.Writer): _m0.Writer;
19
49
  function decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarMovement;
20
50
  }
51
+ /**
52
+ * @public
53
+ */
54
+ export declare namespace MovementAnimation {
55
+ function encode(message: MovementAnimation, writer?: _m0.Writer): _m0.Writer;
56
+ function decode(input: _m0.Reader | Uint8Array, length?: number): MovementAnimation;
57
+ }
@@ -3,13 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PBAvatarMovement = void 0;
6
+ exports.MovementAnimation = exports.PBAvatarMovement = void 0;
7
7
  /* eslint-disable */
8
8
  const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
9
  const vectors_gen_1 = require("../../common/vectors.gen");
10
10
  const protobufPackageSarasa = "decentraland.sdk.components";
11
11
  function createBasePBAvatarMovement() {
12
- return { velocity: undefined, orientation: 0, groundDirection: undefined, walkSuccess: undefined };
12
+ return {
13
+ velocity: undefined,
14
+ orientation: 0,
15
+ groundDirection: undefined,
16
+ walkSuccess: undefined,
17
+ animation: undefined,
18
+ tiltPitch: undefined,
19
+ tiltRoll: undefined,
20
+ };
13
21
  }
14
22
  /**
15
23
  * @public
@@ -29,6 +37,15 @@ var PBAvatarMovement;
29
37
  if (message.walkSuccess !== undefined) {
30
38
  writer.uint32(32).bool(message.walkSuccess);
31
39
  }
40
+ if (message.animation !== undefined) {
41
+ MovementAnimation.encode(message.animation, writer.uint32(42).fork()).ldelim();
42
+ }
43
+ if (message.tiltPitch !== undefined) {
44
+ writer.uint32(53).float(message.tiltPitch);
45
+ }
46
+ if (message.tiltRoll !== undefined) {
47
+ writer.uint32(61).float(message.tiltRoll);
48
+ }
32
49
  return writer;
33
50
  }
34
51
  PBAvatarMovement.encode = encode;
@@ -63,6 +80,24 @@ var PBAvatarMovement;
63
80
  }
64
81
  message.walkSuccess = reader.bool();
65
82
  continue;
83
+ case 5:
84
+ if (tag !== 42) {
85
+ break;
86
+ }
87
+ message.animation = MovementAnimation.decode(reader, reader.uint32());
88
+ continue;
89
+ case 6:
90
+ if (tag !== 53) {
91
+ break;
92
+ }
93
+ message.tiltPitch = reader.float();
94
+ continue;
95
+ case 7:
96
+ if (tag !== 61) {
97
+ break;
98
+ }
99
+ message.tiltRoll = reader.float();
100
+ continue;
66
101
  }
67
102
  if ((tag & 7) === 4 || tag === 0) {
68
103
  break;
@@ -73,3 +108,103 @@ var PBAvatarMovement;
73
108
  }
74
109
  PBAvatarMovement.decode = decode;
75
110
  })(PBAvatarMovement = exports.PBAvatarMovement || (exports.PBAvatarMovement = {}));
111
+ function createBaseMovementAnimation() {
112
+ return {
113
+ src: "",
114
+ loop: false,
115
+ speed: 0,
116
+ idle: false,
117
+ transitionSeconds: undefined,
118
+ playbackTime: undefined,
119
+ sounds: [],
120
+ };
121
+ }
122
+ /**
123
+ * @public
124
+ */
125
+ var MovementAnimation;
126
+ (function (MovementAnimation) {
127
+ function encode(message, writer = minimal_1.default.Writer.create()) {
128
+ if (message.src !== "") {
129
+ writer.uint32(10).string(message.src);
130
+ }
131
+ if (message.loop === true) {
132
+ writer.uint32(16).bool(message.loop);
133
+ }
134
+ if (message.speed !== 0) {
135
+ writer.uint32(29).float(message.speed);
136
+ }
137
+ if (message.idle === true) {
138
+ writer.uint32(32).bool(message.idle);
139
+ }
140
+ if (message.transitionSeconds !== undefined) {
141
+ writer.uint32(45).float(message.transitionSeconds);
142
+ }
143
+ if (message.playbackTime !== undefined) {
144
+ writer.uint32(53).float(message.playbackTime);
145
+ }
146
+ for (const v of message.sounds) {
147
+ writer.uint32(58).string(v);
148
+ }
149
+ return writer;
150
+ }
151
+ MovementAnimation.encode = encode;
152
+ function decode(input, length) {
153
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
154
+ let end = length === undefined ? reader.len : reader.pos + length;
155
+ const message = createBaseMovementAnimation();
156
+ while (reader.pos < end) {
157
+ const tag = reader.uint32();
158
+ switch (tag >>> 3) {
159
+ case 1:
160
+ if (tag !== 10) {
161
+ break;
162
+ }
163
+ message.src = reader.string();
164
+ continue;
165
+ case 2:
166
+ if (tag !== 16) {
167
+ break;
168
+ }
169
+ message.loop = reader.bool();
170
+ continue;
171
+ case 3:
172
+ if (tag !== 29) {
173
+ break;
174
+ }
175
+ message.speed = reader.float();
176
+ continue;
177
+ case 4:
178
+ if (tag !== 32) {
179
+ break;
180
+ }
181
+ message.idle = reader.bool();
182
+ continue;
183
+ case 5:
184
+ if (tag !== 45) {
185
+ break;
186
+ }
187
+ message.transitionSeconds = reader.float();
188
+ continue;
189
+ case 6:
190
+ if (tag !== 53) {
191
+ break;
192
+ }
193
+ message.playbackTime = reader.float();
194
+ continue;
195
+ case 7:
196
+ if (tag !== 58) {
197
+ break;
198
+ }
199
+ message.sounds.push(reader.string());
200
+ continue;
201
+ }
202
+ if ((tag & 7) === 4 || tag === 0) {
203
+ break;
204
+ }
205
+ reader.skipType(tag & 7);
206
+ }
207
+ return message;
208
+ }
209
+ MovementAnimation.decode = decode;
210
+ })(MovementAnimation = exports.MovementAnimation || (exports.MovementAnimation = {}));
@@ -22,6 +22,32 @@ export interface PBAvatarMovementInfo {
22
22
  walkTarget?: Vector3 | undefined;
23
23
  /** stop distance for walk_target; considered reached when within this distance */
24
24
  walkThreshold?: number | undefined;
25
+ /** current state of a scene-driven movement animation. Absent when the engine is using its velocity-based fallback. `playback_time` freezes while a triggerSceneEmote is overriding the animation. */
26
+ activeAnimationState?: AvatarAnimationState | undefined;
27
+ }
28
+ /**
29
+ * Mirror of the scene-driven movement animation currently playing, reported by the engine.
30
+ * Readable by any scene (not just the controller) so niche effects (e.g. dust cloud on landing) can react.
31
+ * Active emotes are not represented here — scenes already have their own way to read them.
32
+ */
33
+ /**
34
+ * @public
35
+ */
36
+ export interface AvatarAnimationState {
37
+ /** same scene-relative path the controlling scene supplied */
38
+ src: string;
39
+ /** mirrors the request */
40
+ loop: boolean;
41
+ /** mirrors the request */
42
+ speed: number;
43
+ /** mirrors the request */
44
+ idle: boolean;
45
+ /** seconds into the clip; wraps on loop; frozen while an emote override is playing */
46
+ playbackTime: number;
47
+ /** total clip length in seconds */
48
+ duration: number;
49
+ /** how many times the clip has completed since it started */
50
+ loopCount: number;
25
51
  }
26
52
  /**
27
53
  * @public
@@ -30,3 +56,10 @@ export declare namespace PBAvatarMovementInfo {
30
56
  function encode(message: PBAvatarMovementInfo, writer?: _m0.Writer): _m0.Writer;
31
57
  function decode(input: _m0.Reader | Uint8Array, length?: number): PBAvatarMovementInfo;
32
58
  }
59
+ /**
60
+ * @public
61
+ */
62
+ export declare namespace AvatarAnimationState {
63
+ function encode(message: AvatarAnimationState, writer?: _m0.Writer): _m0.Writer;
64
+ function decode(input: _m0.Reader | Uint8Array, length?: number): AvatarAnimationState;
65
+ }
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PBAvatarMovementInfo = void 0;
6
+ exports.AvatarAnimationState = exports.PBAvatarMovementInfo = void 0;
7
7
  /* eslint-disable */
8
8
  const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
9
  const vectors_gen_1 = require("../../common/vectors.gen");
@@ -21,6 +21,7 @@ function createBasePBAvatarMovementInfo() {
21
21
  activeInputModifier: undefined,
22
22
  walkTarget: undefined,
23
23
  walkThreshold: undefined,
24
+ activeAnimationState: undefined,
24
25
  };
25
26
  }
26
27
  /**
@@ -56,6 +57,9 @@ var PBAvatarMovementInfo;
56
57
  if (message.walkThreshold !== undefined) {
57
58
  writer.uint32(77).float(message.walkThreshold);
58
59
  }
60
+ if (message.activeAnimationState !== undefined) {
61
+ AvatarAnimationState.encode(message.activeAnimationState, writer.uint32(82).fork()).ldelim();
62
+ }
59
63
  return writer;
60
64
  }
61
65
  PBAvatarMovementInfo.encode = encode;
@@ -120,6 +124,12 @@ var PBAvatarMovementInfo;
120
124
  }
121
125
  message.walkThreshold = reader.float();
122
126
  continue;
127
+ case 10:
128
+ if (tag !== 82) {
129
+ break;
130
+ }
131
+ message.activeAnimationState = AvatarAnimationState.decode(reader, reader.uint32());
132
+ continue;
123
133
  }
124
134
  if ((tag & 7) === 4 || tag === 0) {
125
135
  break;
@@ -130,3 +140,95 @@ var PBAvatarMovementInfo;
130
140
  }
131
141
  PBAvatarMovementInfo.decode = decode;
132
142
  })(PBAvatarMovementInfo = exports.PBAvatarMovementInfo || (exports.PBAvatarMovementInfo = {}));
143
+ function createBaseAvatarAnimationState() {
144
+ return { src: "", loop: false, speed: 0, idle: false, playbackTime: 0, duration: 0, loopCount: 0 };
145
+ }
146
+ /**
147
+ * @public
148
+ */
149
+ var AvatarAnimationState;
150
+ (function (AvatarAnimationState) {
151
+ function encode(message, writer = minimal_1.default.Writer.create()) {
152
+ if (message.src !== "") {
153
+ writer.uint32(10).string(message.src);
154
+ }
155
+ if (message.loop === true) {
156
+ writer.uint32(16).bool(message.loop);
157
+ }
158
+ if (message.speed !== 0) {
159
+ writer.uint32(29).float(message.speed);
160
+ }
161
+ if (message.idle === true) {
162
+ writer.uint32(32).bool(message.idle);
163
+ }
164
+ if (message.playbackTime !== 0) {
165
+ writer.uint32(45).float(message.playbackTime);
166
+ }
167
+ if (message.duration !== 0) {
168
+ writer.uint32(53).float(message.duration);
169
+ }
170
+ if (message.loopCount !== 0) {
171
+ writer.uint32(56).uint32(message.loopCount);
172
+ }
173
+ return writer;
174
+ }
175
+ AvatarAnimationState.encode = encode;
176
+ function decode(input, length) {
177
+ const reader = input instanceof minimal_1.default.Reader ? input : minimal_1.default.Reader.create(input);
178
+ let end = length === undefined ? reader.len : reader.pos + length;
179
+ const message = createBaseAvatarAnimationState();
180
+ while (reader.pos < end) {
181
+ const tag = reader.uint32();
182
+ switch (tag >>> 3) {
183
+ case 1:
184
+ if (tag !== 10) {
185
+ break;
186
+ }
187
+ message.src = reader.string();
188
+ continue;
189
+ case 2:
190
+ if (tag !== 16) {
191
+ break;
192
+ }
193
+ message.loop = reader.bool();
194
+ continue;
195
+ case 3:
196
+ if (tag !== 29) {
197
+ break;
198
+ }
199
+ message.speed = reader.float();
200
+ continue;
201
+ case 4:
202
+ if (tag !== 32) {
203
+ break;
204
+ }
205
+ message.idle = reader.bool();
206
+ continue;
207
+ case 5:
208
+ if (tag !== 45) {
209
+ break;
210
+ }
211
+ message.playbackTime = reader.float();
212
+ continue;
213
+ case 6:
214
+ if (tag !== 53) {
215
+ break;
216
+ }
217
+ message.duration = reader.float();
218
+ continue;
219
+ case 7:
220
+ if (tag !== 56) {
221
+ break;
222
+ }
223
+ message.loopCount = reader.uint32();
224
+ continue;
225
+ }
226
+ if ((tag & 7) === 4 || tag === 0) {
227
+ break;
228
+ }
229
+ reader.skipType(tag & 7);
230
+ }
231
+ return message;
232
+ }
233
+ AvatarAnimationState.decode = decode;
234
+ })(AvatarAnimationState = exports.AvatarAnimationState || (exports.AvatarAnimationState = {}));
@@ -19,6 +19,14 @@ export interface PBUiCanvasInformation {
19
19
  * on the contrary, if the chat UI is shown, the rect would be smaller.
20
20
  */
21
21
  interactableArea: BorderRect | undefined;
22
+ /**
23
+ * informs the sdk about the screen inset area (safe margins). these are the
24
+ * insets from each edge of the screen that are reserved by the device or
25
+ * platform UI (for example: the notch, status bar, home indicator, or rounded
26
+ * corners on mobile). scenes should avoid placing critical UI within these
27
+ * insets to ensure it is not occluded. on desktop this is typically (0, 0, 0, 0).
28
+ */
29
+ screenInsetArea?: BorderRect | undefined;
22
30
  }
23
31
  /**
24
32
  * @public
@@ -9,7 +9,7 @@ const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
9
  const border_rect_gen_1 = require("../../common/border_rect.gen");
10
10
  const protobufPackageSarasa = "decentraland.sdk.components";
11
11
  function createBasePBUiCanvasInformation() {
12
- return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined };
12
+ return { devicePixelRatio: 0, width: 0, height: 0, interactableArea: undefined, screenInsetArea: undefined };
13
13
  }
14
14
  /**
15
15
  * @public
@@ -29,6 +29,9 @@ var PBUiCanvasInformation;
29
29
  if (message.interactableArea !== undefined) {
30
30
  border_rect_gen_1.BorderRect.encode(message.interactableArea, writer.uint32(34).fork()).ldelim();
31
31
  }
32
+ if (message.screenInsetArea !== undefined) {
33
+ border_rect_gen_1.BorderRect.encode(message.screenInsetArea, writer.uint32(42).fork()).ldelim();
34
+ }
32
35
  return writer;
33
36
  }
34
37
  PBUiCanvasInformation.encode = encode;
@@ -63,6 +66,12 @@ var PBUiCanvasInformation;
63
66
  }
64
67
  message.interactableArea = border_rect_gen_1.BorderRect.decode(reader, reader.uint32());
65
68
  continue;
69
+ case 5:
70
+ if (tag !== 42) {
71
+ break;
72
+ }
73
+ message.screenInsetArea = border_rect_gen_1.BorderRect.decode(reader, reader.uint32());
74
+ continue;
66
75
  }
67
76
  if ((tag & 7) === 4 || tag === 0) {
68
77
  break;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dcl/ecs",
3
3
  "description": "Decentraland ECS",
4
- "version": "7.24.5-29247185020.commit-e92dfe6",
4
+ "version": "7.24.5-29255693632.commit-d9d75fe",
5
5
  "author": "DCL",
6
6
  "bugs": "https://github.com/decentraland/ecs/issues",
7
7
  "files": [
@@ -33,5 +33,5 @@
33
33
  },
34
34
  "types": "./dist/index.d.ts",
35
35
  "typings": "./dist/index.d.ts",
36
- "commit": "e92dfe6298e3d808e58add843780cdbe7eb5af7d"
36
+ "commit": "d9d75fe5892b7e38bc96149865c34c4ab8a0f96d"
37
37
  }