From da1e9b9f42e703c873e9315e98d8927ca66b9e2f Mon Sep 17 00:00:00 2001 From: Pravus Date: Sat, 23 May 2026 01:22:01 +0200 Subject: [PATCH] updated protocol and reacted to collision layer update --- package-lock.json | 84 ++++++++++--------- package.json | 2 +- .../src/components/extended/TriggerArea.ts | 4 +- .../etc/playground-assets.api.md | 3 +- test/ecs/components/MeshCollider.spec.ts | 17 ++++ test/ecs/events/raycastHelperSystem.spec.ts | 15 ++++ 6 files changed, 79 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1602c749f..fc8428ba5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@actions/core": "^1.10.0", - "@dcl/protocol": "1.0.0-24513643863.commit-4851fd6", + "@dcl/protocol": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-26316313514.commit-8ee7c54.tgz", "@dcl/quickjs-emscripten": "^0.21.0-3680274614.commit-1808aa1", "@dcl/ts-proto": "1.153.0", "@types/fs-extra": "^9.0.12", @@ -577,9 +577,9 @@ } }, "node_modules/@dcl/protocol": { - "version": "1.0.0-24513643863.commit-4851fd6", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-24513643863.commit-4851fd6.tgz", - "integrity": "sha512-AbQ1exc37Uve3N7egafyBnJbIfH7Ppyq6iGMYVZgGnNNuWXhV0RIv3bNV9CMEYWE/E0Ryjq4Ngzst2MWfIVtog==", + "version": "1.0.0-26316313514.commit-8ee7c54", + "resolved": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-26316313514.commit-8ee7c54.tgz", + "integrity": "sha512-lp7F9ZlSjBFtbB9YfcBg07ycsCYkhzcZ+FHkhiuRv7twWxOtRvXuICT6LD761U13wEFpOuB/UcrJNXPDYxwAyw==", "license": "Apache-2.0", "dependencies": { "@dcl/ts-proto": "1.154.0", @@ -1652,22 +1652,24 @@ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@protobufjs/aspromise": "^1.1.1" } }, "node_modules/@protobufjs/float": { @@ -1676,9 +1678,10 @@ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", @@ -1691,9 +1694,10 @@ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { "version": "0.24.28", @@ -8375,9 +8379,8 @@ } }, "@dcl/protocol": { - "version": "1.0.0-24513643863.commit-4851fd6", - "resolved": "https://registry.npmjs.org/@dcl/protocol/-/protocol-1.0.0-24513643863.commit-4851fd6.tgz", - "integrity": "sha512-AbQ1exc37Uve3N7egafyBnJbIfH7Ppyq6iGMYVZgGnNNuWXhV0RIv3bNV9CMEYWE/E0Ryjq4Ngzst2MWfIVtog==", + "version": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-26316313514.commit-8ee7c54.tgz", + "integrity": "sha512-lp7F9ZlSjBFtbB9YfcBg07ycsCYkhzcZ+FHkhiuRv7twWxOtRvXuICT6LD761U13wEFpOuB/UcrJNXPDYxwAyw==", "requires": { "@dcl/ts-proto": "1.154.0", "protobufjs": "7.2.4" @@ -9206,22 +9209,21 @@ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==" }, "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.1.tgz", + "integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==" }, "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@protobufjs/aspromise": "^1.1.1" } }, "@protobufjs/float": { @@ -9230,9 +9232,9 @@ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==" }, "@protobufjs/path": { "version": "1.1.2", @@ -9245,9 +9247,9 @@ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==" }, "@sinclair/typebox": { "version": "0.24.28" diff --git a/package.json b/package.json index e672a82f7..ad57383ba 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "bugs": "https://github.com/decentraland/js-sdk-toolchain/issues", "dependencies": { "@actions/core": "^1.10.0", - "@dcl/protocol": "1.0.0-24513643863.commit-4851fd6", + "@dcl/protocol": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-26316313514.commit-8ee7c54.tgz", "@dcl/quickjs-emscripten": "^0.21.0-3680274614.commit-1808aa1", "@dcl/ts-proto": "1.153.0", "@types/fs-extra": "^9.0.12", diff --git a/packages/@dcl/ecs/src/components/extended/TriggerArea.ts b/packages/@dcl/ecs/src/components/extended/TriggerArea.ts index 031505990..315adf3be 100644 --- a/packages/@dcl/ecs/src/components/extended/TriggerArea.ts +++ b/packages/@dcl/ecs/src/components/extended/TriggerArea.ts @@ -10,7 +10,7 @@ export interface TriggerAreaComponentDefinitionExtended * @public * Set a box in the MeshCollider component * @param entity - entity to create or replace the TriggerArea component - * @param collisionMask - the collision layers mask for the trigger to react, default: Player + * @param collisionMask - the collision layers mask for the trigger to react, default: CL_PLAYER */ setBox(entity: Entity, collisionMask?: ColliderLayer | ColliderLayer[]): void @@ -18,7 +18,7 @@ export interface TriggerAreaComponentDefinitionExtended * @public * Set a sphere in the MeshCollider component * @param entity - entity to create or replace the TriggerArea component - * @param collisionMask - the collision layers mask for the trigger to react, default: Player + * @param collisionMask - the collision layers mask for the trigger to react, default: CL_PLAYER */ setSphere(entity: Entity, collisionMask?: ColliderLayer | ColliderLayer[]): void } diff --git a/packages/@dcl/playground-assets/etc/playground-assets.api.md b/packages/@dcl/playground-assets/etc/playground-assets.api.md index d9b25bc9d..7c6cb4f58 100644 --- a/packages/@dcl/playground-assets/etc/playground-assets.api.md +++ b/packages/@dcl/playground-assets/etc/playground-assets.api.md @@ -481,13 +481,12 @@ export const enum ColliderLayer { CL_CUSTOM7 = 16384, // (undocumented) CL_CUSTOM8 = 32768, + CL_MAIN_PLAYER = 8, CL_NONE = 0, CL_PHYSICS = 2, CL_PLAYER = 4, CL_POINTER = 1, // (undocumented) - CL_RESERVED2 = 8, - // (undocumented) CL_RESERVED3 = 16, // (undocumented) CL_RESERVED4 = 32, diff --git a/test/ecs/components/MeshCollider.spec.ts b/test/ecs/components/MeshCollider.spec.ts index 434c1a749..0184e12e5 100644 --- a/test/ecs/components/MeshCollider.spec.ts +++ b/test/ecs/components/MeshCollider.spec.ts @@ -86,4 +86,21 @@ describe('Generated MeshCollider ProtoBuf', () => { } }) }) + + it('getCollisionMask combines CL_PLAYER and CL_MAIN_PLAYER into bitfield 12', () => { + const newEngine = Engine() + const entity = newEngine.addEntity() + const MeshCollider = components.MeshCollider(newEngine) + + // CL_PLAYER = 4, CL_MAIN_PLAYER = 8 => OR = 12 + MeshCollider.setBox(entity, [ColliderLayer.CL_PLAYER, ColliderLayer.CL_MAIN_PLAYER]) + expect(MeshCollider.get(entity)).toStrictEqual({ + collisionMask: 12, + mesh: { + $case: 'box', + box: {} + } + }) + expect(ColliderLayer.CL_PLAYER | ColliderLayer.CL_MAIN_PLAYER).toBe(12) + }) }) diff --git a/test/ecs/events/raycastHelperSystem.spec.ts b/test/ecs/events/raycastHelperSystem.spec.ts index 370b047f7..dcf37927e 100644 --- a/test/ecs/events/raycastHelperSystem.spec.ts +++ b/test/ecs/events/raycastHelperSystem.spec.ts @@ -462,6 +462,21 @@ describe('Raycast Helper System should', () => { expect(fn).toHaveBeenCalled() }) + it('round-trips CL_MAIN_PLAYER collision mask through raycast helper', async () => { + const raycastEntity = engine.addEntity() + raycastHelperSystem.registerLocalDirectionRaycast(raycastEntity, (_result) => {}, { + direction: Vector3.Forward(), + queryType: RaycastQueryType.RQT_HIT_FIRST, + collisionMask: ColliderLayer.CL_MAIN_PLAYER + }) + + await engine.update(1) + + const attachedRaycast = raycastComponent.get(raycastEntity) + expect(attachedRaycast.collisionMask).toBe(ColliderLayer.CL_MAIN_PLAYER) + expect(attachedRaycast.collisionMask).toBe(8) + }) + it('attach raycast component after 1 frame', async () => { const raycastEntity = engine.addEntity() raycastHelperSystem.registerGlobalDirectionRaycast({ entity: raycastEntity }, (_result) => {})