From 1a3e9b879eb2d46e02c15db48986c8ec39fbf4f1 Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Thu, 30 May 2024 10:14:42 -0500 Subject: [PATCH] Added clickMenu cleanup when multiple clicks. --- src/controllers/base.ts | 3 +++ src/menus/clickMenu.ts | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/controllers/base.ts b/src/controllers/base.ts index 0e3e63b..8cc361d 100644 --- a/src/controllers/base.ts +++ b/src/controllers/base.ts @@ -217,6 +217,9 @@ export class Base { this.diagramManager.diagramMenuManager.connect(mesh); } else { + if (this.clickMenu) { + this.clickMenu.dispose(); + } this.clickMenu = this.diagramManager.diagramMenuManager.createClickMenu(mesh, this.xrInputSource); } } else { diff --git a/src/menus/clickMenu.ts b/src/menus/clickMenu.ts index d92657d..45a2e5f 100644 --- a/src/menus/clickMenu.ts +++ b/src/menus/clickMenu.ts @@ -5,13 +5,13 @@ const POINTER_UP = "pointerup"; export class ClickMenu { private readonly _mesh: AbstractMesh; - private readonly transform: TransformNode; + private readonly _transformNode: TransformNode; public onClickMenuObservable: Observable = new Observable(); constructor(mesh: AbstractMesh) { this._mesh = mesh; const scene = mesh.getScene(); - this.transform = new TransformNode("transform", scene); + this._transformNode = new TransformNode("transform", scene); let x = -.54 / 2; this.makeNewButton("Remove", "remove", scene, x += .11) @@ -55,29 +55,29 @@ export class ClickMenu { }, -1, false, this, false); const platform = scene.getMeshByName("platform"); - this.transform.parent = scene.activeCamera; - this.transform.position.z = .7; - this.transform.position.y = -.1; - this.transform.setParent(platform); - this.transform.rotation.z = 0; + this._transformNode.parent = scene.activeCamera; + this._transformNode.position.z = .7; + this._transformNode.position.y = -.1; + this._transformNode.setParent(platform); + this._transformNode.rotation.z = 0; } public get mesh(): AbstractMesh { return this._mesh; } + public dispose() { + this._transformNode.dispose(false, true); + } + private makeNewButton(name: string, id: string, scene: Scene, x: number): HtmlButton { const button = new HtmlButton(name, id, scene, null, {html: null, image: {width: 268, height: 268}}); const transform = button.transform; - transform.parent = this.transform; + transform.parent = this._transformNode; transform.rotation.y = Math.PI; transform.position.x = x; return button; } - - private dispose() { - this.transform.dispose(false, true); - } } function isUp(event: ActionEvent): boolean {