Update migrate-scene-document.ts with new box brush volume settings
This commit is contained in:
@@ -40,13 +40,18 @@ import {
|
||||
} from "../interactions/interaction-links";
|
||||
import {
|
||||
BOX_VERTEX_IDS,
|
||||
BOX_BRUSH_VOLUME_MODES,
|
||||
createBoxBrush,
|
||||
createDefaultBoxBrushGeometry,
|
||||
createDefaultBoxBrushFogSettings,
|
||||
createDefaultBoxBrushWaterSettings,
|
||||
createDefaultFaceUvState,
|
||||
DEFAULT_BOX_BRUSH_ROTATION_DEGREES,
|
||||
isBoxBrushVolumeMode,
|
||||
isBoxFaceId,
|
||||
isFaceUvRotationQuarterTurns,
|
||||
normalizeBrushName,
|
||||
type BoxBrushVolumeSettings,
|
||||
type BoxBrushFaces,
|
||||
type BrushFace,
|
||||
type FaceUvState
|
||||
@@ -67,6 +72,7 @@ import {
|
||||
SPATIAL_AUDIO_SCENE_DOCUMENT_VERSION,
|
||||
SCENE_DOCUMENT_VERSION,
|
||||
TRIGGER_ACTION_TARGET_FOUNDATION_SCENE_DOCUMENT_VERSION,
|
||||
WHITEBOX_BOX_VOLUME_SCENE_DOCUMENT_VERSION,
|
||||
WHITEBOX_FLOAT_TRANSFORM_SCENE_DOCUMENT_VERSION,
|
||||
WHITEBOX_GEOMETRY_SCENE_DOCUMENT_VERSION,
|
||||
WORLD_ENVIRONMENT_SCENE_DOCUMENT_VERSION,
|
||||
@@ -74,6 +80,7 @@ import {
|
||||
} from "./scene-document";
|
||||
import {
|
||||
createDefaultAdvancedRenderingSettings,
|
||||
isBoxVolumeRenderPath,
|
||||
isAdvancedRenderingShadowMapSize,
|
||||
isAdvancedRenderingShadowType,
|
||||
isAdvancedRenderingToneMappingMode,
|
||||
@@ -262,6 +269,8 @@ function readAdvancedRenderingSettings(value: unknown): AdvancedRenderingSetting
|
||||
defaults.toneMapping.mode,
|
||||
isAdvancedRenderingToneMappingMode
|
||||
);
|
||||
const fogPath = readOptionalAllowedValue(value.fogPath, "world.advancedRendering.fogPath", defaults.fogPath, isBoxVolumeRenderPath);
|
||||
const waterPath = readOptionalAllowedValue(value.waterPath, "world.advancedRendering.waterPath", defaults.waterPath, isBoxVolumeRenderPath);
|
||||
|
||||
return {
|
||||
enabled: readOptionalBoolean(value.enabled, "world.advancedRendering.enabled", defaults.enabled),
|
||||
@@ -332,6 +341,68 @@ function readAdvancedRenderingSettings(value: unknown): AdvancedRenderingSetting
|
||||
"world.advancedRendering.depthOfField.bokehScale",
|
||||
defaults.depthOfField.bokehScale
|
||||
)
|
||||
},
|
||||
fogPath,
|
||||
waterPath
|
||||
};
|
||||
}
|
||||
|
||||
function readBoxBrushVolumeSettings(value: unknown, label: string): BoxBrushVolumeSettings {
|
||||
if (value === undefined) {
|
||||
return {
|
||||
mode: "none"
|
||||
};
|
||||
}
|
||||
|
||||
if (!isRecord(value)) {
|
||||
throw new Error(`${label} must be an object.`);
|
||||
}
|
||||
|
||||
const mode = readOptionalAllowedValue(value.mode, `${label}.mode`, "none", isBoxBrushVolumeMode);
|
||||
|
||||
if (mode === "none") {
|
||||
return {
|
||||
mode: "none"
|
||||
};
|
||||
}
|
||||
|
||||
if (mode === "water") {
|
||||
const defaults = createDefaultBoxBrushWaterSettings();
|
||||
|
||||
if (value.water !== undefined && !isRecord(value.water)) {
|
||||
throw new Error(`${label}.water must be an object.`);
|
||||
}
|
||||
|
||||
const water = (value.water ?? {}) as Record<string, unknown>;
|
||||
|
||||
return {
|
||||
mode: "water",
|
||||
water: {
|
||||
colorHex: water.colorHex === undefined ? defaults.colorHex : expectHexColor(water.colorHex, `${label}.water.colorHex`),
|
||||
surfaceOpacity: readOptionalNonNegativeFiniteNumber(
|
||||
water.surfaceOpacity,
|
||||
`${label}.water.surfaceOpacity`,
|
||||
defaults.surfaceOpacity
|
||||
),
|
||||
waveStrength: readOptionalNonNegativeFiniteNumber(water.waveStrength, `${label}.water.waveStrength`, defaults.waveStrength)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const defaults = createDefaultBoxBrushFogSettings();
|
||||
|
||||
if (value.fog !== undefined && !isRecord(value.fog)) {
|
||||
throw new Error(`${label}.fog must be an object.`);
|
||||
}
|
||||
|
||||
const fog = (value.fog ?? {}) as Record<string, unknown>;
|
||||
|
||||
return {
|
||||
mode: "fog",
|
||||
fog: {
|
||||
colorHex: fog.colorHex === undefined ? defaults.colorHex : expectHexColor(fog.colorHex, `${label}.fog.colorHex`),
|
||||
density: readOptionalNonNegativeFiniteNumber(fog.density, `${label}.fog.density`, defaults.density),
|
||||
padding: readOptionalNonNegativeFiniteNumber(fog.padding, `${label}.fog.padding`, defaults.padding)
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -850,6 +921,7 @@ function readBrushes(
|
||||
size,
|
||||
geometry: readBoxBrushGeometry(brushValue.geometry, `brushes.${brushId}.geometry`, size),
|
||||
faces: readBoxBrushFaces(brushValue.faces, `brushes.${brushId}.faces`, materials, allowMissingUvState),
|
||||
volume: readBoxBrushVolumeSettings(brushValue.volume, `brushes.${brushId}.volume`),
|
||||
layerId: expectOptionalString(brushValue.layerId, `brushes.${brushId}.layerId`),
|
||||
groupId: expectOptionalString(brushValue.groupId, `brushes.${brushId}.groupId`)
|
||||
});
|
||||
@@ -1630,6 +1702,7 @@ export function migrateSceneDocument(source: unknown): SceneDocument {
|
||||
}
|
||||
|
||||
if (
|
||||
source.version !== WHITEBOX_BOX_VOLUME_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== WHITEBOX_FLOAT_TRANSFORM_SCENE_DOCUMENT_VERSION &&
|
||||
source.version !== WHITEBOX_GEOMETRY_SCENE_DOCUMENT_VERSION
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user