Refactor runtime scene build and viewport host
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import type { Vec3 } from "../core/vector";
|
import type { Vec3 } from "../core/vector";
|
||||||
import type { BoxBrush, BoxFaceId, FaceUvState } from "../document/brushes";
|
import type { BoxBrush, BoxFaceId, FaceUvState } from "../document/brushes";
|
||||||
import type { SceneDocument, WorldSettings } from "../document/scene-document";
|
import type { SceneDocument, WorldSettings } from "../document/scene-document";
|
||||||
|
import { cloneWorldSettings } from "../document/world-settings";
|
||||||
import { getPrimaryPlayerStartEntity } from "../entities/entity-instances";
|
import { getPrimaryPlayerStartEntity } from "../entities/entity-instances";
|
||||||
import { getBoxBrushBounds } from "../geometry/box-brush";
|
import { getBoxBrushBounds } from "../geometry/box-brush";
|
||||||
import { cloneMaterialDef, type MaterialDef } from "../materials/starter-material-library";
|
import { cloneMaterialDef, type MaterialDef } from "../materials/starter-material-library";
|
||||||
@@ -213,18 +214,7 @@ export function buildRuntimeSceneFromDocument(document: SceneDocument, options:
|
|||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
world: {
|
world: cloneWorldSettings(document.world),
|
||||||
background: {
|
|
||||||
...document.world.background
|
|
||||||
},
|
|
||||||
ambientLight: {
|
|
||||||
...document.world.ambientLight
|
|
||||||
},
|
|
||||||
sunLight: {
|
|
||||||
...document.world.sunLight,
|
|
||||||
direction: cloneVec3(document.world.sunLight.direction)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
brushes,
|
brushes,
|
||||||
colliders,
|
colliders,
|
||||||
sceneBounds,
|
sceneBounds,
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import {
|
|||||||
AxesHelper,
|
AxesHelper,
|
||||||
BoxGeometry,
|
BoxGeometry,
|
||||||
CanvasTexture,
|
CanvasTexture,
|
||||||
Color,
|
|
||||||
ConeGeometry,
|
ConeGeometry,
|
||||||
CylinderGeometry,
|
CylinderGeometry,
|
||||||
DirectionalLight,
|
DirectionalLight,
|
||||||
@@ -71,7 +70,7 @@ interface PlayerStartRenderObjects {
|
|||||||
export class ViewportHost {
|
export class ViewportHost {
|
||||||
private readonly scene = new Scene();
|
private readonly scene = new Scene();
|
||||||
private readonly camera = new PerspectiveCamera(60, 1, 0.1, 1000);
|
private readonly camera = new PerspectiveCamera(60, 1, 0.1, 1000);
|
||||||
private readonly renderer = new WebGLRenderer({ antialias: true });
|
private readonly renderer = new WebGLRenderer({ antialias: true, alpha: true });
|
||||||
private readonly cameraTarget = new Vector3(0, 0, 0);
|
private readonly cameraTarget = new Vector3(0, 0, 0);
|
||||||
private readonly cameraOffset = new Vector3();
|
private readonly cameraOffset = new Vector3();
|
||||||
private readonly cameraForward = new Vector3();
|
private readonly cameraForward = new Vector3();
|
||||||
@@ -137,6 +136,7 @@ export class ViewportHost {
|
|||||||
this.scene.add(this.boxCreatePreviewMesh);
|
this.scene.add(this.boxCreatePreviewMesh);
|
||||||
this.scene.add(this.boxCreatePreviewEdges);
|
this.scene.add(this.boxCreatePreviewEdges);
|
||||||
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
||||||
|
this.renderer.setClearAlpha(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
mount(container: HTMLElement) {
|
mount(container: HTMLElement) {
|
||||||
@@ -161,7 +161,7 @@ export class ViewportHost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateWorld(world: WorldSettings) {
|
updateWorld(world: WorldSettings) {
|
||||||
this.scene.background = new Color(world.background.colorHex);
|
this.scene.background = null;
|
||||||
this.ambientLight.color.set(world.ambientLight.colorHex);
|
this.ambientLight.color.set(world.ambientLight.colorHex);
|
||||||
this.ambientLight.intensity = world.ambientLight.intensity;
|
this.ambientLight.intensity = world.ambientLight.intensity;
|
||||||
this.sunLight.color.set(world.sunLight.colorHex);
|
this.sunLight.color.set(world.sunLight.colorHex);
|
||||||
|
|||||||
Reference in New Issue
Block a user