fix(satellites): use timestamp-based trail filtering to prevent flash
- Changed trail data structure to {pos, time} with Date.now() timestamp
- Replaced length-based filtering with time-based filtering (5 second window)
- Trail now naturally clears when page returns to foreground
- No more ugly frame-skipping or visibilitychange workarounds
Build: passes
This commit is contained in:
@@ -18,6 +18,7 @@ let lockedRingSprite = null;
|
|||||||
const SATELLITE_API = SATELLITE_CONFIG.apiPath + '?limit=' + SATELLITE_CONFIG.maxCount;
|
const SATELLITE_API = SATELLITE_CONFIG.apiPath + '?limit=' + SATELLITE_CONFIG.maxCount;
|
||||||
const MAX_SATELLITES = SATELLITE_CONFIG.maxCount;
|
const MAX_SATELLITES = SATELLITE_CONFIG.maxCount;
|
||||||
const TRAIL_LENGTH = SATELLITE_CONFIG.trailLength;
|
const TRAIL_LENGTH = SATELLITE_CONFIG.trailLength;
|
||||||
|
const TRAIL_MAX_AGE_MS = 5000; // 5 seconds
|
||||||
const DOT_TEXTURE_SIZE = 32;
|
const DOT_TEXTURE_SIZE = 32;
|
||||||
|
|
||||||
function createCircularDotTexture() {
|
function createCircularDotTexture() {
|
||||||
@@ -244,10 +245,10 @@ export function updateSatellitePositions(deltaTime = 0) {
|
|||||||
|
|
||||||
satellitePositions[i].current.copy(pos);
|
satellitePositions[i].current.copy(pos);
|
||||||
|
|
||||||
satellitePositions[i].trail.push(pos.clone());
|
satellitePositions[i].trail.push({ pos: pos.clone(), time: Date.now() });
|
||||||
if (satellitePositions[i].trail.length > TRAIL_LENGTH) {
|
satellitePositions[i].trail = satellitePositions[i].trail.filter(
|
||||||
satellitePositions[i].trail.shift();
|
p => Date.now() - p.time < TRAIL_MAX_AGE_MS
|
||||||
}
|
);
|
||||||
|
|
||||||
positions[i * 3] = pos.x;
|
positions[i * 3] = pos.x;
|
||||||
positions[i * 3 + 1] = pos.y;
|
positions[i * 3 + 1] = pos.y;
|
||||||
@@ -281,7 +282,7 @@ export function updateSatellitePositions(deltaTime = 0) {
|
|||||||
const trailIdx = (i * TRAIL_LENGTH + j) * 3;
|
const trailIdx = (i * TRAIL_LENGTH + j) * 3;
|
||||||
|
|
||||||
if (j < trail.length) {
|
if (j < trail.length) {
|
||||||
const t = trail[j];
|
const t = trail[j].pos;
|
||||||
trailPositions[trailIdx] = t.x;
|
trailPositions[trailIdx] = t.x;
|
||||||
trailPositions[trailIdx + 1] = t.y;
|
trailPositions[trailIdx + 1] = t.y;
|
||||||
trailPositions[trailIdx + 2] = t.z;
|
trailPositions[trailIdx + 2] = t.z;
|
||||||
|
|||||||
Reference in New Issue
Block a user