Rename rebuildPlayerStartMarkers to rebuildEntityMarkers and update related methods
This commit is contained in:
@@ -181,7 +181,7 @@ export class ViewportHost {
|
|||||||
|
|
||||||
updateDocument(document: SceneDocument, selection: EditorSelection) {
|
updateDocument(document: SceneDocument, selection: EditorSelection) {
|
||||||
this.rebuildBrushMeshes(document, selection);
|
this.rebuildBrushMeshes(document, selection);
|
||||||
this.rebuildPlayerStartMarkers(document, selection);
|
this.rebuildEntityMarkers(document, selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
setBrushSelectionChangeHandler(handler: ((selection: EditorSelection) => void) | null) {
|
setBrushSelectionChangeHandler(handler: ((selection: EditorSelection) => void) | null) {
|
||||||
@@ -242,7 +242,7 @@ export class ViewportHost {
|
|||||||
this.renderer.domElement.removeEventListener("wheel", this.handleWheel);
|
this.renderer.domElement.removeEventListener("wheel", this.handleWheel);
|
||||||
this.renderer.domElement.removeEventListener("auxclick", this.handleAuxClick);
|
this.renderer.domElement.removeEventListener("auxclick", this.handleAuxClick);
|
||||||
this.clearBrushMeshes();
|
this.clearBrushMeshes();
|
||||||
this.clearPlayerStartMarkers();
|
this.clearEntityMarkers();
|
||||||
this.boxCreatePreviewHandler = null;
|
this.boxCreatePreviewHandler = null;
|
||||||
this.setBoxCreatePreview(null);
|
this.setBoxCreatePreview(null);
|
||||||
|
|
||||||
@@ -321,64 +321,15 @@ export class ViewportHost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private rebuildPlayerStartMarkers(document: SceneDocument, selection: EditorSelection) {
|
private rebuildEntityMarkers(document: SceneDocument, selection: EditorSelection) {
|
||||||
this.clearPlayerStartMarkers();
|
this.clearEntityMarkers();
|
||||||
|
|
||||||
for (const playerStart of getPlayerStartEntities(document.entities)) {
|
for (const entity of getEntityInstances(document.entities)) {
|
||||||
const selected = selection.kind === "entities" && selection.ids.includes(playerStart.id);
|
const selected = selection.kind === "entities" && selection.ids.includes(entity.id);
|
||||||
const markerColor = selected ? PLAYER_START_SELECTED_COLOR : PLAYER_START_COLOR;
|
const renderObjects = this.createEntityRenderObjects(entity, selected);
|
||||||
const group = new Group();
|
|
||||||
group.position.set(playerStart.position.x, playerStart.position.y, playerStart.position.z);
|
|
||||||
group.rotation.y = (playerStart.yawDegrees * Math.PI) / 180;
|
|
||||||
|
|
||||||
const base = new Mesh(
|
this.entityGroup.add(renderObjects.group);
|
||||||
new CylinderGeometry(0.22, 0.22, 0.05, 18),
|
this.entityRenderObjects.set(entity.id, renderObjects);
|
||||||
new MeshStandardMaterial({
|
|
||||||
color: markerColor,
|
|
||||||
emissive: markerColor,
|
|
||||||
emissiveIntensity: selected ? 0.18 : 0.08,
|
|
||||||
roughness: 0.35,
|
|
||||||
metalness: 0.08
|
|
||||||
})
|
|
||||||
);
|
|
||||||
base.position.y = 0.025;
|
|
||||||
|
|
||||||
const body = new Mesh(
|
|
||||||
new BoxGeometry(0.12, 0.12, 0.46),
|
|
||||||
new MeshStandardMaterial({
|
|
||||||
color: markerColor,
|
|
||||||
emissive: markerColor,
|
|
||||||
emissiveIntensity: selected ? 0.14 : 0.06,
|
|
||||||
roughness: 0.42,
|
|
||||||
metalness: 0.02
|
|
||||||
})
|
|
||||||
);
|
|
||||||
body.position.set(0, 0.16, 0.1);
|
|
||||||
|
|
||||||
const arrowHead = new Mesh(
|
|
||||||
new ConeGeometry(0.12, 0.28, 14),
|
|
||||||
new MeshStandardMaterial({
|
|
||||||
color: markerColor,
|
|
||||||
emissive: markerColor,
|
|
||||||
emissiveIntensity: selected ? 0.2 : 0.08,
|
|
||||||
roughness: 0.38,
|
|
||||||
metalness: 0.03
|
|
||||||
})
|
|
||||||
);
|
|
||||||
arrowHead.rotation.x = Math.PI * 0.5;
|
|
||||||
arrowHead.position.set(0, 0.16, 0.42);
|
|
||||||
|
|
||||||
for (const mesh of [base, body, arrowHead]) {
|
|
||||||
mesh.userData.entityId = playerStart.id;
|
|
||||||
mesh.userData.entityKind = "playerStart";
|
|
||||||
group.add(mesh);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.entityGroup.add(group);
|
|
||||||
this.playerStartRenderObjects.set(playerStart.id, {
|
|
||||||
group,
|
|
||||||
meshes: [base, body, arrowHead]
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,8 +393,8 @@ export class ViewportHost {
|
|||||||
this.brushRenderObjects.clear();
|
this.brushRenderObjects.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private clearPlayerStartMarkers() {
|
private clearEntityMarkers() {
|
||||||
for (const renderObjects of this.playerStartRenderObjects.values()) {
|
for (const renderObjects of this.entityRenderObjects.values()) {
|
||||||
this.entityGroup.remove(renderObjects.group);
|
this.entityGroup.remove(renderObjects.group);
|
||||||
|
|
||||||
for (const mesh of renderObjects.meshes) {
|
for (const mesh of renderObjects.meshes) {
|
||||||
@@ -459,7 +410,7 @@ export class ViewportHost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.playerStartRenderObjects.clear();
|
this.entityRenderObjects.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private resize() {
|
private resize() {
|
||||||
@@ -518,7 +469,7 @@ export class ViewportHost {
|
|||||||
|
|
||||||
const hits = this.raycaster.intersectObjects(
|
const hits = this.raycaster.intersectObjects(
|
||||||
[
|
[
|
||||||
...Array.from(this.playerStartRenderObjects.values(), (renderObjects) => renderObjects.group),
|
...Array.from(this.entityRenderObjects.values(), (renderObjects) => renderObjects.group),
|
||||||
...Array.from(this.brushRenderObjects.values(), (renderObjects) => renderObjects.mesh)
|
...Array.from(this.brushRenderObjects.values(), (renderObjects) => renderObjects.mesh)
|
||||||
],
|
],
|
||||||
true
|
true
|
||||||
|
|||||||
Reference in New Issue
Block a user