release: bump version to 0.30.0

This commit is contained in:
linkong
2026-04-21 12:28:04 +08:00
parent 2b0d4cfc49
commit 0f89372d71
17 changed files with 1132 additions and 64 deletions

View File

@@ -1,10 +1,10 @@
import * as THREE from "three";
import { createNoise3D } from "simplex-noise";
import { CONFIG, HUD_CONFIG, CABLE_CONFIG, CABLE_STATE } from "./constants.js";
import { vector3ToLatLon, screenToEarthCoords } from "./utils.js";
import {
showStatusMessage,
queueStatusMessage,
updateCoordinatesDisplay,
updateZoomDisplay,
updateEarthStats,
@@ -26,6 +26,7 @@ import {
clearEarthTexture,
setEarthSunDirection,
} from "./earth.js";
import { registerTerrainMesh, clearTerrainData } from "./terrain.js";
import {
initCelestialLayer,
updateCelestialLayer,
@@ -118,7 +119,7 @@ import {
getAutoRotate,
getShowTerrain,
setAutoRotate,
resetView,
applyImmediateView,
getZoomLevel,
teardownControls,
updateLayerButtonState,
@@ -142,7 +143,6 @@ export let scene;
export let camera;
export let renderer;
let simplex;
let isDragging = false;
let previousMousePosition = { x: 0, y: 0 };
let targetRotation = { x: 0, y: 0 };
@@ -807,8 +807,10 @@ async function ensureCablesEnabled() {
clearCableData(earth);
// Load landing points first so they appear before cable lines
await loadLandingPoints(scene, earth);
const cableCount = await loadGeoJSONFromPath(scene, earth);
await loadLandingPoints(scene, earth, { silent: true });
const cableCount = await loadGeoJSONFromPath(scene, earth, {
silent: true,
});
if (requestToken !== cableToggleToken || !cablesEnabled || destroyed) {
clearCableData(earth);
@@ -913,7 +915,6 @@ export function init() {
destroyed = false;
initialized = true;
simplex = createNoise3D();
updateHudScale();
const brandRoot = document.getElementById("brand-root");
mountBrand(brandRoot, HUD_CONFIG.brandLanguage);
@@ -952,13 +953,14 @@ export function init() {
setLegendItems("satellites", getSatelliteLegendItems());
setLegendItems("bgp", getBGPLegendItems());
const earthObj = createEarth(scene);
applyImmediateView(earthObj, camera);
targetRotation = {
x: earthObj.rotation.x,
y: earthObj.rotation.y,
};
inertialVelocity = { x: 0, y: 0 };
createClouds(scene, earthObj);
createTerrain(scene, earthObj, simplex);
registerTerrainMesh(createTerrain(earthObj));
initCelestialLayer(scene, {
camera,
sunLight: sceneLights?.sunLight ?? null,
@@ -969,7 +971,6 @@ export function init() {
createSatellites(scene, earthObj);
setupControls(camera, renderer, scene, earthObj);
resetView(camera);
setupEventListeners();
clock.start();
@@ -1054,7 +1055,7 @@ async function loadData() {
setLoadingMessage("正在加载登陆点...");
await yieldFrame(30);
try {
await loadLandingPoints(scene, earth);
await loadLandingPoints(scene, earth, { silent: true });
} catch (err) {
errors.push({ label: "登陆点", reason: err });
}
@@ -1067,7 +1068,9 @@ async function loadData() {
setLoadingMessage("正在加载海缆...");
await yieldFrame(30);
try {
const cableCount = await loadGeoJSONFromPath(scene, earth);
const cableCount = await loadGeoJSONFromPath(scene, earth, {
silent: true,
});
if (loadToken === currentLoadToken && cablesEnabled) {
toggleCables(true);
updateCableToggleUi(true);
@@ -1147,10 +1150,10 @@ async function loadData() {
if (errors.length > 0) {
const errorMessage = buildLoadErrorMessage(errors);
showError(errorMessage);
showStatusMessage(errorMessage, "error");
queueStatusMessage(errorMessage, "error");
} else {
hideError();
showStatusMessage("数据已加载", "success");
queueStatusMessage("数据已加载", "success");
}
}
@@ -1787,6 +1790,7 @@ export function destroy() {
resetSatelliteState();
clearUiState();
disposeCelestialLayer();
clearTerrainData();
if (scene) {
disposeSceneObject(scene);