Added highlighting.

This commit is contained in:
Michael Mainguy 2024-08-23 08:50:00 -05:00
parent b443e1854b
commit 83279fa5b0

View File

@ -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 {ControllerEventType, Controllers} from "../../controllers/controllers";
import log from "loglevel"; import log from "loglevel";
import {DefaultScene} from "../../defaultScene"; import {DefaultScene} from "../../defaultScene";
export function buildEntityActionManager(controllers: Controllers) { export function buildEntityActionManager(controllers: Controllers) {
const highlightLayer = new HighlightLayer('highlightLayer', DefaultScene.Scene);
highlightLayer.innerGlow = false;
highlightLayer.outerGlow = true;
const logger = log.getLogger('buildEntityActionManager'); const logger = log.getLogger('buildEntityActionManager');
const actionManager = new ActionManager(DefaultScene.Scene); const actionManager = new ActionManager(DefaultScene.Scene);
/*actionManager.registerAction( /*actionManager.registerAction(
new PlaySoundAction(ActionManager.OnPointerOverTrigger, sounds.tick));*/ new PlaySoundAction(ActionManager.OnPointerOverTrigger, sounds.tick));*/
actionManager.registerAction( actionManager.registerAction(
new ExecuteCodeAction(ActionManager.OnPointerOverTrigger, (evt) => { 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({ controllers.controllerObservable.notifyObservers({
type: ControllerEventType.PULSE, type: ControllerEventType.PULSE,
gripId: evt?.additionalData?.pickResult?.gripTransform?.id gripId: evt?.additionalData?.pickResult?.gripTransform?.id
@ -17,5 +44,19 @@ export function buildEntityActionManager(controllers: Controllers) {
logger.debug(evt); 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; return actionManager;
} }