Added highlighting.
This commit is contained in:
parent
b443e1854b
commit
83279fa5b0
@ -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;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user