release: bump version to 0.46.2
This commit is contained in:
108
frontend/public/earth/js/controls.js
vendored
108
frontend/public/earth/js/controls.js
vendored
@@ -19,6 +19,7 @@ import {
|
||||
import {
|
||||
toggleTerrain,
|
||||
setDayNightEnabled,
|
||||
toggleClouds,
|
||||
toggleGridLines,
|
||||
getShowGridLines,
|
||||
} from "./earth.js";
|
||||
@@ -53,7 +54,7 @@ import {
|
||||
} from "./satellites.js";
|
||||
import { getShowCables } from "./cables.js";
|
||||
import { toggleBGP, getShowBGP, getBGPCount } from "./bgp.js";
|
||||
import { getShowCountryBoundaries } from "./country-boundaries.js";
|
||||
import { getShowCountryBoundaries, toggleCountryBoundaries } from "./country-boundaries.js";
|
||||
import {
|
||||
toggleComputeCenters,
|
||||
getShowComputeCenters,
|
||||
@@ -136,6 +137,7 @@ let focusViewAnimationToken = 0;
|
||||
let earthSettingsDefaults = null;
|
||||
let lastZoomStatusUpdateTime = 0;
|
||||
let earthSettingsState = null;
|
||||
let deferredLayerVisibilitySettings = null;
|
||||
let layerRegistry = new Map();
|
||||
let layerPanelInitialized = false;
|
||||
let layoutMode = "desktop";
|
||||
@@ -269,7 +271,7 @@ function closeTransientMobileOverlays({ except = null } = {}) {
|
||||
setMobileDrawerOpen("layer-toggles", false);
|
||||
}
|
||||
|
||||
if (except !== "media" && isTVPanelVisible()) {
|
||||
if (except !== "media" && except !== "search" && isTVPanelVisible()) {
|
||||
setTVPanelVisible(false);
|
||||
}
|
||||
}
|
||||
@@ -670,6 +672,14 @@ function shouldIncludeLayerInStartupLoad(definition) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const persistedVisible = getPersistedLayerVisibilityOverride(definition.id);
|
||||
if (typeof persistedVisible === "boolean") {
|
||||
if (definition.startupMode === "preload" && definition.startupAlwaysLoad) {
|
||||
return true;
|
||||
}
|
||||
return persistedVisible;
|
||||
}
|
||||
|
||||
if (definition.startupMode === "preload") {
|
||||
return true;
|
||||
}
|
||||
@@ -677,6 +687,14 @@ function shouldIncludeLayerInStartupLoad(definition) {
|
||||
return Boolean(definition?.getVisible?.());
|
||||
}
|
||||
|
||||
function getPersistedLayerVisibilityOverride(layerId) {
|
||||
if (!layerId) return null;
|
||||
const layerVisibility =
|
||||
deferredLayerVisibilitySettings || earthSettingsState?.shared?.layerVisibility;
|
||||
const persistedVisible = layerVisibility?.[layerId];
|
||||
return typeof persistedVisible === "boolean" ? persistedVisible : null;
|
||||
}
|
||||
|
||||
function clampEarthZoomLevel(nextZoom) {
|
||||
const parsedZoom = Number.parseFloat(nextZoom);
|
||||
if (!Number.isFinite(parsedZoom)) {
|
||||
@@ -1127,7 +1145,7 @@ function setDefaultEarthZoom(nextZoom, { persist = true, applyToCurrentView = tr
|
||||
return defaultEarthZoom;
|
||||
}
|
||||
|
||||
async function applyEarthSettings(settings) {
|
||||
async function applyEarthSettings(settings, { applyLayers = true } = {}) {
|
||||
if (!settings) return;
|
||||
earthSettingsState = cloneEarthSettings(settings);
|
||||
|
||||
@@ -1161,12 +1179,31 @@ async function applyEarthSettings(settings) {
|
||||
applyToCurrentView: true,
|
||||
});
|
||||
|
||||
if (!applyLayers) {
|
||||
const layerVisibility = { ...(settings.shared.layerVisibility || {}) };
|
||||
applyImmediateLayerVisibilityHints(layerVisibility);
|
||||
deferredLayerVisibilitySettings = layerVisibility;
|
||||
return;
|
||||
}
|
||||
|
||||
deferredLayerVisibilitySettings = null;
|
||||
await applyLayerVisibilitySettings(settings.shared.layerVisibility, {
|
||||
persist: false,
|
||||
silent: true,
|
||||
});
|
||||
}
|
||||
|
||||
export async function applyDeferredLayerVisibilitySettings(options = {}) {
|
||||
const layerVisibility = deferredLayerVisibilitySettings;
|
||||
deferredLayerVisibilitySettings = null;
|
||||
if (!layerVisibility) return;
|
||||
await applyLayerVisibilitySettings(layerVisibility, {
|
||||
persist: false,
|
||||
silent: true,
|
||||
...options,
|
||||
});
|
||||
}
|
||||
|
||||
function resetEarthSettings() {
|
||||
const defaults = cloneEarthSettings(captureEarthSettingsDefaults());
|
||||
earthSettingsState = cloneEarthSettings(defaults);
|
||||
@@ -1307,8 +1344,15 @@ async function setCountryBoundariesLayerEnabled(button, enabled, { persist = tru
|
||||
}
|
||||
}
|
||||
|
||||
function setHighResTextureLayerEnabled(button, enabled, { persist = true, silent = false } = {}) {
|
||||
setHighResTextureEnabled(enabled, { suppressStatus: silent });
|
||||
async function setHighResTextureLayerEnabled(button, enabled, { persist = true, silent = false } = {}) {
|
||||
if (enabled) {
|
||||
setLayerButtonState(button, {
|
||||
active: false,
|
||||
loading: true,
|
||||
tooltip: "高清材质加载中...",
|
||||
});
|
||||
}
|
||||
await setHighResTextureEnabled(enabled, { suppressStatus: silent });
|
||||
setLayerButtonState(button, {
|
||||
active: enabled,
|
||||
loading: false,
|
||||
@@ -1319,8 +1363,15 @@ function setHighResTextureLayerEnabled(button, enabled, { persist = true, silent
|
||||
return enabled;
|
||||
}
|
||||
|
||||
function setAtmosphereCloudsLayerEnabled(button, enabled, { persist = true, silent = false } = {}) {
|
||||
setAtmosphereCloudsEnabled(enabled, { suppressStatus: silent });
|
||||
async function setAtmosphereCloudsLayerEnabled(button, enabled, { persist = true, silent = false } = {}) {
|
||||
if (enabled) {
|
||||
setLayerButtonState(button, {
|
||||
active: false,
|
||||
loading: true,
|
||||
tooltip: "大气云图加载中...",
|
||||
});
|
||||
}
|
||||
await setAtmosphereCloudsEnabled(enabled, { suppressStatus: silent });
|
||||
setLayerButtonState(button, {
|
||||
active: enabled,
|
||||
loading: false,
|
||||
@@ -1449,6 +1500,44 @@ async function applyLayerVisibilitySettings(layerVisibility = {}, options = {})
|
||||
}
|
||||
}
|
||||
|
||||
function applyImmediateLayerVisibilityHints(layerVisibility = {}) {
|
||||
if (typeof layerVisibility.gridLines === "boolean") {
|
||||
setGridLinesLayerEnabled(getLayerButton("gridLines"), layerVisibility.gridLines, {
|
||||
persist: false,
|
||||
silent: true,
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof layerVisibility.countryBoundaries === "boolean") {
|
||||
toggleCountryBoundaries(layerVisibility.countryBoundaries, {
|
||||
showLandFill: true,
|
||||
});
|
||||
setLayerButtonState(getLayerButton("countryBoundaries"), {
|
||||
active: layerVisibility.countryBoundaries,
|
||||
loading: false,
|
||||
tooltip: layerVisibility.countryBoundaries ? "隐藏国界线" : "显示国界线",
|
||||
});
|
||||
}
|
||||
|
||||
if (layerVisibility.earthHighResTexture === false) {
|
||||
void setHighResTextureEnabled(false, { suppressStatus: true });
|
||||
setLayerButtonState(getLayerButton("earthHighResTexture"), {
|
||||
active: false,
|
||||
loading: false,
|
||||
tooltip: "显示高清材质",
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof layerVisibility.atmosphereClouds === "boolean") {
|
||||
toggleClouds(layerVisibility.atmosphereClouds);
|
||||
setLayerButtonState(getLayerButton("atmosphereClouds"), {
|
||||
active: layerVisibility.atmosphereClouds,
|
||||
loading: false,
|
||||
tooltip: layerVisibility.atmosphereClouds ? "隐藏大气云图" : "显示大气云图",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getBuiltinLayerDefinitions() {
|
||||
return [
|
||||
{
|
||||
@@ -1472,13 +1561,14 @@ function getBuiltinLayerDefinitions() {
|
||||
id: "countryBoundaries",
|
||||
buttonId: "toggle-country-boundaries",
|
||||
icon: "public",
|
||||
label: "国界",
|
||||
label: "国界线",
|
||||
meta: "Country Borders",
|
||||
keywords: "国界 国家 borders countries boundary",
|
||||
defaultActive: true,
|
||||
displayOrder: 90,
|
||||
startupPriority: 20,
|
||||
startupMode: "preload",
|
||||
startupAlwaysLoad: true,
|
||||
startupLabel: "海陆基座",
|
||||
startupMessage: "正在加载海陆基座...",
|
||||
getVisible: () => getShowCountryBoundaries(),
|
||||
@@ -2268,7 +2358,7 @@ function setupSettingsControls() {
|
||||
});
|
||||
|
||||
captureEarthSettingsDefaults();
|
||||
settingsApplyPromise = applyEarthSettings(loadEarthSettings());
|
||||
settingsApplyPromise = applyEarthSettings(loadEarthSettings(), { applyLayers: false });
|
||||
syncAllHudPanelToggles();
|
||||
syncRotationModeButtons();
|
||||
syncCruiseModuleControls();
|
||||
|
||||
Reference in New Issue
Block a user