Update viewport-host.ts with new light and asset types
This commit is contained in:
@@ -13,14 +13,17 @@ import {
|
|||||||
LineSegments,
|
LineSegments,
|
||||||
Mesh,
|
Mesh,
|
||||||
MeshStandardMaterial,
|
MeshStandardMaterial,
|
||||||
|
Object3D,
|
||||||
Plane,
|
Plane,
|
||||||
PerspectiveCamera,
|
PerspectiveCamera,
|
||||||
|
PointLight,
|
||||||
|
Quaternion,
|
||||||
Raycaster,
|
Raycaster,
|
||||||
Scene,
|
Scene,
|
||||||
type Object3D,
|
|
||||||
SphereGeometry,
|
SphereGeometry,
|
||||||
Spherical,
|
Spherical,
|
||||||
TorusGeometry,
|
TorusGeometry,
|
||||||
|
SpotLight,
|
||||||
Vector2,
|
Vector2,
|
||||||
Vector3,
|
Vector3,
|
||||||
WebGLRenderer
|
WebGLRenderer
|
||||||
@@ -31,10 +34,16 @@ import type { ToolMode } from "../core/tool-mode";
|
|||||||
import type { Vec3 } from "../core/vector";
|
import type { Vec3 } from "../core/vector";
|
||||||
import { createModelInstanceRenderGroup, disposeModelInstance } from "../assets/model-instance-rendering";
|
import { createModelInstanceRenderGroup, disposeModelInstance } from "../assets/model-instance-rendering";
|
||||||
import type { LoadedModelAsset } from "../assets/gltf-model-import";
|
import type { LoadedModelAsset } from "../assets/gltf-model-import";
|
||||||
|
import type { LoadedImageAsset } from "../assets/image-assets";
|
||||||
import type { ProjectAssetRecord } from "../assets/project-assets";
|
import type { ProjectAssetRecord } from "../assets/project-assets";
|
||||||
import { getModelInstances } from "../assets/model-instances";
|
import { getModelInstances } from "../assets/model-instances";
|
||||||
import type { SceneDocument, WorldSettings } from "../document/scene-document";
|
import type { SceneDocument, WorldSettings } from "../document/scene-document";
|
||||||
import { getEntityInstances, type EntityInstance } from "../entities/entity-instances";
|
import {
|
||||||
|
getEntityInstances,
|
||||||
|
type EntityInstance,
|
||||||
|
type PointLightEntity,
|
||||||
|
type SpotLightEntity
|
||||||
|
} from "../entities/entity-instances";
|
||||||
import { BOX_FACE_IDS, DEFAULT_BOX_BRUSH_SIZE, type BoxBrush, type BoxFaceId } from "../document/brushes";
|
import { BOX_FACE_IDS, DEFAULT_BOX_BRUSH_SIZE, type BoxBrush, type BoxFaceId } from "../document/brushes";
|
||||||
import { applyBoxBrushFaceUvsToGeometry } from "../geometry/box-face-uvs";
|
import { applyBoxBrushFaceUvsToGeometry } from "../geometry/box-face-uvs";
|
||||||
import { DEFAULT_GRID_SIZE, snapValueToGrid } from "../geometry/grid-snapping";
|
import { DEFAULT_GRID_SIZE, snapValueToGrid } from "../geometry/grid-snapping";
|
||||||
@@ -82,6 +91,10 @@ interface EntityRenderObjects {
|
|||||||
meshes: Mesh[];
|
meshes: Mesh[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface LocalLightRenderObjects {
|
||||||
|
group: Group;
|
||||||
|
}
|
||||||
|
|
||||||
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);
|
||||||
@@ -94,6 +107,7 @@ export class ViewportHost {
|
|||||||
private readonly cameraSpherical = new Spherical();
|
private readonly cameraSpherical = new Spherical();
|
||||||
private readonly ambientLight = new AmbientLight();
|
private readonly ambientLight = new AmbientLight();
|
||||||
private readonly sunLight = new DirectionalLight();
|
private readonly sunLight = new DirectionalLight();
|
||||||
|
private readonly localLightGroup = new Group();
|
||||||
private readonly brushGroup = new Group();
|
private readonly brushGroup = new Group();
|
||||||
private readonly entityGroup = new Group();
|
private readonly entityGroup = new Group();
|
||||||
private readonly modelGroup = new Group();
|
private readonly modelGroup = new Group();
|
||||||
@@ -103,14 +117,17 @@ export class ViewportHost {
|
|||||||
private readonly boxCreatePlane = new Plane(new Vector3(0, 1, 0), 0);
|
private readonly boxCreatePlane = new Plane(new Vector3(0, 1, 0), 0);
|
||||||
private readonly brushRenderObjects = new Map<string, BrushRenderObjects>();
|
private readonly brushRenderObjects = new Map<string, BrushRenderObjects>();
|
||||||
private readonly entityRenderObjects = new Map<string, EntityRenderObjects>();
|
private readonly entityRenderObjects = new Map<string, EntityRenderObjects>();
|
||||||
|
private readonly localLightRenderObjects = new Map<string, LocalLightRenderObjects>();
|
||||||
private readonly modelRenderObjects = new Map<string, Group>();
|
private readonly modelRenderObjects = new Map<string, Group>();
|
||||||
private readonly materialTextureCache = new Map<string, CachedMaterialTexture>();
|
private readonly materialTextureCache = new Map<string, CachedMaterialTexture>();
|
||||||
private currentDocument: SceneDocument | null = null;
|
private currentDocument: SceneDocument | null = null;
|
||||||
|
private currentWorld: WorldSettings | null = null;
|
||||||
private currentSelection: EditorSelection = {
|
private currentSelection: EditorSelection = {
|
||||||
kind: "none"
|
kind: "none"
|
||||||
};
|
};
|
||||||
private projectAssets: Record<string, ProjectAssetRecord> = {};
|
private projectAssets: Record<string, ProjectAssetRecord> = {};
|
||||||
private loadedModelAssets: Record<string, LoadedModelAsset> = {};
|
private loadedModelAssets: Record<string, LoadedModelAsset> = {};
|
||||||
|
private loadedImageAssets: Record<string, LoadedImageAsset> = {};
|
||||||
private readonly boxCreatePreviewMesh = new Mesh(
|
private readonly boxCreatePreviewMesh = new Mesh(
|
||||||
new BoxGeometry(DEFAULT_BOX_BRUSH_SIZE.x, DEFAULT_BOX_BRUSH_SIZE.y, DEFAULT_BOX_BRUSH_SIZE.z),
|
new BoxGeometry(DEFAULT_BOX_BRUSH_SIZE.x, DEFAULT_BOX_BRUSH_SIZE.y, DEFAULT_BOX_BRUSH_SIZE.z),
|
||||||
new MeshStandardMaterial({
|
new MeshStandardMaterial({
|
||||||
@@ -152,6 +169,7 @@ export class ViewportHost {
|
|||||||
this.scene.add(axesHelper);
|
this.scene.add(axesHelper);
|
||||||
this.scene.add(this.ambientLight);
|
this.scene.add(this.ambientLight);
|
||||||
this.scene.add(this.sunLight);
|
this.scene.add(this.sunLight);
|
||||||
|
this.scene.add(this.localLightGroup);
|
||||||
this.scene.add(this.brushGroup);
|
this.scene.add(this.brushGroup);
|
||||||
this.scene.add(this.entityGroup);
|
this.scene.add(this.entityGroup);
|
||||||
this.scene.add(this.modelGroup);
|
this.scene.add(this.modelGroup);
|
||||||
|
|||||||
Reference in New Issue
Block a user