immersive2/src/diagram/functions/buildEntityActionManager.ts
Michael Mainguy d59c7b6e6e Enable per-instance edge rendering for hover effects
Changed EdgesRenderer to work on individual instances instead of source mesh to prevent all instances from highlighting when one is hovered.

- Remove edgesShareWithInstances flag (was causing all instances to highlight)
- Enable/disable edges directly on hovered instance
- Adjust edge width to 0.2 and color to pure white for cleaner appearance
- Remove metadata tracking in favor of checking edgesRenderer directly

This ensures only the specific hovered entity shows visual feedback while maintaining haptic feedback for all interactions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 05:49:54 -06:00

56 lines
2.1 KiB
TypeScript

import {
ActionManager,
Color4,
ExecuteCodeAction,
InstancedMesh,
Observable,
} from "@babylonjs/core";
import log from "loglevel";
import {DefaultScene} from "../../defaultScene";
import {ControllerEventType} from "../../controllers/types/controllerEventType";
import {ControllerEvent} from "../../controllers/types/controllerEvent";
export function buildEntityActionManager(controllerObservable: Observable<ControllerEvent>) {
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;
// Enable edges rendering on the instance itself (not source mesh)
if (!mesh.edgesRenderer) {
mesh.enableEdgesRendering(0.99);
mesh.edgesWidth = .2;
mesh.edgesColor = new Color4(1, 1, 1, 1.0);
}
} catch (e) {
logger.error(e);
}
}
controllerObservable.notifyObservers({
type: ControllerEventType.PULSE,
gripId: evt?.additionalData?.pickResult?.gripTransform?.id
});
logger.debug(evt);
})
);
actionManager.registerAction(
new ExecuteCodeAction(ActionManager.OnPointerOutTrigger, (evt) => {
try {
const mesh = evt.source as InstancedMesh;
// Disable edges rendering on the instance itself
if (mesh?.edgesRenderer) {
mesh.disableEdgesRendering();
}
} catch (e) {
logger.error(e);
}
logger.debug(evt);
})
);
return actionManager;
}