time fix
This commit is contained in:
parent
069a494d39
commit
79dd7077af
@ -62,7 +62,7 @@ scene.add(sun);
|
||||
const segments = 128;
|
||||
const orbitMaterial = new THREE.LineBasicMaterial({ color: 0xffffff, opacity: 0.5, transparent: true });
|
||||
|
||||
function createPlanet(radius, textureFile, distance, orbitSpeed) {
|
||||
function createPlanet(radius, textureFile, distance, orbitalPeriodDays) {
|
||||
const texture = textureLoader.load(`assets/textures/${textureFile}?v=${Date.now()}`);
|
||||
const geometry = new THREE.SphereGeometry(radius, 32, 32);
|
||||
const material = new THREE.MeshBasicMaterial({ map: texture }); // Reverted
|
||||
@ -80,17 +80,17 @@ function createPlanet(radius, textureFile, distance, orbitSpeed) {
|
||||
const trail = new THREE.Line(trailGeometry, trailMaterial);
|
||||
scene.add(trail);
|
||||
|
||||
return { planet, pivot, orbitSpeed, trail, trailPoints };
|
||||
return { planet, pivot, orbitalPeriodDays, trail, trailPoints };
|
||||
}
|
||||
|
||||
const mercuryData = createPlanet(0.4, 'mercury.jpg', 7, 0.0297);
|
||||
const venusData = createPlanet(0.9, 'venus.jpg', 11, 0.0116);
|
||||
const earthData = createPlanet(1, 'earth.jpg', 15, 0.00717); // Adjusted for 365-day year
|
||||
const marsData = createPlanet(0.7, 'mars.jpg', 20, 0.0038);
|
||||
const jupiterData = createPlanet(3, 'jupiter.jpg', 30, 0.0006);
|
||||
const saturnData = createPlanet(2.5, 'saturn.jpg', 40, 0.00024);
|
||||
const uranusData = createPlanet(2, 'uranus.jpg', 50, 0.000085);
|
||||
const neptuneData = createPlanet(1.9, 'neptune.jpg', 60, 0.000043);
|
||||
const mercuryData = createPlanet(0.4, 'mercury.jpg', 7, 88);
|
||||
const venusData = createPlanet(0.9, 'venus.jpg', 11, 225);
|
||||
const earthData = createPlanet(1, 'earth.jpg', 15, 365);
|
||||
const marsData = createPlanet(0.7, 'mars.jpg', 20, 687);
|
||||
const jupiterData = createPlanet(3, 'jupiter.jpg', 30, 4333);
|
||||
const saturnData = createPlanet(2.5, 'saturn.jpg', 40, 10759);
|
||||
const uranusData = createPlanet(2, 'uranus.jpg', 50, 30687);
|
||||
const neptuneData = createPlanet(1.9, 'neptune.jpg', 60, 60190);
|
||||
|
||||
// --- Saturn's Rings ---
|
||||
const ringGeometry = new THREE.RingGeometry(3.5, 5, 64);
|
||||
@ -293,7 +293,7 @@ pauseButton.addEventListener('click', () => {
|
||||
pauseButton.textContent = isPaused ? 'Play' : 'Pause';
|
||||
});
|
||||
|
||||
const speeds = [1, 100, 500];
|
||||
const speeds = [1, 100, 500, 1000, 10000];
|
||||
let currentSpeedIndex = 0;
|
||||
let timeScale = speeds[currentSpeedIndex]; // Start with 1x speed
|
||||
|
||||
@ -308,8 +308,9 @@ speedToggleButton.addEventListener('click', () => {
|
||||
const clock = new THREE.Clock();
|
||||
const timeContainer = document.getElementById('time-container');
|
||||
let simulationTime = new Date();
|
||||
const ORBIT_SPEED_MULTIPLIER = 0.1;
|
||||
const TIME_SPEED_FACTOR = 3600; // 1 real second = 1 simulation hour at 1x
|
||||
const TIME_SPEED_FACTOR = 60; // 1 real second = 1 simulation minute at 1x
|
||||
const MS_IN_A_DAY = 24 * 60 * 60 * 1000;
|
||||
const MOON_ORBIT_DAYS = 27.3;
|
||||
|
||||
|
||||
function updateTimeDisplay() {
|
||||
@ -327,7 +328,9 @@ function animate() {
|
||||
requestAnimationFrame(animate);
|
||||
|
||||
// Get time delta for frame-rate independent animation
|
||||
const delta = clock.getDelta();
|
||||
let delta = clock.getDelta();
|
||||
// Clamp the delta to a maximum value to prevent large jumps, e.g., on the first frame or after tab refocus.
|
||||
delta = Math.min(delta, 0.1);
|
||||
|
||||
// Update controls
|
||||
controls.update();
|
||||
@ -344,8 +347,9 @@ function animate() {
|
||||
const worldPosition = new THREE.Vector3();
|
||||
|
||||
planets.forEach(p => {
|
||||
// Orbit speed is now correctly scaled by timeScale
|
||||
p.pivot.rotation.y += p.orbitSpeed * ORBIT_SPEED_MULTIPLIER * delta * timeScale;
|
||||
const orbitalPeriodMs = p.orbitalPeriodDays * MS_IN_A_DAY;
|
||||
const angleIncrement = (incrementMs / orbitalPeriodMs) * (2 * Math.PI);
|
||||
p.pivot.rotation.y += angleIncrement;
|
||||
|
||||
// Planet's self-rotation (can also be constant)
|
||||
p.planet.rotation.y += 0.05 * delta;
|
||||
@ -362,7 +366,9 @@ function animate() {
|
||||
});
|
||||
|
||||
// Moon's orbit (also scaled by timeScale)
|
||||
moonPivot.rotation.y += 0.1 * ORBIT_SPEED_MULTIPLIER * delta * timeScale;
|
||||
const moonOrbitalPeriodMs = MOON_ORBIT_DAYS * MS_IN_A_DAY;
|
||||
const moonAngleIncrement = (incrementMs / moonOrbitalPeriodMs) * (2 * Math.PI);
|
||||
moonPivot.rotation.y += moonAngleIncrement;
|
||||
}
|
||||
|
||||
// Update time display every frame
|
||||
@ -371,6 +377,7 @@ function animate() {
|
||||
renderer.render(scene, camera);
|
||||
}
|
||||
|
||||
|
||||
animate();
|
||||
|
||||
// Handle window resize
|
||||
@ -381,4 +388,4 @@ window.addEventListener('resize', () => {
|
||||
});
|
||||
|
||||
// Initial call to set time
|
||||
updateTimeDisplay();
|
||||
updateTimeDisplay();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user