@dcl/protocol 1.0.0-10955038136.commit-7fe9554 → 1.0.0-11502421172.commit-b32f4af

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 (62) hide show
  1. package/out-js/decentraland/common/texture.gen.d.ts +18 -0
  2. package/out-js/decentraland/common/texture.gen.js +104 -4
  3. package/out-js/decentraland/common/texture.gen.js.map +1 -1
  4. package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +41 -0
  5. package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.js +241 -3
  6. package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.js.map +1 -1
  7. package/out-js/decentraland/sdk/components/camera_mode_area.gen.d.ts +35 -1
  8. package/out-js/decentraland/sdk/components/camera_mode_area.gen.js +172 -3
  9. package/out-js/decentraland/sdk/components/camera_mode_area.gen.js.map +1 -1
  10. package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  11. package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.js +90 -3
  12. package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.js.map +1 -1
  13. package/out-js/decentraland/sdk/components/gltf_node.gen.d.ts +66 -0
  14. package/out-js/decentraland/sdk/components/gltf_node.gen.js +69 -0
  15. package/out-js/decentraland/sdk/components/gltf_node.gen.js.map +1 -0
  16. package/out-js/decentraland/sdk/components/gltf_node_state.gen.d.ts +43 -0
  17. package/out-js/decentraland/sdk/components/gltf_node_state.gen.js +122 -0
  18. package/out-js/decentraland/sdk/components/gltf_node_state.gen.js.map +1 -0
  19. package/out-js/decentraland/sdk/components/material.gen.d.ts +23 -1
  20. package/out-js/decentraland/sdk/components/material.gen.js +108 -3
  21. package/out-js/decentraland/sdk/components/material.gen.js.map +1 -1
  22. package/out-js/decentraland/sdk/components/mesh_collider.gen.d.ts +18 -0
  23. package/out-js/decentraland/sdk/components/mesh_collider.gen.js +90 -4
  24. package/out-js/decentraland/sdk/components/mesh_collider.gen.js.map +1 -1
  25. package/out-js/decentraland/sdk/components/mesh_renderer.gen.d.ts +19 -3
  26. package/out-js/decentraland/sdk/components/mesh_renderer.gen.js +90 -4
  27. package/out-js/decentraland/sdk/components/mesh_renderer.gen.js.map +1 -1
  28. package/out-js/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  29. package/out-js/decentraland/sdk/components/ui_text.gen.js +30 -1
  30. package/out-js/decentraland/sdk/components/ui_text.gen.js.map +1 -1
  31. package/out-js/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  32. package/out-js/decentraland/sdk/components/ui_transform.gen.js +188 -2
  33. package/out-js/decentraland/sdk/components/ui_transform.gen.js.map +1 -1
  34. package/out-ts/decentraland/common/texture.gen.ts +119 -4
  35. package/out-ts/decentraland/sdk/components/avatar_modifier_area.gen.ts +292 -1
  36. package/out-ts/decentraland/sdk/components/camera_mode_area.gen.ts +218 -2
  37. package/out-ts/decentraland/sdk/components/gltf_container_loading_state.gen.ts +108 -2
  38. package/out-ts/decentraland/sdk/components/gltf_node.gen.ts +116 -0
  39. package/out-ts/decentraland/sdk/components/gltf_node_state.gen.ts +139 -0
  40. package/out-ts/decentraland/sdk/components/material.gen.ts +131 -4
  41. package/out-ts/decentraland/sdk/components/mesh_collider.gen.ts +99 -0
  42. package/out-ts/decentraland/sdk/components/mesh_renderer.gen.ts +100 -3
  43. package/out-ts/decentraland/sdk/components/ui_text.gen.ts +40 -1
  44. package/out-ts/decentraland/sdk/components/ui_transform.gen.ts +212 -1
  45. package/package.json +2 -2
  46. package/proto/decentraland/common/texture.proto +8 -1
  47. package/proto/decentraland/sdk/components/avatar_modifier_area.proto +21 -0
  48. package/proto/decentraland/sdk/components/camera_mode_area.proto +22 -3
  49. package/proto/decentraland/sdk/components/global_light.proto +22 -0
  50. package/proto/decentraland/sdk/components/gltf_container_loading_state.proto +13 -0
  51. package/proto/decentraland/sdk/components/gltf_node.proto +42 -0
  52. package/proto/decentraland/sdk/components/gltf_node_state.proto +20 -0
  53. package/proto/decentraland/sdk/components/light.proto +42 -0
  54. package/proto/decentraland/sdk/components/material.proto +13 -1
  55. package/proto/decentraland/sdk/components/mesh_collider.proto +8 -1
  56. package/proto/decentraland/sdk/components/mesh_renderer.proto +8 -3
  57. package/proto/decentraland/sdk/components/spotlight.proto +21 -0
  58. package/proto/decentraland/sdk/components/ui_canvas.proto +16 -0
  59. package/proto/decentraland/sdk/components/ui_scroll_result.proto +12 -0
  60. package/proto/decentraland/sdk/components/ui_text.proto +3 -0
  61. package/proto/decentraland/sdk/components/ui_transform.proto +21 -0
  62. package/public/sdk-components.proto +2 -0
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable */
2
2
  import _m0 from "protobufjs/minimal";
3
+ import { Vector2 } from "../../common/vectors.gen";
3
4
 
4
5
  export const protobufPackage = "decentraland.sdk.components";
5
6
 
@@ -471,6 +472,55 @@ export function pointerFilterModeToJSON(object: PointerFilterMode): string {
471
472
  }
472
473
  }
473
474
 
475
+ export enum ShowScrollBar {
476
+ SSB_BOTH = 0,
477
+ SSB_ONLY_VERTICAL = 1,
478
+ SSB_ONLY_HORIZONTAL = 2,
479
+ SSB_HIDDEN = 3,
480
+ UNRECOGNIZED = -1,
481
+ }
482
+
483
+ export function showScrollBarFromJSON(object: any): ShowScrollBar {
484
+ switch (object) {
485
+ case 0:
486
+ case "SSB_BOTH":
487
+ return ShowScrollBar.SSB_BOTH;
488
+ case 1:
489
+ case "SSB_ONLY_VERTICAL":
490
+ return ShowScrollBar.SSB_ONLY_VERTICAL;
491
+ case 2:
492
+ case "SSB_ONLY_HORIZONTAL":
493
+ return ShowScrollBar.SSB_ONLY_HORIZONTAL;
494
+ case 3:
495
+ case "SSB_HIDDEN":
496
+ return ShowScrollBar.SSB_HIDDEN;
497
+ case -1:
498
+ case "UNRECOGNIZED":
499
+ default:
500
+ return ShowScrollBar.UNRECOGNIZED;
501
+ }
502
+ }
503
+
504
+ export function showScrollBarToJSON(object: ShowScrollBar): string {
505
+ switch (object) {
506
+ case ShowScrollBar.SSB_BOTH:
507
+ return "SSB_BOTH";
508
+ case ShowScrollBar.SSB_ONLY_VERTICAL:
509
+ return "SSB_ONLY_VERTICAL";
510
+ case ShowScrollBar.SSB_ONLY_HORIZONTAL:
511
+ return "SSB_ONLY_HORIZONTAL";
512
+ case ShowScrollBar.SSB_HIDDEN:
513
+ return "SSB_HIDDEN";
514
+ case ShowScrollBar.UNRECOGNIZED:
515
+ default:
516
+ return "UNRECOGNIZED";
517
+ }
518
+ }
519
+
520
+ export interface ScrollPositionValue {
521
+ value?: { $case: "position"; position: Vector2 } | { $case: "reference"; reference: string } | undefined;
522
+ }
523
+
474
524
  export interface PBUiTransform {
475
525
  parent: number;
476
526
  rightOf: number;
@@ -561,7 +611,106 @@ export interface PBUiTransform {
561
611
  paddingBottomUnit: YGUnit;
562
612
  paddingBottom: number;
563
613
  /** default: PointerFilterMode.PFM_NONE */
564
- pointerFilter?: PointerFilterMode | undefined;
614
+ pointerFilter?:
615
+ | PointerFilterMode
616
+ | undefined;
617
+ /** default: 1 */
618
+ opacity?:
619
+ | number
620
+ | undefined;
621
+ /** default empty */
622
+ elementId?:
623
+ | string
624
+ | undefined;
625
+ /** default position=(0,0) */
626
+ scrollPosition?:
627
+ | ScrollPositionValue
628
+ | undefined;
629
+ /** default ShowScrollBar.SSB_BOTH */
630
+ scrollVisible?: ShowScrollBar | undefined;
631
+ }
632
+
633
+ function createBaseScrollPositionValue(): ScrollPositionValue {
634
+ return { value: undefined };
635
+ }
636
+
637
+ export namespace ScrollPositionValue {
638
+ export function encode(message: ScrollPositionValue, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
639
+ switch (message.value?.$case) {
640
+ case "position":
641
+ Vector2.encode(message.value.position, writer.uint32(10).fork()).ldelim();
642
+ break;
643
+ case "reference":
644
+ writer.uint32(18).string(message.value.reference);
645
+ break;
646
+ }
647
+ return writer;
648
+ }
649
+
650
+ export function decode(input: _m0.Reader | Uint8Array, length?: number): ScrollPositionValue {
651
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
652
+ let end = length === undefined ? reader.len : reader.pos + length;
653
+ const message = createBaseScrollPositionValue();
654
+ while (reader.pos < end) {
655
+ const tag = reader.uint32();
656
+ switch (tag >>> 3) {
657
+ case 1:
658
+ if (tag !== 10) {
659
+ break;
660
+ }
661
+
662
+ message.value = { $case: "position", position: Vector2.decode(reader, reader.uint32()) };
663
+ continue;
664
+ case 2:
665
+ if (tag !== 18) {
666
+ break;
667
+ }
668
+
669
+ message.value = { $case: "reference", reference: reader.string() };
670
+ continue;
671
+ }
672
+ if ((tag & 7) === 4 || tag === 0) {
673
+ break;
674
+ }
675
+ reader.skipType(tag & 7);
676
+ }
677
+ return message;
678
+ }
679
+
680
+ export function fromJSON(object: any): ScrollPositionValue {
681
+ return {
682
+ value: isSet(object.position)
683
+ ? { $case: "position", position: Vector2.fromJSON(object.position) }
684
+ : isSet(object.reference)
685
+ ? { $case: "reference", reference: String(object.reference) }
686
+ : undefined,
687
+ };
688
+ }
689
+
690
+ export function toJSON(message: ScrollPositionValue): unknown {
691
+ const obj: any = {};
692
+ message.value?.$case === "position" &&
693
+ (obj.position = message.value?.position ? Vector2.toJSON(message.value?.position) : undefined);
694
+ message.value?.$case === "reference" && (obj.reference = message.value?.reference);
695
+ return obj;
696
+ }
697
+
698
+ export function create<I extends Exact<DeepPartial<ScrollPositionValue>, I>>(base?: I): ScrollPositionValue {
699
+ return ScrollPositionValue.fromPartial(base ?? {});
700
+ }
701
+
702
+ export function fromPartial<I extends Exact<DeepPartial<ScrollPositionValue>, I>>(object: I): ScrollPositionValue {
703
+ const message = createBaseScrollPositionValue();
704
+ if (object.value?.$case === "position" && object.value?.position !== undefined && object.value?.position !== null) {
705
+ message.value = { $case: "position", position: Vector2.fromPartial(object.value.position) };
706
+ }
707
+ if (
708
+ object.value?.$case === "reference" && object.value?.reference !== undefined && object.value?.reference !== null
709
+ ) {
710
+ message.value = { $case: "reference", reference: object.value.reference };
711
+ }
712
+ return message;
713
+ }
565
714
  }
566
715
 
567
716
  function createBasePBUiTransform(): PBUiTransform {
@@ -618,6 +767,10 @@ function createBasePBUiTransform(): PBUiTransform {
618
767
  paddingBottomUnit: 0,
619
768
  paddingBottom: 0,
620
769
  pointerFilter: undefined,
770
+ opacity: undefined,
771
+ elementId: undefined,
772
+ scrollPosition: undefined,
773
+ scrollVisible: undefined,
621
774
  };
622
775
  }
623
776
 
@@ -779,6 +932,18 @@ export namespace PBUiTransform {
779
932
  if (message.pointerFilter !== undefined) {
780
933
  writer.uint32(416).int32(message.pointerFilter);
781
934
  }
935
+ if (message.opacity !== undefined) {
936
+ writer.uint32(429).float(message.opacity);
937
+ }
938
+ if (message.elementId !== undefined) {
939
+ writer.uint32(434).string(message.elementId);
940
+ }
941
+ if (message.scrollPosition !== undefined) {
942
+ ScrollPositionValue.encode(message.scrollPosition, writer.uint32(442).fork()).ldelim();
943
+ }
944
+ if (message.scrollVisible !== undefined) {
945
+ writer.uint32(448).int32(message.scrollVisible);
946
+ }
782
947
  return writer;
783
948
  }
784
949
 
@@ -1153,6 +1318,34 @@ export namespace PBUiTransform {
1153
1318
 
1154
1319
  message.pointerFilter = reader.int32() as any;
1155
1320
  continue;
1321
+ case 53:
1322
+ if (tag !== 429) {
1323
+ break;
1324
+ }
1325
+
1326
+ message.opacity = reader.float();
1327
+ continue;
1328
+ case 54:
1329
+ if (tag !== 434) {
1330
+ break;
1331
+ }
1332
+
1333
+ message.elementId = reader.string();
1334
+ continue;
1335
+ case 55:
1336
+ if (tag !== 442) {
1337
+ break;
1338
+ }
1339
+
1340
+ message.scrollPosition = ScrollPositionValue.decode(reader, reader.uint32());
1341
+ continue;
1342
+ case 56:
1343
+ if (tag !== 448) {
1344
+ break;
1345
+ }
1346
+
1347
+ message.scrollVisible = reader.int32() as any;
1348
+ continue;
1156
1349
  }
1157
1350
  if ((tag & 7) === 4 || tag === 0) {
1158
1351
  break;
@@ -1216,6 +1409,10 @@ export namespace PBUiTransform {
1216
1409
  paddingBottomUnit: isSet(object.paddingBottomUnit) ? yGUnitFromJSON(object.paddingBottomUnit) : 0,
1217
1410
  paddingBottom: isSet(object.paddingBottom) ? Number(object.paddingBottom) : 0,
1218
1411
  pointerFilter: isSet(object.pointerFilter) ? pointerFilterModeFromJSON(object.pointerFilter) : undefined,
1412
+ opacity: isSet(object.opacity) ? Number(object.opacity) : undefined,
1413
+ elementId: isSet(object.elementId) ? String(object.elementId) : undefined,
1414
+ scrollPosition: isSet(object.scrollPosition) ? ScrollPositionValue.fromJSON(object.scrollPosition) : undefined,
1415
+ scrollVisible: isSet(object.scrollVisible) ? showScrollBarFromJSON(object.scrollVisible) : undefined,
1219
1416
  };
1220
1417
  }
1221
1418
 
@@ -1279,6 +1476,14 @@ export namespace PBUiTransform {
1279
1476
  (obj.pointerFilter = message.pointerFilter !== undefined
1280
1477
  ? pointerFilterModeToJSON(message.pointerFilter)
1281
1478
  : undefined);
1479
+ message.opacity !== undefined && (obj.opacity = message.opacity);
1480
+ message.elementId !== undefined && (obj.elementId = message.elementId);
1481
+ message.scrollPosition !== undefined &&
1482
+ (obj.scrollPosition = message.scrollPosition ? ScrollPositionValue.toJSON(message.scrollPosition) : undefined);
1483
+ message.scrollVisible !== undefined &&
1484
+ (obj.scrollVisible = message.scrollVisible !== undefined
1485
+ ? showScrollBarToJSON(message.scrollVisible)
1486
+ : undefined);
1282
1487
  return obj;
1283
1488
  }
1284
1489
 
@@ -1340,6 +1545,12 @@ export namespace PBUiTransform {
1340
1545
  message.paddingBottomUnit = object.paddingBottomUnit ?? 0;
1341
1546
  message.paddingBottom = object.paddingBottom ?? 0;
1342
1547
  message.pointerFilter = object.pointerFilter ?? undefined;
1548
+ message.opacity = object.opacity ?? undefined;
1549
+ message.elementId = object.elementId ?? undefined;
1550
+ message.scrollPosition = (object.scrollPosition !== undefined && object.scrollPosition !== null)
1551
+ ? ScrollPositionValue.fromPartial(object.scrollPosition)
1552
+ : undefined;
1553
+ message.scrollVisible = object.scrollVisible ?? undefined;
1343
1554
  return message;
1344
1555
  }
1345
1556
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/protocol",
3
- "version": "1.0.0-10955038136.commit-7fe9554",
3
+ "version": "1.0.0-11502421172.commit-b32f4af",
4
4
  "description": "",
5
5
  "repository": "decentraland/protocol.git",
6
6
  "homepage": "https://github.com/decentraland/protocol#readme",
@@ -29,5 +29,5 @@
29
29
  "out-js",
30
30
  "public"
31
31
  ],
32
- "commit": "7fe9554c85dfb6f4927c207c439f22f513a2ce3d"
32
+ "commit": "b32f4af64dc3cdf63df93d7e8a92403ddd586d3f"
33
33
  }
@@ -31,10 +31,17 @@ message VideoTexture {
31
31
  optional TextureFilterMode filter_mode = 3; // default = FilterMode.Bilinear
32
32
  }
33
33
 
34
+ message UiCanvasTexture {
35
+ uint32 ui_canvas_entity = 1;
36
+ optional TextureWrapMode wrap_mode = 2; // default = TextureWrapMode.Clamp
37
+ optional TextureFilterMode filter_mode = 3; // default = FilterMode.Bilinear
38
+ }
39
+
34
40
  message TextureUnion {
35
41
  oneof tex {
36
42
  Texture texture = 1; // default = null
37
43
  AvatarTexture avatar_texture = 2; // default = null
38
44
  VideoTexture video_texture = 3; // default = null
45
+ UiCanvasTexture ui_texture = 4;
39
46
  }
40
- }
47
+ }
@@ -23,6 +23,8 @@ message PBAvatarModifierArea {
23
23
  decentraland.common.Vector3 area = 1; // the 3D size of the region
24
24
  repeated string exclude_ids = 2; // user IDs that can enter and remain unaffected
25
25
  repeated AvatarModifierType modifiers = 3; // list of modifiers to apply
26
+ optional AvatarMovementSettings movement_settings = 4;
27
+ optional bool use_collider_range = 5; // if true, the player will be considered inside the area when they are within 0.3m of the area. default true
26
28
  }
27
29
 
28
30
  // AvatarModifierType is an effect that should be applied to avatars inside the region.
@@ -30,3 +32,22 @@ enum AvatarModifierType {
30
32
  AMT_HIDE_AVATARS = 0; // avatars are invisible
31
33
  AMT_DISABLE_PASSPORTS = 1; // selecting (e.g. clicking) an avatar will not bring up their profile.
32
34
  }
35
+
36
+ message AvatarMovementSettings {
37
+ optional AvatarControlType control_mode = 1;
38
+ // if not explicitly set, the following properties default to user's preference settings
39
+ optional float run_speed = 2; // speed the player moves at, in m/s
40
+ optional float friction = 3; // how fast the player gets up to speed or comes to rest. higher = more responsive
41
+ optional float gravity = 4; // how fast the player accelerates vertically when not on a solid surface, in m/s. should normally be negative
42
+ optional float jump_height = 5; // how high the player can jump, in meters. should normally be positive. gravity must have the same sign for jumping to be possible
43
+ optional float max_fall_speed = 6; // max fall speed in m/s. should normally be negative
44
+ optional float turn_speed = 7; // speed the player turns in tank mode, in radians/s
45
+ optional float walk_speed = 8; // speed the player walks at, in m/s
46
+ optional bool allow_weighted_movement = 9; // whether to allow player to move at a slower speed (e.g. with a walk-key or when using a gamepad/joystick). defaults to true
47
+ }
48
+
49
+ enum AvatarControlType {
50
+ CCT_NONE = 0; // avatar cannot move
51
+ CCT_RELATIVE = 1; // avatar moves relative to the camera origin
52
+ CCT_TANK = 2; // avatar moves like a tank: left/right rotate the player, forward/backward advance/retreat the player
53
+ }
@@ -9,7 +9,7 @@ import "decentraland/sdk/components/common/id.proto";
9
9
  option (common.ecs_component_id) = 1071;
10
10
 
11
11
  // The CameraModeArea component can be attached to an Entity to define a region of space where
12
- // the player's camera mode (1st-person or 3rd-person) is overridden.
12
+ // the player's camera mode (1st-person, 3rd-person or cinematic) is overridden.
13
13
  //
14
14
  // The Entity's Transform position determines the center-point of the region, while its size is
15
15
  // given as a vector in the `area` property below. The Transform rotation is applied, but the scale
@@ -19,7 +19,26 @@ option (common.ecs_component_id) = 1071;
19
19
  //
20
20
  // Note that, while commonly used to delineate a 2D area in a scene (hence the name), the region
21
21
  // is actually a 3D volume.
22
+ //
23
+ // When mode is set to CtCinematic, the cinematic_settings field must also be provided.
22
24
  message PBCameraModeArea {
23
- decentraland.common.Vector3 area = 1; // the 3D size of the region
24
- common.CameraType mode = 2; // the camera mode to enforce
25
+ decentraland.common.Vector3 area = 1; // the 3D size of the region
26
+ common.CameraType mode = 2; // the camera mode to enforce
27
+ optional CinematicSettings cinematic_settings = 3;
28
+ optional bool use_collider_range = 4; // if true, the player will be considered inside the area when they are within 0.3m of the area. default true
29
+ }
30
+
31
+ message CinematicSettings {
32
+ uint32 camera_entity = 1; // Entity that defines the cinematic camera transform.
33
+ // Position -> camera's position
34
+ // Rotation -> camera's direction
35
+ // scale.z -> zoom level
36
+ // scale.x and scale.y -> unused
37
+ optional bool allow_manual_rotation = 2; // whether the user can move the camera's rotation. default false
38
+ optional float yaw_range = 3; // how far the camera can rotate around the y-axis / look left/right, in radians. default unrestricted
39
+ optional float pitch_range = 4; // how far the camera can rotate around the x-axis / look up-down, in radians. default unrestricted
40
+ // note: cameras can never look up/down further than Vec3::Y
41
+ optional float roll_range = 5; // how far the camera can rotate around the z-axis / tilt, in radians. default unrestricted
42
+ optional float zoom_min = 6; // minimum zoom level. must be greater than 0. defaults to the input zoom level
43
+ optional float zoom_max = 7; // maximum zoom level. must be greater than 0. defaults to the input zoom level
25
44
  }
@@ -0,0 +1,22 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/common/colors.proto";
5
+ import "decentraland/common/vectors.proto";
6
+
7
+ import "decentraland/sdk/components/common/id.proto";
8
+ option (common.ecs_component_id) = 1206;
9
+
10
+ // defines the global scene light settings. must be added to the scene root.
11
+ // to control sunlight color, intensity, shadows etc, you can also add a PBLight to the scene root.
12
+ message PBGlobalLight {
13
+ // the direction the directional light shines in.
14
+ // default depends on time of day and explorer implementation
15
+ optional decentraland.common.Vector3 direction = 1;
16
+ // ambient light color
17
+ // default: White
18
+ optional decentraland.common.Color3 ambient_color = 2;
19
+ // ambient light intensity. the explorer default ambient brightness is multiplied by this non-physical quantity.
20
+ // default 1
21
+ optional float ambient_brightness = 3;
22
+ }
@@ -10,4 +10,17 @@ import "decentraland/sdk/components/common/loading_state.proto";
10
10
  // the current state of the GltfContainer of an entity.
11
11
  message PBGltfContainerLoadingState {
12
12
  common.LoadingState current_state = 1;
13
+ repeated string node_paths = 2; // all node paths in the gltf, which can be used with a GltfNode to inspect and modify the gltf contents
14
+ repeated string mesh_names = 3; // all meshes in the gltf. unnamed meshes will be auto-assigned a name of the form `MeshX` or `MeshX/PrimitiveY`
15
+ // where X is the mesh index and Y is the primitive index (and there is more than 1 primitive). note this may
16
+ // conflict with manually named meshes - to avoid any issues make sure all your meshes are explicitly named.
17
+ repeated string material_names = 4; // all materials in the gltf. unnamed materials will be auto-assigned a name of the form `MaterialX` where
18
+ // X is the material index. note this may conflict with manually named materials - to avoid any issues make
19
+ // sure all your materials are explicitly named.
20
+ repeated string skin_names = 5; // all mesh skins in the gltf. unnamed skins will be auto-assigned a name of the form `SkinX` where
21
+ // X is the skin index. note this may conflict with manually named skins - to avoid any issues make sure all
22
+ // your skins are explicitly named.
23
+ repeated string animation_names = 6; // all animations in the gltf. unnamed animations will be auto-assigned a name of the form `AnimationX` where
24
+ // X is the animation index. note this may conflict with manually named anims - to avoid any issues make sure all
25
+ // your animations are explicitly named.
13
26
  }
@@ -0,0 +1,42 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/sdk/components/common/id.proto";
5
+ option (common.ecs_component_id) = 1200;
6
+
7
+ // a GltfNode links a scene entity with a node from within a gltf, allowing the scene to inspect it or modify it.
8
+ // This component must be added to a direct child of an entity with a PBGltfContainer component, or
9
+ // to a direct child of another entity with a GltfNode component, and the referenced gltf node must be a descendent of the gltf node
10
+ // in the parent.
11
+ // The name must match the path of one of the nodes within the Gltf. These are available on the GltfContainerLoadingState component.
12
+ //
13
+ // The renderer will attach a PBGltfNodeState to the entity describing the state. Once the state is `GNS_READY`,
14
+ // - the `Transform` will be updated to match the position of the node within the gltf (relative to the gltf root, or the parent node),
15
+ // - a `MeshRenderer` with a GltfMesh mesh type will be added (if the gltf node has a mesh).
16
+ // - a `MeshCollider` with a GltfMesh mesh type will be added (if the gltf node has a collider).
17
+ // - a `Material` component including a GltfMaterial reference will be added (if the gltf node has a material).
18
+ //
19
+ // After creation, if an animation moves the node, the `Transform` will be updated.
20
+ //
21
+ // From the scene, you can modify various components to alter the gltf node:
22
+ // - modifying the `Transform` position/rotation/scale will move the node. The position is interpreted relative to the gltf root (or parent node),
23
+ // regardless of any intermediate gltf node hierarchy.
24
+ // If an animation is playing, the animation takes priority and the scene entity's position will be updated to match the animation.
25
+ // - `Visibility` can be added to hide or show the node and it's children in the gltf hierarchy.
26
+ // - `MeshRenderer` can be added/modified/removed to create/modify/remove a mesh on the node.
27
+ // - `MeshCollider` can be added/modified/removed to create/modify/remove a collider on the node.
28
+ // - `Material` can be added or modified to change the material properties. If the gltf node has a material, the original material will be
29
+ // used as a base, and any gltf features (e.g. occlusion maps) from the gtlf spec that the renderer supports but that are not exposed in the
30
+ // PBMaterial will be maintained.
31
+ //
32
+ // The scene can add additional entities as children to the gltf node, but structural modifications of the gltf are not possible:
33
+ // - changing the scene hierarchy will not change the gltf node hierarchy. Moving the entity out of the gltf will sever the link and
34
+ // change the state to `GNS_FAILED`.
35
+ // - deleting the scene entity will not delete the gltf node.
36
+ //
37
+ // Removing the GltfNode will revert any changes to the original gltf. If the GltfNode component is removed and the mesh/collider/material
38
+ // are not removed, this will result in a duplication of these components as the previously-linked entity will retain it's components and
39
+ // the gltf node will also be displayed.
40
+ message PBGltfNode {
41
+ string path = 1; // the path of the target node in the Gltf.
42
+ }
@@ -0,0 +1,20 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/sdk/components/common/id.proto";
5
+ option (common.ecs_component_id) = 1201;
6
+
7
+ // See the details of the GltfNode component for more information.
8
+
9
+ // The state of a linked gltf node.
10
+ // If the state is GNSV_FAILED, the renderer may describe the failure in the error string.
11
+ message PBGltfNodeState {
12
+ GltfNodeStateValue state = 1;
13
+ optional string error = 2;
14
+ }
15
+
16
+ enum GltfNodeStateValue {
17
+ GNSV_PENDING = 0;
18
+ GNSV_FAILED = 1;
19
+ GNSV_READY = 2;
20
+ }
@@ -0,0 +1,42 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/common/colors.proto";
5
+
6
+ import "decentraland/sdk/components/common/id.proto";
7
+ option (common.ecs_component_id) = 1204;
8
+
9
+ // defines a light source.
10
+ // the world has a default directional light (like sunlight) which can be overridden by adding the light component to the scene root.
11
+ // a PBGlobalLight component can also be added to the root to control the directional light direction.
12
+ // point lights (lightbulbs) or spotlights can be created by attaching the light component to non-root entities.
13
+ message PBLight {
14
+ // whether the light is on
15
+ // default true
16
+ optional bool enabled = 1;
17
+ // light brightness in lux (lumens/m^2).
18
+ //
19
+ // for global directional light, this applies as a constant value at all surfaces and distances (though the effect on the surface still depends on incidence angle).
20
+ // the default global light illuminance varies from 400 (sunrise/sunset) to 10,000 (midday).
21
+ // for typical values, see https://en.wikipedia.org/wiki/Lux#Illuminance
22
+ //
23
+ // for point and spot lights, this is the lumens/m^2 at 1m distance from the light. to transform from raw lumens,
24
+ // divide lumens by ~12 (4*pi).
25
+ // e.g. a 100w household bulb with 1200 lumens would have an illuminance of ~100.
26
+ // a lighthouse bulb with 200,000 lumens would have an illuminance of ~15,000 (ignoring beam reflections)
27
+ //
28
+ // default
29
+ // for point/spotlights: 10,000
30
+ // for global directional light: depends on explorer implementation. may vary on light direction, time of day, etc
31
+ optional float illuminance = 2;
32
+ // whether the light should cast shadows.
33
+ // note: even when set to true the engine may not display shadows, or may only show shadows for a limited number
34
+ // of lights depending on the implementation, platform, and user settings.
35
+ // default
36
+ // for point/spotlights: false / off
37
+ // for global directional light: true / on
38
+ optional bool shadows = 3;
39
+ // light color
40
+ // default White
41
+ optional decentraland.common.Color3 color = 4;
42
+ }
@@ -22,6 +22,7 @@ message PBMaterial {
22
22
  optional float alpha_test = 2; // default = 0.5. range value: from 0 to 1
23
23
  optional bool cast_shadows = 3; // default = true
24
24
  optional decentraland.common.Color4 diffuse_color = 4; // default = white;
25
+ optional decentraland.common.TextureUnion alpha_texture = 5; // default = null
25
26
  }
26
27
 
27
28
  message PbrMaterial {
@@ -29,7 +30,7 @@ message PBMaterial {
29
30
 
30
31
  optional float alpha_test = 2; // default = 0.5. range value: from 0 to 1
31
32
  optional bool cast_shadows = 3; // default = true
32
-
33
+ // @deprecated Alpha textures are no longer supported on PBRMaterial and UnlitMaterial.alphaTexture should be used instead.
33
34
  optional decentraland.common.TextureUnion alpha_texture = 4; // default = null
34
35
  optional decentraland.common.TextureUnion emissive_texture = 5; // default = null
35
36
  optional decentraland.common.TextureUnion bump_texture = 6; // default = null
@@ -53,5 +54,16 @@ message PBMaterial {
53
54
  UnlitMaterial unlit = 1;
54
55
  PbrMaterial pbr = 2;
55
56
  }
57
+
58
+ message GltfMaterial {
59
+ string gltf_src = 1;
60
+ string name = 2;
61
+ }
56
62
 
63
+ // A gltf material that may provide additional features not supported by the PbMaterial fields.
64
+ // If both gltf and material fields are provided, the gltf will be used only for extended features not
65
+ // supported by the PbMaterial.
66
+ // If this is provided and the `material` field is not provided, the renderer will update the material
67
+ // field with data that reflects the gltf material once it is loaded.
68
+ optional GltfMaterial gltf = 3;
57
69
  }
@@ -30,6 +30,12 @@ message PBMeshCollider {
30
30
  // SphereMesh is a sphere shape that contains the Entity.
31
31
  message SphereMesh {}
32
32
 
33
+ // A collider constructed from a Gltf Mesh.
34
+ message GltfMesh {
35
+ string gltf_src = 1; // the GLTF file path as listed in the scene's manifest.
36
+ string name = 2; // the name of the mesh asset
37
+ }
38
+
33
39
  optional uint32 collision_mask = 1; // enabled ColliderLayers (default CL_POINTER | CL_PHYSICS)
34
40
 
35
41
  oneof mesh {
@@ -37,6 +43,7 @@ message PBMeshCollider {
37
43
  SphereMesh sphere = 3;
38
44
  CylinderMesh cylinder = 4;
39
45
  PlaneMesh plane = 5;
46
+ GltfMesh gltf = 6;
40
47
  }
41
48
  }
42
49
 
@@ -59,4 +66,4 @@ enum ColliderLayer {
59
66
  CL_CUSTOM6 = 8192;
60
67
  CL_CUSTOM7 = 16384;
61
68
  CL_CUSTOM8 = 32768;
62
- }
69
+ }
@@ -5,13 +5,11 @@ import "decentraland/sdk/components/common/id.proto";
5
5
  option (common.ecs_component_id) = 1018;
6
6
 
7
7
  // The MeshRenderer component renders a basic geometric shape for an Entity. It can be a cube, a
8
- // plane, a sphere or a cylinder.
8
+ // plane, a sphere, a cylinder, or a Gltf mesh.
9
9
  //
10
10
  // The cube and plane variants can include a UV texture mapping, so specific areas of a material
11
11
  // texture are rendered on different faces of the shape. They are serialized as a sequence of 2D
12
12
  // `float` coordinates, one for each corner of each side of each face.
13
- //
14
- // More complex shapes require the use of a `GltfContainer` component.
15
13
  message PBMeshRenderer {
16
14
 
17
15
  // BoxMesh renders a prism shape.
@@ -34,10 +32,17 @@ message PBMeshRenderer {
34
32
  message SphereMesh {
35
33
  }
36
34
 
35
+ // A mesh from a Gltf.
36
+ message GltfMesh {
37
+ string gltf_src = 1; // the GLTF file path as listed in the scene's manifest.
38
+ string name = 2; // the name of the mesh asset
39
+ }
40
+
37
41
  oneof mesh {
38
42
  BoxMesh box = 1;
39
43
  SphereMesh sphere = 2;
40
44
  CylinderMesh cylinder = 3;
41
45
  PlaneMesh plane = 4;
46
+ GltfMesh gltf = 5;
42
47
  }
43
48
  }
@@ -0,0 +1,21 @@
1
+ syntax = "proto3";
2
+ package decentraland.sdk.components;
3
+
4
+ import "decentraland/sdk/components/common/id.proto";
5
+ option (common.ecs_component_id) = 1205;
6
+
7
+ // defines a spotlight.
8
+ // spotlights are point lights that emit light only in a cone around the transform's forward direction.
9
+ // add this component together with the PBLight component to transform a point light into a spotlight.
10
+ // note that spotlights do not model any internal reflections / focus, they only restrict the area of effect.
11
+ // so for e.g. a torch beam, the bulb illuminance should be multiplied by the solid angle.
12
+ // a typical torch with a beam width of 15 degrees would use outer angle of 0.15 (7.5 degrees in radians),
13
+ // and an illuminance approximately equal to the bulb's lumens, e.g. 1200.
14
+ message PBSpotlight {
15
+ // the cone radius in radians. distance away from forward in which the light is visible.
16
+ // for a torch a value around 0.15 is appropriate.
17
+ float angle = 1;
18
+ // optional angle at which the light is brightest. should be <= outer angle.
19
+ // if specified, the light will fall off smoothly between `inner_angle` and `angle`.
20
+ optional float inner_angle = 2;
21
+ }
@@ -0,0 +1,16 @@
1
+ syntax = "proto3";
2
+
3
+ import "decentraland/sdk/components/common/id.proto";
4
+ package decentraland.sdk.components;
5
+
6
+ option (common.ecs_component_id) = 1203;
7
+
8
+ import "decentraland/common/colors.proto";
9
+
10
+ // The UiCanvas component can be attached to a ui root entity to specify properties of the ui texture.
11
+ message PBUiCanvas {
12
+ uint32 width = 1;
13
+ uint32 height = 2;
14
+
15
+ optional decentraland.common.Color4 color = 3; // default = (0.0, 0.0, 0.0, 0.0) / transparent
16
+ }