From 83279fa5b0361f782fee4c0b1668978bb0f04f7e Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Fri, 23 Aug 2024 08:50:00 -0500 Subject: [PATCH] Added highlighting. --- .../functions/buildEntityActionManager.ts | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/diagram/functions/buildEntityActionManager.ts b/src/diagram/functions/buildEntityActionManager.ts index 0d6b143..5280779 100644 --- a/src/diagram/functions/buildEntityActionManager.ts +++ b/src/diagram/functions/buildEntityActionManager.ts @@ -1,15 +1,42 @@ -import {ActionManager, ExecuteCodeAction} from "@babylonjs/core"; +import {ActionManager, ExecuteCodeAction, HighlightLayer, InstancedMesh, StandardMaterial,} from "@babylonjs/core"; import {ControllerEventType, Controllers} from "../../controllers/controllers"; import log from "loglevel"; import {DefaultScene} from "../../defaultScene"; export function buildEntityActionManager(controllers: Controllers) { + const highlightLayer = new HighlightLayer('highlightLayer', DefaultScene.Scene); + highlightLayer.innerGlow = false; + highlightLayer.outerGlow = true; + + const logger = log.getLogger('buildEntityActionManager'); const actionManager = new ActionManager(DefaultScene.Scene); /*actionManager.registerAction( new PlaySoundAction(ActionManager.OnPointerOverTrigger, sounds.tick));*/ actionManager.registerAction( new ExecuteCodeAction(ActionManager.OnPointerOverTrigger, (evt) => { + if (evt.meshUnderPointer) { + try { + const mesh = evt.meshUnderPointer as InstancedMesh; + //mesh.sourceMesh.renderOutline = true; + if (mesh.sourceMesh) { + const newMesh = mesh.sourceMesh.clone(mesh.sourceMesh.name + '_clone', null, true); + newMesh.metadata = {}; + newMesh.parent = null; + newMesh.position = mesh.absolutePosition; + newMesh.rotationQuaternion = mesh.absoluteRotationQuaternion; + newMesh.scaling = mesh.scaling; + newMesh.setEnabled(true); + newMesh.isPickable = false; + highlightLayer.addMesh(newMesh, (mesh.sourceMesh.material as StandardMaterial).diffuseColor.multiplyByFloats(1.5, 1.5, 1.5)); + highlightLayer.setEffectIntensity(newMesh, 1.2); + mesh.metadata.highlight = newMesh; + console.log(newMesh); + } + } catch (e) { + logger.error(e); + } + } controllers.controllerObservable.notifyObservers({ type: ControllerEventType.PULSE, gripId: evt?.additionalData?.pickResult?.gripTransform?.id @@ -17,5 +44,19 @@ export function buildEntityActionManager(controllers: Controllers) { logger.debug(evt); }) ); + actionManager.registerAction( + new ExecuteCodeAction(ActionManager.OnPointerOutTrigger, (evt) => { + try { + const mesh = evt.source; + if (mesh.metadata.highlight) { + mesh.metadata.highlight.dispose(); + mesh.metadata.highlight = null; + } + } catch (e) { + logger.error(e); + } + logger.debug(evt); + }) + ); return actionManager; } \ No newline at end of file