feat: add character studio and aircraft foundation
This commit is contained in:
@@ -87,6 +87,12 @@ import {
|
||||
type OfficeWalker,
|
||||
type OfficeWalkerOptions,
|
||||
} from "./officeWalker.ts";
|
||||
import {
|
||||
createOfficeMediaPresentation,
|
||||
type MediaSurfaceDescriptor,
|
||||
type MediaSurfaceGrant,
|
||||
type OfficeMediaPresentation,
|
||||
} from "../media/presentation.ts";
|
||||
import {
|
||||
createRobotLayer,
|
||||
type RobotLayer,
|
||||
@@ -238,6 +244,11 @@ export interface OfficeScene extends StageScene {
|
||||
depth: Depth;
|
||||
/** Local walk-mode actor, or null when this scene was built as dollhouse-only. */
|
||||
walker: OfficeWalker | null;
|
||||
/** Authored monitor/display props; contains no source locators. */
|
||||
listMediaSurfaces(): MediaSurfaceDescriptor[];
|
||||
/** Bind only a caller-owned texture plus the result of server authorization and opt-in. */
|
||||
bindMediaSurface(screenId: string, grant: MediaSurfaceGrant, texture: THREE.VideoTexture): boolean;
|
||||
clearMediaSurface(screenId: string): boolean;
|
||||
/** The pack's viewpoints, as the thing a legend prints and `flyTo` is keyed on. */
|
||||
views: View[];
|
||||
flyTo(viewId: string): void;
|
||||
@@ -474,6 +485,8 @@ export function createOfficeScene(office: Office, options: OfficeSceneOptions):
|
||||
...(options.registry ? { registry: options.registry } : {}),
|
||||
...(options.colorFor ? { colorFor: options.colorFor } : {}),
|
||||
});
|
||||
const mediaSurfaces: OfficeMediaPresentation = createOfficeMediaPresentation(plan, furnishings.group);
|
||||
scene.add(mediaSurfaces.group);
|
||||
|
||||
/**
|
||||
* The ceiling, made switchable.
|
||||
@@ -765,6 +778,9 @@ export function createOfficeScene(office: Office, options: OfficeSceneOptions):
|
||||
plan,
|
||||
depth,
|
||||
walker: officeWalker,
|
||||
listMediaSurfaces: () => mediaSurfaces.list(),
|
||||
bindMediaSurface: (screenId, grant, texture) => mediaSurfaces.bind(screenId, grant, texture),
|
||||
clearMediaSurface: (screenId) => mediaSurfaces.clear(screenId),
|
||||
views,
|
||||
// A public office anchors nothing, because it has nobody to anchor. The
|
||||
// empty map is this scene's own rather than a shared module-level one: an
|
||||
@@ -831,6 +847,7 @@ export function createOfficeScene(office: Office, options: OfficeSceneOptions):
|
||||
luminaires.tick(dt);
|
||||
},
|
||||
dispose() {
|
||||
mediaSurfaces.dispose();
|
||||
officeWalker?.dispose();
|
||||
robots?.dispose();
|
||||
luminaires.dispose();
|
||||
|
||||
Reference in New Issue
Block a user