From 7cb295d99b46d2edc76306c6f001bfe7d37d841d Mon Sep 17 00:00:00 2001 From: Noeri Huisman <8823461+mrxz@users.noreply.github.com> Date: Fri, 25 Sep 2026 16:09:54 +0200 Subject: [PATCH] Remove `obb-collider` component when removing `grabbable` --- src/components/grabbable.js | 4 ++++ src/components/obb-collider.js | 2 ++ tests/components/grabbable.test.js | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 tests/components/grabbable.test.js diff --git a/src/components/grabbable.js b/src/components/grabbable.js index eac764dbabf..bc3c3efda3f 100644 --- a/src/components/grabbable.js +++ b/src/components/grabbable.js @@ -3,5 +3,9 @@ import { registerComponent } from '../core/component.js'; registerComponent('grabbable', { init: function () { this.el.setAttribute('obb-collider', 'centerModel: true'); + }, + + remove: function () { + this.el.removeAttribute('obb-collider'); } }); diff --git a/src/components/obb-collider.js b/src/components/obb-collider.js index d744d0f693d..3b624817ebd 100644 --- a/src/components/obb-collider.js +++ b/src/components/obb-collider.js @@ -30,6 +30,8 @@ registerComponent('obb-collider', { remove: function () { this.system.removeCollider(this.el); + this.el.removeEventListener('loaded', this.updateCollider); + this.el.removeEventListener('model-loaded', this.onModelLoaded); }, update: function () { diff --git a/tests/components/grabbable.test.js b/tests/components/grabbable.test.js new file mode 100644 index 00000000000..d0f03c68b33 --- /dev/null +++ b/tests/components/grabbable.test.js @@ -0,0 +1,24 @@ +/* global assert, setup, suite, test */ +import { entityFactory } from '../helpers.js'; + +suite('grabbable', function () { + var el; + + setup(function (done) { + el = entityFactory(); + el.setAttribute('grabbable', ''); + if (el.hasLoaded) { done(); } + el.addEventListener('loaded', function () { + done(); + }, {once: true}); + }); + + test('automatically adds obb-collider component to entity', function () { + assert.ok(el.components['obb-collider']); + }); + + test('removes obb-collider component upon removal', function () { + el.removeAttribute('grabbable'); + assert.notOk(el.components['obb-collider']); + }); +});