@dcl/protocol 1.0.0-22583117520.commit-28394c4 → 1.0.0-22584214067.commit-276e5b7

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 (33) hide show
  1. package/out-js/decentraland/kernel/comms/rfc4/comms.gen.d.ts +58 -0
  2. package/out-js/decentraland/kernel/comms/rfc4/comms.gen.js +393 -19
  3. package/out-js/decentraland/kernel/comms/rfc4/comms.gen.js.map +1 -1
  4. package/out-js/decentraland/sdk/components/common/input_action.gen.d.ts +10 -0
  5. package/out-js/decentraland/sdk/components/common/input_action.gen.js +52 -1
  6. package/out-js/decentraland/sdk/components/common/input_action.gen.js.map +1 -1
  7. package/out-js/decentraland/sdk/components/pointer_events.gen.d.ts +5 -1
  8. package/out-js/decentraland/sdk/components/pointer_events.gen.js +31 -3
  9. package/out-js/decentraland/sdk/components/pointer_events.gen.js.map +1 -1
  10. package/out-js/decentraland/sdk/components/tween.gen.d.ts +36 -0
  11. package/out-js/decentraland/sdk/components/tween.gen.js +302 -6
  12. package/out-js/decentraland/sdk/components/tween.gen.js.map +1 -1
  13. package/out-js/decentraland/social_service/v2/social_service_v2.gen.d.ts +0 -3
  14. package/out-js/decentraland/social_service/v2/social_service_v2.gen.js +2 -40
  15. package/out-js/decentraland/social_service/v2/social_service_v2.gen.js.map +1 -1
  16. package/out-ts/decentraland/kernel/comms/rfc4/comms.gen.ts +451 -3
  17. package/out-ts/decentraland/sdk/components/common/input_action.gen.ts +51 -0
  18. package/out-ts/decentraland/sdk/components/pointer_events.gen.ts +44 -3
  19. package/out-ts/decentraland/sdk/components/tween.gen.ts +333 -0
  20. package/out-ts/decentraland/social_service/v2/social_service_v2.gen.ts +2 -44
  21. package/package.json +3 -3
  22. package/proto/decentraland/kernel/comms/rfc4/comms.proto +38 -1
  23. package/proto/decentraland/sdk/components/audio_analysis.proto +44 -0
  24. package/proto/decentraland/sdk/components/avatar_locomotion_settings.proto +21 -0
  25. package/proto/decentraland/sdk/components/common/input_action.proto +8 -0
  26. package/proto/decentraland/sdk/components/input_modifier.proto +2 -0
  27. package/proto/decentraland/sdk/components/light_source.proto +1 -1
  28. package/proto/decentraland/sdk/components/pointer_events.proto +2 -0
  29. package/proto/decentraland/sdk/components/tween.proto +18 -0
  30. package/proto/decentraland/sdk/components/virtual_camera.proto +2 -0
  31. package/proto/decentraland/social_service/v2/social_service_v2.proto +0 -3
  32. package/proto/decentraland/sdk/components/physics_combined_force.proto +0 -21
  33. package/proto/decentraland/sdk/components/physics_combined_impulse.proto +0 -23
@@ -2,7 +2,6 @@
2
2
  import Long from "long";
3
3
  import _m0 from "protobufjs/minimal";
4
4
  import { Empty } from "../../../google/protobuf/empty.gen";
5
- import { Color3 } from "../../common/colors.gen";
6
5
  import {
7
6
  ConflictingError,
8
7
  ForbiddenError,
@@ -289,7 +288,6 @@ export interface FriendProfile {
289
288
  name: string;
290
289
  hasClaimedName: boolean;
291
290
  profilePictureUrl: string;
292
- nameColor?: Color3 | undefined;
293
291
  }
294
292
 
295
293
  export interface BlockedUserProfile {
@@ -298,7 +296,6 @@ export interface BlockedUserProfile {
298
296
  hasClaimedName: boolean;
299
297
  profilePictureUrl: string;
300
298
  blockedAt?: number | undefined;
301
- nameColor?: Color3 | undefined;
302
299
  }
303
300
 
304
301
  export interface Pagination {
@@ -930,7 +927,7 @@ export namespace User {
930
927
  }
931
928
 
932
929
  function createBaseFriendProfile(): FriendProfile {
933
- return { address: "", name: "", hasClaimedName: false, profilePictureUrl: "", nameColor: undefined };
930
+ return { address: "", name: "", hasClaimedName: false, profilePictureUrl: "" };
934
931
  }
935
932
 
936
933
  export namespace FriendProfile {
@@ -947,9 +944,6 @@ export namespace FriendProfile {
947
944
  if (message.profilePictureUrl !== "") {
948
945
  writer.uint32(34).string(message.profilePictureUrl);
949
946
  }
950
- if (message.nameColor !== undefined) {
951
- Color3.encode(message.nameColor, writer.uint32(42).fork()).ldelim();
952
- }
953
947
  return writer;
954
948
  }
955
949
 
@@ -988,13 +982,6 @@ export namespace FriendProfile {
988
982
 
989
983
  message.profilePictureUrl = reader.string();
990
984
  continue;
991
- case 5:
992
- if (tag !== 42) {
993
- break;
994
- }
995
-
996
- message.nameColor = Color3.decode(reader, reader.uint32());
997
- continue;
998
985
  }
999
986
  if ((tag & 7) === 4 || tag === 0) {
1000
987
  break;
@@ -1010,7 +997,6 @@ export namespace FriendProfile {
1010
997
  name: isSet(object.name) ? String(object.name) : "",
1011
998
  hasClaimedName: isSet(object.hasClaimedName) ? Boolean(object.hasClaimedName) : false,
1012
999
  profilePictureUrl: isSet(object.profilePictureUrl) ? String(object.profilePictureUrl) : "",
1013
- nameColor: isSet(object.nameColor) ? Color3.fromJSON(object.nameColor) : undefined,
1014
1000
  };
1015
1001
  }
1016
1002
 
@@ -1020,8 +1006,6 @@ export namespace FriendProfile {
1020
1006
  message.name !== undefined && (obj.name = message.name);
1021
1007
  message.hasClaimedName !== undefined && (obj.hasClaimedName = message.hasClaimedName);
1022
1008
  message.profilePictureUrl !== undefined && (obj.profilePictureUrl = message.profilePictureUrl);
1023
- message.nameColor !== undefined &&
1024
- (obj.nameColor = message.nameColor ? Color3.toJSON(message.nameColor) : undefined);
1025
1009
  return obj;
1026
1010
  }
1027
1011
 
@@ -1035,22 +1019,12 @@ export namespace FriendProfile {
1035
1019
  message.name = object.name ?? "";
1036
1020
  message.hasClaimedName = object.hasClaimedName ?? false;
1037
1021
  message.profilePictureUrl = object.profilePictureUrl ?? "";
1038
- message.nameColor = (object.nameColor !== undefined && object.nameColor !== null)
1039
- ? Color3.fromPartial(object.nameColor)
1040
- : undefined;
1041
1022
  return message;
1042
1023
  }
1043
1024
  }
1044
1025
 
1045
1026
  function createBaseBlockedUserProfile(): BlockedUserProfile {
1046
- return {
1047
- address: "",
1048
- name: "",
1049
- hasClaimedName: false,
1050
- profilePictureUrl: "",
1051
- blockedAt: undefined,
1052
- nameColor: undefined,
1053
- };
1027
+ return { address: "", name: "", hasClaimedName: false, profilePictureUrl: "", blockedAt: undefined };
1054
1028
  }
1055
1029
 
1056
1030
  export namespace BlockedUserProfile {
@@ -1070,9 +1044,6 @@ export namespace BlockedUserProfile {
1070
1044
  if (message.blockedAt !== undefined) {
1071
1045
  writer.uint32(40).int64(message.blockedAt);
1072
1046
  }
1073
- if (message.nameColor !== undefined) {
1074
- Color3.encode(message.nameColor, writer.uint32(50).fork()).ldelim();
1075
- }
1076
1047
  return writer;
1077
1048
  }
1078
1049
 
@@ -1118,13 +1089,6 @@ export namespace BlockedUserProfile {
1118
1089
 
1119
1090
  message.blockedAt = longToNumber(reader.int64() as Long);
1120
1091
  continue;
1121
- case 6:
1122
- if (tag !== 50) {
1123
- break;
1124
- }
1125
-
1126
- message.nameColor = Color3.decode(reader, reader.uint32());
1127
- continue;
1128
1092
  }
1129
1093
  if ((tag & 7) === 4 || tag === 0) {
1130
1094
  break;
@@ -1141,7 +1105,6 @@ export namespace BlockedUserProfile {
1141
1105
  hasClaimedName: isSet(object.hasClaimedName) ? Boolean(object.hasClaimedName) : false,
1142
1106
  profilePictureUrl: isSet(object.profilePictureUrl) ? String(object.profilePictureUrl) : "",
1143
1107
  blockedAt: isSet(object.blockedAt) ? Number(object.blockedAt) : undefined,
1144
- nameColor: isSet(object.nameColor) ? Color3.fromJSON(object.nameColor) : undefined,
1145
1108
  };
1146
1109
  }
1147
1110
 
@@ -1152,8 +1115,6 @@ export namespace BlockedUserProfile {
1152
1115
  message.hasClaimedName !== undefined && (obj.hasClaimedName = message.hasClaimedName);
1153
1116
  message.profilePictureUrl !== undefined && (obj.profilePictureUrl = message.profilePictureUrl);
1154
1117
  message.blockedAt !== undefined && (obj.blockedAt = Math.round(message.blockedAt));
1155
- message.nameColor !== undefined &&
1156
- (obj.nameColor = message.nameColor ? Color3.toJSON(message.nameColor) : undefined);
1157
1118
  return obj;
1158
1119
  }
1159
1120
 
@@ -1168,9 +1129,6 @@ export namespace BlockedUserProfile {
1168
1129
  message.hasClaimedName = object.hasClaimedName ?? false;
1169
1130
  message.profilePictureUrl = object.profilePictureUrl ?? "";
1170
1131
  message.blockedAt = object.blockedAt ?? undefined;
1171
- message.nameColor = (object.nameColor !== undefined && object.nameColor !== null)
1172
- ? Color3.fromPartial(object.nameColor)
1173
- : undefined;
1174
1132
  return message;
1175
1133
  }
1176
1134
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/protocol",
3
- "version": "1.0.0-22583117520.commit-28394c4",
3
+ "version": "1.0.0-22584214067.commit-276e5b7",
4
4
  "description": "",
5
5
  "repository": "decentraland/protocol.git",
6
6
  "homepage": "https://github.com/decentraland/protocol#readme",
@@ -13,7 +13,7 @@
13
13
  "test": "./scripts/check-proto-compabitility.sh"
14
14
  },
15
15
  "devDependencies": {
16
- "@protobuf-ts/protoc": "^2.8.1",
16
+ "@protobuf-ts/protoc": "^2.11.0",
17
17
  "proto-compatibility-tool": "^1.1.2-20220925163655.commit-25bd040",
18
18
  "typescript": "^5.0.4"
19
19
  },
@@ -30,5 +30,5 @@
30
30
  "out-js",
31
31
  "public"
32
32
  ],
33
- "commit": "28394c4111791b8e925ba5fd87ce1ceb08f27115"
33
+ "commit": "276e5b77b63cfe7cb7b22c643e1a3321412e60b5"
34
34
  }
@@ -18,6 +18,7 @@ message Packet {
18
18
  PlayerEmote player_emote = 9;
19
19
  SceneEmote scene_emote = 10;
20
20
  MovementCompressed movement_compressed = 12;
21
+ LookAtPosition look_at_position = 13;
21
22
  }
22
23
  uint32 protocol_version = 11;
23
24
  }
@@ -51,26 +52,58 @@ message Movement {
51
52
  float movement_blend_value = 8;
52
53
  float slide_blend_value = 9;
53
54
  bool is_grounded = 10;
54
- bool is_jumping = 11;
55
+ bool is_jumping = 11; // deprecated
56
+ int32 jump_count = 24;
55
57
  bool is_long_jump = 12;
56
58
  bool is_long_fall = 13;
57
59
  bool is_falling = 14;
58
60
  bool is_stunned = 15;
61
+ GlideState glide_state = 23;
59
62
  float rotation_y = 16;
60
63
  // interpolation
61
64
  bool is_instant = 17;
62
65
  bool is_emoting = 18;
66
+ // head-sync (enabled flags + world-space yaw and pitch angles, in degrees)
67
+ bool head_ik_yaw_enabled = 19;
68
+ bool head_ik_pitch_enabled = 20;
69
+ float head_yaw = 21;
70
+ float head_pitch = 22;
71
+ enum GlideState {
72
+ PROP_CLOSED = 0;
73
+ OPENING_PROP = 1;
74
+ GLIDING = 2;
75
+ CLOSING_PROP = 3;
76
+ }
63
77
  }
64
78
 
65
79
  message MovementCompressed {
66
80
  int32 temporal_data = 1; // bit-compressed: timestamp + animations
67
81
  int64 movement_data = 2; // bit-compressed: position + velocity
82
+ int32 head_sync_data = 3; // bit-compressed: enabled flags + yaw + pitch
68
83
  }
69
84
 
70
85
  message PlayerEmote {
71
86
  uint32 incremental_id = 1;
72
87
  string urn = 2;
73
88
  float timestamp = 3;
89
+ optional bool is_stopping = 4; // true means the emote has been stopped in the sender's client
90
+ optional bool is_repeating = 5; // true when it is not the first time the looping animation plays
91
+ optional int32 interaction_id = 6; // identifies an interaction univocaly, established when the start animation is triggered
92
+ optional int32 social_emote_outcome = 7; // -1 means it does not use an outcome animation
93
+ optional bool is_reacting = 8; // to a social emote started by other user
94
+ optional string social_emote_initiator = 9; // wallet address of the user that initiated social emote
95
+ optional string target_avatar = 10; // wallet address of the user whose avatar is the target of a directed emote
96
+ }
97
+
98
+ // Message sent to force an avatar to look at a position
99
+ message LookAtPosition
100
+ {
101
+ float timestamp = 1;
102
+ // world position
103
+ float position_x = 2;
104
+ float position_y = 3;
105
+ float position_z = 4;
106
+ string target_avatar_wallet_address = 5;
74
107
  }
75
108
 
76
109
  message SceneEmote {
@@ -103,6 +136,10 @@ message ProfileResponse {
103
136
  message Chat {
104
137
  string message = 1;
105
138
  double timestamp = 2;
139
+
140
+ // Extension: optional forwarded_from to identify the original sender when
141
+ // messages are forwarded through an SFU
142
+ optional string forwarded_from = 3;
106
143
  }
107
144
 
108
145
  message Scene {
@@ -0,0 +1,44 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/sdk/components/common/id.proto";
5
+ option (common.ecs_component_id) = 1212;
6
+
7
+ enum PBAudioAnalysisMode {
8
+ MODE_RAW = 0;
9
+ MODE_LOGARITHMIC = 1;
10
+ }
11
+
12
+ message PBAudioAnalysis {
13
+
14
+ // Parameters section
15
+ PBAudioAnalysisMode mode = 1;
16
+
17
+ // Used only when mode == MODE_LOGARITHMIC
18
+ optional float amplitude_gain = 100;
19
+ optional float bands_gain = 101;
20
+ // End when mode == MODE_LOGARITHMIC
21
+
22
+ // End Parameters section
23
+
24
+ // Result section
25
+ float amplitude = 200;
26
+
27
+ // Protobuf doesn't support fixed arrays -> 8 band fields
28
+ float band_0 = 201;
29
+ float band_1 = 202;
30
+ float band_2 = 203;
31
+ float band_3 = 204;
32
+ float band_4 = 205;
33
+ float band_5 = 206;
34
+ float band_6 = 207;
35
+ float band_7 = 208;
36
+
37
+ // End Result section
38
+
39
+ // Future fields
40
+ // float spectral_centroid = 13;
41
+ // float spectral_flux = 14;
42
+ // bool onset = 15;
43
+ // float bpm = 16;
44
+ }
@@ -0,0 +1,21 @@
1
+ syntax = "proto3";
2
+
3
+ package decentraland.sdk.components;
4
+
5
+ import "decentraland/sdk/components/common/id.proto";
6
+
7
+ option (common.ecs_component_id) = 1211;
8
+
9
+ // The PBAvatarLocomotionSettings component allows scenes to modify locomotion settings defining things such
10
+ // as the avatar movement speed, jump height etc.
11
+ message PBAvatarLocomotionSettings {
12
+ optional float walk_speed = 1; // Maximum speed when walking (in meters per second)
13
+ optional float jog_speed = 2; // Maximum speed when jogging (in meters per second)
14
+ optional float run_speed = 3; // Maximum speed when running (in meters per second)
15
+ optional float jump_height = 4; // Height of a regular jump (in meters)
16
+ optional float run_jump_height = 5; // Height of a jump while running (in meters)
17
+ optional float hard_landing_cooldown = 6; // Cooldown time after a hard landing before the avatar can move again (in seconds)
18
+ optional float double_jump_height = 7; // Height of the double jump (in meters)
19
+ optional float gliding_speed = 8; // Maximum speed when gliding (in meters per second)
20
+ optional float gliding_falling_speed = 9; // Maximum falling speed when gliding (in meters per second)
21
+ }
@@ -17,6 +17,7 @@ enum InputAction {
17
17
  IA_ACTION_4 = 11;
18
18
  IA_ACTION_5 = 12;
19
19
  IA_ACTION_6 = 13;
20
+ IA_MODIFIER = 14;
20
21
  }
21
22
 
22
23
  // PointerEventType is a kind of interaction that can be detected.
@@ -25,4 +26,11 @@ enum PointerEventType {
25
26
  PET_DOWN = 1;
26
27
  PET_HOVER_ENTER = 2;
27
28
  PET_HOVER_LEAVE = 3;
29
+ PET_PROXIMITY_ENTER = 4;
30
+ PET_PROXIMITY_LEAVE = 5;
31
+ }
32
+
33
+ enum InteractionType {
34
+ CURSOR = 0;
35
+ PROXIMITY = 1;
28
36
  }
@@ -12,6 +12,8 @@ message PBInputModifier {
12
12
  optional bool disable_run = 4;
13
13
  optional bool disable_jump = 5;
14
14
  optional bool disable_emote = 6;
15
+ optional bool disable_double_jump = 7;
16
+ optional bool disable_gliding = 8;
15
17
  }
16
18
 
17
19
  oneof mode {
@@ -25,4 +25,4 @@ message PBLightSource {
25
25
  optional float inner_angle = 9; // default = 21.8. Inner angle can't be higher than outer angle, otherwise will default to same value. Min value is 0. Max value is 179.
26
26
  optional float outer_angle = 10; // default = 30. Outer angle can't be lower than inner angle, otherwise will inner angle will be set to same value. Max value is 179.
27
27
  }
28
- }
28
+ }
@@ -51,11 +51,13 @@ message PBPointerEvents {
51
51
  optional bool show_feedback = 4; // enable or disable hover text and highlight (default true)
52
52
  optional bool show_highlight = 5; // enable or disable hover highlight (default true)
53
53
  optional float max_player_distance = 6; // range of interaction from the avatar's position (default 0)
54
+ optional uint32 priority = 7; // resolution order when multiple events overlap, higher wins (default 0)
54
55
  }
55
56
 
56
57
  message Entry {
57
58
  common.PointerEventType event_type = 1; // the kind of interaction to detect
58
59
  Info event_info = 2; // additional configuration for this detection
60
+ optional common.InteractionType interaction_type = 3; // the type of interaction source (default 0 == CURSOR)
59
61
  }
60
62
 
61
63
  repeated Entry pointer_events = 1; // the list of relevant events to detect
@@ -19,6 +19,8 @@ message PBTween {
19
19
  RotateContinuous rotate_continuous = 9;
20
20
  MoveContinuous move_continuous = 10;
21
21
  TextureMoveContinuous texture_move_continuous = 11;
22
+ MoveRotateScale move_rotate_scale = 12;
23
+ MoveRotateScaleContinuous move_rotate_scale_continuous = 13;
22
24
  }
23
25
 
24
26
  optional bool playing = 6; // default true (pause or running)
@@ -41,6 +43,15 @@ message Scale {
41
43
  decentraland.common.Vector3 end = 2;
42
44
  }
43
45
 
46
+ message MoveRotateScale {
47
+ decentraland.common.Vector3 position_start = 1;
48
+ decentraland.common.Vector3 position_end = 2;
49
+ decentraland.common.Quaternion rotation_start = 3;
50
+ decentraland.common.Quaternion rotation_end = 4;
51
+ decentraland.common.Vector3 scale_start = 5;
52
+ decentraland.common.Vector3 scale_end = 6;
53
+ }
54
+
44
55
  // This tween mode allows to move the texture of a PbrMaterial or UnlitMaterial.
45
56
  // You can also specify the movement type (offset or tiling)
46
57
  message TextureMove {
@@ -59,6 +70,13 @@ message MoveContinuous {
59
70
  float speed = 2;
60
71
  }
61
72
 
73
+ message MoveRotateScaleContinuous {
74
+ decentraland.common.Vector3 position_direction = 1;
75
+ decentraland.common.Quaternion rotation_direction = 2;
76
+ decentraland.common.Vector3 scale_direction = 3;
77
+ float speed = 4;
78
+ }
79
+
62
80
  message TextureMoveContinuous {
63
81
  decentraland.common.Vector2 direction = 1;
64
82
  float speed = 2;
@@ -10,7 +10,9 @@ option (common.ecs_component_id) = 1076;
10
10
  // an 'instant' transition (like using speed/time = 0)
11
11
  // * The lookAtEntity defines to which entity the Camera has to look at constantly (independent from
12
12
  // the holding entity transform).
13
+ // * The fov defines the Field of View of the virtual camera
13
14
  message PBVirtualCamera {
14
15
  optional common.CameraTransition default_transition = 1;
15
16
  optional uint32 look_at_entity = 2;
17
+ optional float fov = 3; // default: 60
16
18
  }
@@ -2,7 +2,6 @@ syntax = "proto3";
2
2
  package decentraland.social_service.v2;
3
3
 
4
4
  import "google/protobuf/empty.proto";
5
- import "decentraland/common/colors.proto";
6
5
  import "decentraland/social_service/errors.proto";
7
6
 
8
7
  // Types
@@ -13,7 +12,6 @@ message FriendProfile {
13
12
  string name = 2;
14
13
  bool has_claimed_name = 3;
15
14
  string profile_picture_url = 4;
16
- optional decentraland.common.Color3 name_color = 5;
17
15
  }
18
16
 
19
17
  message BlockedUserProfile {
@@ -22,7 +20,6 @@ message BlockedUserProfile {
22
20
  bool has_claimed_name = 3;
23
21
  string profile_picture_url = 4;
24
22
  optional int64 blocked_at = 5;
25
- optional decentraland.common.Color3 name_color = 6;
26
23
  }
27
24
 
28
25
  message Pagination {
@@ -1,21 +0,0 @@
1
- syntax = "proto3";
2
-
3
- package decentraland.sdk.components;
4
-
5
- import "decentraland/common/vectors.proto";
6
- import "decentraland/sdk/components/common/id.proto";
7
-
8
- option (common.ecs_component_id) = 1216;
9
-
10
- /**
11
- * This component applies a continuous physics force.
12
-
13
- * @remarks Low-level component. Use Physics.applyForceToPlayer()/.removeForceToPlayer() instead.
14
- * Direct manipulation will conflict with the force accumulation registry.
15
- * Summary component: stores the accumulated result of all active forces registered by the scene in the current frame.
16
-
17
- * State-like component: the force is applied every physics tick while the component is present on the entity.
18
- */
19
- message PBPhysicsCombinedForce {
20
- decentraland.common.Vector3 vector = 1; // Includes force direction and magnitude
21
- }
@@ -1,23 +0,0 @@
1
- syntax = "proto3";
2
-
3
- package decentraland.sdk.components;
4
-
5
- import "decentraland/common/vectors.proto";
6
- import "decentraland/sdk/components/common/id.proto";
7
-
8
- option (common.ecs_component_id) = 1215;
9
-
10
- /**
11
- * This component applies a one-shot physics summary impulse.
12
-
13
- * @remarks Low-level component. Use Physics.applyImpulseToPlayer() instead.
14
- * Direct manipulation will conflict with the force accumulation registry.
15
- * Summary component: stores the accumulated result of all impulses registered by the scene in the current frame.
16
-
17
- * Event-like component: each new impulse must increment the eventID to ensure delivery via CRDT, even if the direction is identical to the previous one.
18
- * Renderer processes impulse with the unique ID only once. Increase eventID of the component to apply another impulse.
19
- */
20
- message PBPhysicsCombinedImpulse {
21
- decentraland.common.Vector3 vector = 1; // Includes impulse direction and magnitude
22
- uint32 event_id = 2; // Monotonic counter to distinguish different impulses.
23
- }