refactored menu manager positioning.

This commit is contained in:
Michael Mainguy 2023-08-01 15:00:54 -05:00
parent 8412b6f378
commit f1d974dd1d
2 changed files with 60 additions and 49 deletions

View File

@ -15,7 +15,7 @@ import {MeshConverter} from "../diagram/meshConverter";
import log from "loglevel";
import {InputTextView} from "../information/inputTextView";
import {DiaSounds} from "../util/diaSounds";
import {Cameras} from "../integration/ring/cameras";
import {CameraHelper} from "../util/cameraHelper";
export class EditMenu {
private state: BmenuState = BmenuState.NONE;
@ -60,7 +60,6 @@ export class EditMenu {
DiaSounds.instance.exit.play();
this.manager.dispose();
this.manager = null;
} else {
DiaSounds.instance.enter.play();
this.manager = new GUI3DManager(this.scene);
@ -69,15 +68,9 @@ export class EditMenu {
panel.addControl(this.makeButton("Modify", "modify"));
panel.addControl(this.makeButton("Remove", "remove"));
panel.addControl(this.makeButton("Add Label", "label"));
panel.addControl(this.makeButton("Add Ring Cameras", "addRingCameras"));
//panel.addControl(this.makeButton("Add Ring Cameras", "addRingCameras"));
this.manager.controlScaling = .5;
const offset = new Vector3(0, -.2, 3);
offset.applyRotationQuaternionInPlace(this.scene.activeCamera.absoluteRotation);
panel.node.position =
this.scene.activeCamera.globalPosition.add(offset);
panel.node.lookAt(this.scene.activeCamera.globalPosition);
panel.node.rotation.y = panel.node.rotation.y + Math.PI;
CameraHelper.setMenuPosition(panel.node, this.scene);
}
}
@ -113,15 +106,28 @@ export class EditMenu {
}
switch (this.state) {
case BmenuState.REMOVING:
this.remove(mesh);
break;
case BmenuState.MODIFYING:
this.setModify(mesh);
break;
case BmenuState.LABELING:
this.setLabeling(mesh);
break;
}
}
private remove(mesh: AbstractMesh) {
log.debug("removing " + mesh?.id);
const event: DiagramEvent = {
type: DiagramEventType.REMOVE,
entity:
MeshConverter.toDiagramEntity(pointerInfo.pickInfo.pickedMesh)
MeshConverter.toDiagramEntity(mesh)
}
this.diagramManager.onDiagramEventObservable.notifyObservers(event);
break;
case BmenuState.MODIFYING:
}
private setModify(mesh: AbstractMesh) {
if (mesh.metadata?.template &&
mesh.parent?.parent?.id != "toolbox") {
if (this.gizmoManager.gizmos.boundingBoxGizmo.attachedMesh?.id == mesh.id) {
@ -134,13 +140,13 @@ export class EditMenu {
entity: MeshConverter.toDiagramEntity(mesh),
}
)
log.debug(mesh.scaling);
});
}
}
break;
case BmenuState.LABELING:
}
private setLabeling(mesh: AbstractMesh) {
log.debug("labeling " + mesh.id);
let text = "";
if (mesh?.metadata?.text) {
@ -152,8 +158,7 @@ export class EditMenu {
this.persist(mesh, value.text);
MeshConverter.updateTextNode(mesh, value.text);
});
break;
}
}
private handleClick(_info, state) {
@ -167,9 +172,6 @@ export class EditMenu {
case "label":
this.state = BmenuState.LABELING;
break;
case "addRingCameras":
const cameras = new Cameras(this.scene, this.xr.sessionManager);
break;
default:
log.error("Unknown button");
return;

View File

@ -1,4 +1,4 @@
import {Scene, Vector3} from "@babylonjs/core";
import {Scene, TransformNode, Vector3} from "@babylonjs/core";
export class CameraHelper {
public static getFrontPosition(distance: number, scene: Scene): Vector3 {
@ -6,4 +6,13 @@ export class CameraHelper {
offset.applyRotationQuaternionInPlace(scene.activeCamera.absoluteRotation);
return scene.activeCamera.globalPosition.add(offset);
}
public static setMenuPosition(node: TransformNode, scene: Scene) {
node.position =
CameraHelper.getFrontPosition(2, scene);
node.lookAt(scene.activeCamera.globalPosition);
node.rotation.y = node.rotation.y + Math.PI;
node.position.y += .2;
}
}