release: bump version to 0.29.0

This commit is contained in:
linkong
2026-04-20 17:43:59 +08:00
parent ae77b06c3c
commit fe45a99cbd
16 changed files with 787 additions and 90 deletions

View File

@@ -20,12 +20,21 @@ import {
createEarth,
createClouds,
createTerrain,
createStars,
createGridLines,
getEarth,
loadEarthTexture,
clearEarthTexture,
setEarthSunDirection,
} from "./earth.js";
import {
initCelestialLayer,
updateCelestialLayer,
disposeCelestialLayer,
getCelestialDebugState,
getSunDirection,
setCelestialOrientation,
setCelestialFollow,
} from "./celestial.js";
import {
loadGeoJSONFromPath,
loadLandingPoints,
@@ -165,6 +174,7 @@ let cablesEnabled = true;
let satellitesEnabled = true;
let cableToggleToken = 0;
let satelliteToggleToken = 0;
let sceneLights = null;
const clock = new THREE.Clock();
const interactionRaycaster = new THREE.Raycaster();
@@ -912,7 +922,7 @@ export function init() {
75,
getViewportAspect(),
0.1,
1000,
5000,
);
camera.position.z = CONFIG.defaultCameraZ;
setSatelliteCamera(camera);
@@ -923,7 +933,7 @@ export function init() {
powerPreference: "high-performance",
});
syncRendererViewport();
renderer.setClearColor(0x0a0a1a, 1);
renderer.setClearColor(0x02040a, 1);
renderer.setPixelRatio(window.devicePixelRatio);
const container = document.getElementById("container");
@@ -932,7 +942,7 @@ export function init() {
container.appendChild(renderer.domElement);
}
addLights();
sceneLights = addLights();
initInfoCard();
initLegend();
setLegendItems("cables", getCableLegendItems());
@@ -946,7 +956,12 @@ export function init() {
inertialVelocity = { x: 0, y: 0 };
createClouds(scene, earthObj);
createTerrain(scene, earthObj, simplex);
createStars(scene);
initCelestialLayer(scene, {
camera,
sunLight: sceneLights?.sunLight ?? null,
backLight: sceneLights?.backLight ?? null,
earth: earthObj,
});
createGridLines(scene, earthObj);
createSatellites(scene, earthObj);
@@ -967,17 +982,25 @@ function registerGlobalApi() {
hideInfoCard();
clearLockedObject();
},
celestial: {
getState: () => getCelestialDebugState(),
setOrientation: (nextEuler) => setCelestialOrientation(nextEuler),
setFollow: (nextFollow) => setCelestialFollow(nextFollow),
},
destroy,
init,
};
}
function addLights() {
scene.add(new THREE.AmbientLight(0x404060));
const ambientLight = new THREE.AmbientLight(0x404060);
scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 1.2);
directionalLight.position.set(5, 3, 5);
scene.add(directionalLight);
const sunLight = new THREE.DirectionalLight(0xffffff, 1.2);
sunLight.position.set(5, 3, 5);
sunLight.target.position.set(0, 0, 0);
scene.add(sunLight);
scene.add(sunLight.target);
const backLight = new THREE.DirectionalLight(0x446688, 0.3);
backLight.position.set(-5, 0, -5);
@@ -986,6 +1009,13 @@ function addLights() {
const pointLight = new THREE.PointLight(0xffffff, 0.4);
pointLight.position.set(10, 10, 10);
scene.add(pointLight);
return {
ambientLight,
sunLight,
backLight,
pointLight,
};
}
// Yield control to the browser so the renderer can paint a frame before the next step
@@ -1710,6 +1740,8 @@ function animate() {
updateSatellitePositions(deltaTime);
updateBreathingPhase(deltaTime);
updateRelatedSatelliteHighlights();
updateCelestialLayer(new Date(), camera);
setEarthSunDirection(getSunDirection());
updateNewsViewFocus(getCurrentViewCenterCoords());
const satPositions = getSatellitePositions();
@@ -1751,6 +1783,7 @@ export function destroy() {
clearBGPData(getEarth());
resetSatelliteState();
clearUiState();
disposeCelestialLayer();
if (scene) {
disposeSceneObject(scene);
@@ -1767,6 +1800,7 @@ export function destroy() {
scene = null;
camera = null;
renderer = null;
sceneLights = null;
initialized = false;
delete window.__planetEarth;