From a83523964456f93942856dad3461245129a01d50 Mon Sep 17 00:00:00 2001 From: Micheal Parks Date: Wed, 6 Mar 2024 14:26:41 -0500 Subject: [PATCH] fix change callbacks --- package.json | 2 +- src/object-3d.ts | 32 +++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 80b1ec8..65438d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@viamrobotics/three", - "version": "0.0.8", + "version": "0.0.9", "license": "Apache-2.0", "type": "module", "files": [ diff --git a/src/object-3d.ts b/src/object-3d.ts index c6193d7..dad9b18 100644 --- a/src/object-3d.ts +++ b/src/object-3d.ts @@ -19,30 +19,40 @@ export class ViamObject3D extends Object3D { super(); const ov = new OrientationVector(); - const ovChangeCallback = () => ov.setFromQuaternion(this.quaternion, false); + + const ovChangeCallback = () => { + ov.setFromQuaternion(this.quaternion, false); + }; + + const onChange = () => { + this.quaternion._onChangeCallback = noop; + this.rotation._onChangeCallback = noop; + + ov.toQuaternion(this.quaternion); + ov.toEuler(this.rotation); + + this.quaternion._onChangeCallback = quatChangeCallback; + this.rotation._onChangeCallback = eulerChangeCallback; + }; + const eulerOldChangeCallback = this.rotation._onChangeCallback; const quatOldChangeCallback = this.quaternion._onChangeCallback; const quatChangeCallback = () => { + ov._onChange(noop); quatOldChangeCallback(); ovChangeCallback(); + ov._onChange(onChange); }; const eulerChangeCallback = () => { + ov._onChange(noop); eulerOldChangeCallback(); ovChangeCallback(); + ov._onChange(onChange); }; - ov._onChange(() => { - this.quaternion._onChangeCallback = noop; - this.rotation._onChangeCallback = noop; - - ov.toQuaternion(this.quaternion); - ov.toEuler(this.rotation); - - this.quaternion._onChangeCallback = quatChangeCallback; - this.rotation._onChangeCallback = eulerChangeCallback; - }); + ov._onChange(onChange); this.quaternion._onChange(quatChangeCallback); this.rotation._onChange(eulerChangeCallback);