feat(map): adopt DC Default scene
This commit is contained in:
@@ -19,10 +19,44 @@ export interface MapCamera {
|
||||
|
||||
export interface MapVisualSettings {
|
||||
atmosphereEnabled: boolean;
|
||||
lightingEnabled: boolean;
|
||||
atmosphereHue: number;
|
||||
atmosphereSaturation: number;
|
||||
atmosphereBrightness: number;
|
||||
fogEnabled: boolean;
|
||||
fogDensity: number;
|
||||
sunEnabled: boolean;
|
||||
sunHour: number;
|
||||
sunIntensity: number;
|
||||
shadowsEnabled: boolean;
|
||||
monochromeEnabled: boolean;
|
||||
monochromeColor: string;
|
||||
imageryBrightness: number;
|
||||
imageryContrast: number;
|
||||
imagerySaturation: number;
|
||||
imageryGamma: number;
|
||||
imageryHue: number;
|
||||
imageryAlpha: number;
|
||||
globeColor: string;
|
||||
backgroundColor: string;
|
||||
terrainExaggeration: number;
|
||||
buildingsColor: string;
|
||||
buildingsOpacity: number;
|
||||
buildingsMaximumScreenSpaceError: number;
|
||||
gridLodEnabled: boolean;
|
||||
gridHeightMeters: number;
|
||||
gridLod1MaxHeightKm: number;
|
||||
gridLod1StepKm: number;
|
||||
gridLod2MaxHeightKm: number;
|
||||
gridLod2StepKm: number;
|
||||
gridLod3StepKm: number;
|
||||
gridRadiusKm: number;
|
||||
gridLineWidth: number;
|
||||
gridColor: string;
|
||||
gridOpacity: number;
|
||||
gridDotsEnabled: boolean;
|
||||
gridDotsSize: number;
|
||||
gridDotsColor: string;
|
||||
gridDotsOpacity: number;
|
||||
cameraAnimationEnabled: boolean;
|
||||
}
|
||||
|
||||
@@ -69,16 +103,57 @@ export function defaultMapViewDocument(): MapViewDocument {
|
||||
return {
|
||||
revision: 0,
|
||||
view: {
|
||||
camera: null,
|
||||
camera: {
|
||||
longitude: 37.618423,
|
||||
latitude: 55.751244,
|
||||
height: 40_000,
|
||||
heading: 0,
|
||||
pitch: -51.56620156177409,
|
||||
roll: 0,
|
||||
},
|
||||
visualSettings: {
|
||||
atmosphereEnabled: true,
|
||||
lightingEnabled: true,
|
||||
atmosphereEnabled: false,
|
||||
atmosphereHue: 0,
|
||||
atmosphereSaturation: 0,
|
||||
atmosphereBrightness: 0,
|
||||
fogEnabled: true,
|
||||
fogDensity: 2,
|
||||
sunEnabled: true,
|
||||
sunHour: 12,
|
||||
sunIntensity: 200,
|
||||
shadowsEnabled: true,
|
||||
monochromeEnabled: false,
|
||||
monochromeColor: "#15151b",
|
||||
imageryBrightness: 118,
|
||||
imageryContrast: 102,
|
||||
imagerySaturation: 0,
|
||||
imageryGamma: 57,
|
||||
imageryHue: 13,
|
||||
imageryAlpha: 27,
|
||||
globeColor: "#15151b",
|
||||
backgroundColor: "#08090d",
|
||||
terrainExaggeration: 1,
|
||||
buildingsMaximumScreenSpaceError: 16,
|
||||
buildingsColor: "#a27aff",
|
||||
buildingsOpacity: 1,
|
||||
buildingsMaximumScreenSpaceError: 4,
|
||||
gridLodEnabled: true,
|
||||
gridHeightMeters: 500,
|
||||
gridLod1MaxHeightKm: 10,
|
||||
gridLod1StepKm: 1,
|
||||
gridLod2MaxHeightKm: 50,
|
||||
gridLod2StepKm: 5,
|
||||
gridLod3StepKm: 25,
|
||||
gridRadiusKm: 40,
|
||||
gridLineWidth: 4,
|
||||
gridColor: "#f5f5f5",
|
||||
gridOpacity: 12,
|
||||
gridDotsEnabled: true,
|
||||
gridDotsSize: 7,
|
||||
gridDotsColor: "#ffffff",
|
||||
gridDotsOpacity: 58,
|
||||
cameraAnimationEnabled: true,
|
||||
},
|
||||
mapHeight: 720,
|
||||
mapHeight: 694,
|
||||
inspectorOpenSections: [],
|
||||
cacheIntent: {
|
||||
enabled: true,
|
||||
@@ -89,7 +164,7 @@ export function defaultMapViewDocument(): MapViewDocument {
|
||||
imagery: true,
|
||||
terrain: true,
|
||||
buildings: true,
|
||||
grid: false,
|
||||
grid: true,
|
||||
targets: true,
|
||||
},
|
||||
},
|
||||
@@ -99,7 +174,7 @@ export function defaultMapViewDocument(): MapViewDocument {
|
||||
export function decodeMapViewDocument(value: unknown): MapViewDocument {
|
||||
const document = requireRecord(value, "map view");
|
||||
requireExactKeys(document, ["schema_version", "revision", "view"], "map view");
|
||||
if (document.schema_version !== "missioncore.map-view/v1") {
|
||||
if (document.schema_version !== "missioncore.map-view/v2") {
|
||||
throw new Error("Версия сохранённого состояния карты не поддерживается.");
|
||||
}
|
||||
return {
|
||||
@@ -124,11 +199,45 @@ export function encodeMapViewPut(document: MapViewDocument): unknown {
|
||||
: null,
|
||||
visual_settings: {
|
||||
atmosphere_enabled: document.view.visualSettings.atmosphereEnabled,
|
||||
lighting_enabled: document.view.visualSettings.lightingEnabled,
|
||||
atmosphere_hue: document.view.visualSettings.atmosphereHue,
|
||||
atmosphere_saturation: document.view.visualSettings.atmosphereSaturation,
|
||||
atmosphere_brightness: document.view.visualSettings.atmosphereBrightness,
|
||||
fog_enabled: document.view.visualSettings.fogEnabled,
|
||||
fog_density: document.view.visualSettings.fogDensity,
|
||||
sun_enabled: document.view.visualSettings.sunEnabled,
|
||||
sun_hour: document.view.visualSettings.sunHour,
|
||||
sun_intensity: document.view.visualSettings.sunIntensity,
|
||||
shadows_enabled: document.view.visualSettings.shadowsEnabled,
|
||||
monochrome_enabled: document.view.visualSettings.monochromeEnabled,
|
||||
monochrome_color: document.view.visualSettings.monochromeColor,
|
||||
imagery_brightness: document.view.visualSettings.imageryBrightness,
|
||||
imagery_contrast: document.view.visualSettings.imageryContrast,
|
||||
imagery_saturation: document.view.visualSettings.imagerySaturation,
|
||||
imagery_gamma: document.view.visualSettings.imageryGamma,
|
||||
imagery_hue: document.view.visualSettings.imageryHue,
|
||||
imagery_alpha: document.view.visualSettings.imageryAlpha,
|
||||
globe_color: document.view.visualSettings.globeColor,
|
||||
background_color: document.view.visualSettings.backgroundColor,
|
||||
terrain_exaggeration: document.view.visualSettings.terrainExaggeration,
|
||||
buildings_color: document.view.visualSettings.buildingsColor,
|
||||
buildings_opacity: document.view.visualSettings.buildingsOpacity,
|
||||
buildings_maximum_screen_space_error:
|
||||
document.view.visualSettings.buildingsMaximumScreenSpaceError,
|
||||
grid_lod_enabled: document.view.visualSettings.gridLodEnabled,
|
||||
grid_height_meters: document.view.visualSettings.gridHeightMeters,
|
||||
grid_lod_1_max_height_km: document.view.visualSettings.gridLod1MaxHeightKm,
|
||||
grid_lod_1_step_km: document.view.visualSettings.gridLod1StepKm,
|
||||
grid_lod_2_max_height_km: document.view.visualSettings.gridLod2MaxHeightKm,
|
||||
grid_lod_2_step_km: document.view.visualSettings.gridLod2StepKm,
|
||||
grid_lod_3_step_km: document.view.visualSettings.gridLod3StepKm,
|
||||
grid_radius_km: document.view.visualSettings.gridRadiusKm,
|
||||
grid_line_width: document.view.visualSettings.gridLineWidth,
|
||||
grid_color: document.view.visualSettings.gridColor,
|
||||
grid_opacity: document.view.visualSettings.gridOpacity,
|
||||
grid_dots_enabled: document.view.visualSettings.gridDotsEnabled,
|
||||
grid_dots_size: document.view.visualSettings.gridDotsSize,
|
||||
grid_dots_color: document.view.visualSettings.gridDotsColor,
|
||||
grid_dots_opacity: document.view.visualSettings.gridDotsOpacity,
|
||||
camera_animation_enabled: document.view.visualSettings.cameraAnimationEnabled,
|
||||
},
|
||||
map_height: document.view.mapHeight,
|
||||
@@ -228,29 +337,175 @@ function decodeVisualSettings(value: unknown): MapVisualSettings {
|
||||
settings,
|
||||
[
|
||||
"atmosphere_enabled",
|
||||
"lighting_enabled",
|
||||
"atmosphere_hue",
|
||||
"atmosphere_saturation",
|
||||
"atmosphere_brightness",
|
||||
"fog_enabled",
|
||||
"fog_density",
|
||||
"sun_enabled",
|
||||
"sun_hour",
|
||||
"sun_intensity",
|
||||
"shadows_enabled",
|
||||
"monochrome_enabled",
|
||||
"monochrome_color",
|
||||
"imagery_brightness",
|
||||
"imagery_contrast",
|
||||
"imagery_saturation",
|
||||
"imagery_gamma",
|
||||
"imagery_hue",
|
||||
"imagery_alpha",
|
||||
"globe_color",
|
||||
"background_color",
|
||||
"terrain_exaggeration",
|
||||
"buildings_color",
|
||||
"buildings_opacity",
|
||||
"buildings_maximum_screen_space_error",
|
||||
"grid_lod_enabled",
|
||||
"grid_height_meters",
|
||||
"grid_lod_1_max_height_km",
|
||||
"grid_lod_1_step_km",
|
||||
"grid_lod_2_max_height_km",
|
||||
"grid_lod_2_step_km",
|
||||
"grid_lod_3_step_km",
|
||||
"grid_radius_km",
|
||||
"grid_line_width",
|
||||
"grid_color",
|
||||
"grid_opacity",
|
||||
"grid_dots_enabled",
|
||||
"grid_dots_size",
|
||||
"grid_dots_color",
|
||||
"grid_dots_opacity",
|
||||
"camera_animation_enabled",
|
||||
],
|
||||
"map view.view.visual_settings",
|
||||
);
|
||||
return {
|
||||
atmosphereEnabled: requireBoolean(settings.atmosphere_enabled, "atmosphere_enabled"),
|
||||
lightingEnabled: requireBoolean(settings.lighting_enabled, "lighting_enabled"),
|
||||
atmosphereHue: requireNumber(settings.atmosphere_hue, "atmosphere_hue", -100, 100),
|
||||
atmosphereSaturation: requireNumber(
|
||||
settings.atmosphere_saturation,
|
||||
"atmosphere_saturation",
|
||||
-100,
|
||||
100,
|
||||
),
|
||||
atmosphereBrightness: requireNumber(
|
||||
settings.atmosphere_brightness,
|
||||
"atmosphere_brightness",
|
||||
-100,
|
||||
100,
|
||||
),
|
||||
fogEnabled: requireBoolean(settings.fog_enabled, "fog_enabled"),
|
||||
fogDensity: requireNumber(settings.fog_density, "fog_density", 0, 100),
|
||||
sunEnabled: requireBoolean(settings.sun_enabled, "sun_enabled"),
|
||||
sunHour: requireNumber(settings.sun_hour, "sun_hour", 0, 24),
|
||||
sunIntensity: requireNumber(settings.sun_intensity, "sun_intensity", 0, 200),
|
||||
shadowsEnabled: requireBoolean(settings.shadows_enabled, "shadows_enabled"),
|
||||
monochromeEnabled: requireBoolean(settings.monochrome_enabled, "monochrome_enabled"),
|
||||
monochromeColor: requireHexColor(settings.monochrome_color, "monochrome_color"),
|
||||
imageryBrightness: requireNumber(
|
||||
settings.imagery_brightness,
|
||||
"imagery_brightness",
|
||||
0,
|
||||
200,
|
||||
),
|
||||
imageryContrast: requireNumber(
|
||||
settings.imagery_contrast,
|
||||
"imagery_contrast",
|
||||
0,
|
||||
200,
|
||||
),
|
||||
imagerySaturation: requireNumber(
|
||||
settings.imagery_saturation,
|
||||
"imagery_saturation",
|
||||
0,
|
||||
200,
|
||||
),
|
||||
imageryGamma: requireNumber(settings.imagery_gamma, "imagery_gamma", 0, 300),
|
||||
imageryHue: requireNumber(settings.imagery_hue, "imagery_hue", -180, 180),
|
||||
imageryAlpha: requireNumber(settings.imagery_alpha, "imagery_alpha", 0, 100),
|
||||
globeColor: requireHexColor(settings.globe_color, "globe_color"),
|
||||
backgroundColor: requireHexColor(settings.background_color, "background_color"),
|
||||
terrainExaggeration: requireNumber(
|
||||
settings.terrain_exaggeration,
|
||||
"terrain_exaggeration",
|
||||
0.1,
|
||||
20,
|
||||
0.25,
|
||||
3,
|
||||
),
|
||||
buildingsColor: requireHexColor(settings.buildings_color, "buildings_color"),
|
||||
buildingsOpacity: requireNumber(
|
||||
settings.buildings_opacity,
|
||||
"buildings_opacity",
|
||||
0,
|
||||
1,
|
||||
),
|
||||
buildingsMaximumScreenSpaceError: requireNumber(
|
||||
settings.buildings_maximum_screen_space_error,
|
||||
"buildings_maximum_screen_space_error",
|
||||
4,
|
||||
32,
|
||||
),
|
||||
gridLodEnabled: requireBoolean(settings.grid_lod_enabled, "grid_lod_enabled"),
|
||||
gridHeightMeters: requireNumber(
|
||||
settings.grid_height_meters,
|
||||
"grid_height_meters",
|
||||
0,
|
||||
1000,
|
||||
),
|
||||
gridLod1MaxHeightKm: requireNumber(
|
||||
settings.grid_lod_1_max_height_km,
|
||||
"grid_lod_1_max_height_km",
|
||||
1,
|
||||
64,
|
||||
50,
|
||||
),
|
||||
gridLod1StepKm: requireNumber(
|
||||
settings.grid_lod_1_step_km,
|
||||
"grid_lod_1_step_km",
|
||||
1,
|
||||
10,
|
||||
),
|
||||
gridLod2MaxHeightKm: requireNumber(
|
||||
settings.grid_lod_2_max_height_km,
|
||||
"grid_lod_2_max_height_km",
|
||||
10,
|
||||
200,
|
||||
),
|
||||
gridLod2StepKm: requireNumber(
|
||||
settings.grid_lod_2_step_km,
|
||||
"grid_lod_2_step_km",
|
||||
1,
|
||||
25,
|
||||
),
|
||||
gridLod3StepKm: requireNumber(
|
||||
settings.grid_lod_3_step_km,
|
||||
"grid_lod_3_step_km",
|
||||
5,
|
||||
100,
|
||||
),
|
||||
gridRadiusKm: requireNumber(settings.grid_radius_km, "grid_radius_km", 5, 150),
|
||||
gridLineWidth: requireNumber(
|
||||
settings.grid_line_width,
|
||||
"grid_line_width",
|
||||
1,
|
||||
8,
|
||||
),
|
||||
gridColor: requireHexColor(settings.grid_color, "grid_color"),
|
||||
gridOpacity: requireNumber(settings.grid_opacity, "grid_opacity", 0, 100),
|
||||
gridDotsEnabled: requireBoolean(
|
||||
settings.grid_dots_enabled,
|
||||
"grid_dots_enabled",
|
||||
),
|
||||
gridDotsSize: requireNumber(
|
||||
settings.grid_dots_size,
|
||||
"grid_dots_size",
|
||||
2,
|
||||
28,
|
||||
),
|
||||
gridDotsColor: requireHexColor(settings.grid_dots_color, "grid_dots_color"),
|
||||
gridDotsOpacity: requireNumber(
|
||||
settings.grid_dots_opacity,
|
||||
"grid_dots_opacity",
|
||||
0,
|
||||
100,
|
||||
),
|
||||
cameraAnimationEnabled: requireBoolean(
|
||||
settings.camera_animation_enabled,
|
||||
@@ -317,6 +572,16 @@ function requireBoolean(value: unknown, path: string): boolean {
|
||||
return value;
|
||||
}
|
||||
|
||||
function requireHexColor(value: unknown, path: string): string {
|
||||
if (
|
||||
typeof value !== "string" ||
|
||||
!/^#[0-9a-f]{6}$/i.test(value)
|
||||
) {
|
||||
throw new Error(`${path} должен быть цветом #RRGGBB.`);
|
||||
}
|
||||
return value.toLowerCase();
|
||||
}
|
||||
|
||||
function requireNumber(
|
||||
value: unknown,
|
||||
path: string,
|
||||
|
||||
Reference in New Issue
Block a user