feat: refine earth hud panel behaviors and news board

This commit is contained in:
linkong
2026-04-17 17:41:15 +08:00
parent 8f3ab88743
commit 1cf1f32ddd
20 changed files with 1803 additions and 250 deletions

View File

@@ -18,6 +18,11 @@ import {
import { getShowCables } from "./cables.js";
import { toggleBGP, getShowBGP, getBGPCount } from "./bgp.js";
import { ensureTVPanelReady } from "./tv.js";
import {
ensureNewsPanelReady,
setNewsPanelVisible,
updateNewsToggleUI,
} from "./news.js";
export let autoRotate = true;
export let zoomLevel = 1.0;
@@ -31,6 +36,7 @@ const HUD_PANEL_IDS = [
"legend",
"earth-stats",
"tv-panel",
"news-panel",
"layer-toggles",
];
const DRAGGABLE_PANEL_SELECTOR = ".hud-panel-draggable";
@@ -97,6 +103,14 @@ function setHudPanelVisibility(panelId, visible) {
});
}
}
if (panelId === "news-panel") {
updateNewsToggleUI(visible);
if (visible) {
ensureNewsPanelReady().catch((error) => {
console.error("初始化态势新闻面板失败:", error);
});
}
}
}
function syncSettingsToggle(panelId, visible) {
@@ -230,7 +244,7 @@ function setupDraggableHudPanels() {
};
bindListener(handle, "pointerdown", (event) => {
if (event.target.closest(".hud-panel-close, .layer-panel-btn, .info-card-close, .tv-panel-select, .tv-panel-action, .tv-panel-player, .tv-panel-edge, .legend-bar-btn")) return;
if (event.target.closest(".hud-panel-close, .hud-panel__action, .layer-panel-btn, .info-card-close, .tv-panel-select, .tv-panel-player, .tv-panel-edge, .legend-bar-btn, .news-story-card")) return;
isDragging = true;
startPointerX = event.clientX;
startPointerY = event.clientY;
@@ -623,7 +637,7 @@ function setupLayerPanel() {
collapseBtn.title = isCollapsed ? "展开" : "折叠";
collapseBtn.setAttribute("aria-label", isCollapsed ? "展开图层列表" : "折叠图层列表");
const icon = collapseBtn.querySelector(".material-symbols-rounded");
if (icon) icon.textContent = isCollapsed ? "expand_less" : "expand_more";
if (icon) icon.textContent = isCollapsed ? "expand_more" : "expand_less";
});
if (searchInput) {
@@ -801,6 +815,14 @@ function setupTerrainControls() {
console.error("初始化电视直播面板失败:", error);
});
}
const newsVisible = !document.getElementById("news-panel")?.classList.contains("hud-panel-hidden");
updateNewsToggleUI(newsVisible);
setNewsPanelVisible(newsVisible);
if (newsVisible) {
ensureNewsPanelReady().catch((error) => {
console.error("初始化态势新闻面板失败:", error);
});
}
updateLayoutUI(container);
}