This version of Antigravity is no longer supported. Please upgrade to receive the latest features.

This commit is contained in:
2569718930@qq.com
2026-05-01 11:17:20 +08:00
parent 9d0570a36b
commit 113c0131b5
+27 -8
View File
@@ -142,13 +142,32 @@ function buildCalibratedFuturePath({
}; };
} }
const deltas = dedupeObservationItems(observations) const normalizedObservations = dedupeObservationItems(observations);
const latestObservationMinute = normalizedObservations.reduce<number | null>(
(latest, item) => {
const minute = hmToMinutes(item.time);
if (minute == null) return latest;
return latest == null ? minute : Math.max(latest, minute);
},
null,
);
// In practice the backend `local_time` can lag the latest METAR/official
// observation by one refresh cycle. Anchor the future line to the newest
// observation when it is newer, otherwise the "no future obs" guard can
// suppress the calibrated path even though the user already sees a fresh
// green observation point on the chart.
const pathStartMinutes =
latestObservationMinute != null
? Math.max(currentMinutes, latestObservationMinute)
: currentMinutes;
const deltas = normalizedObservations
.map((item) => { .map((item) => {
const minute = hmToMinutes(item.time); const minute = hmToMinutes(item.time);
const observed = Number(item.temp); const observed = Number(item.temp);
if ( if (
minute == null || minute == null ||
minute > currentMinutes + 30 || minute > pathStartMinutes + 30 ||
!Number.isFinite(observed) !Number.isFinite(observed)
) { ) {
return null; return null;
@@ -193,18 +212,18 @@ function buildCalibratedFuturePath({
.filter((minute): minute is number => minute != null) .filter((minute): minute is number => minute != null)
.at(-1); .at(-1);
const returnToBaselineMinute = const returnToBaselineMinute =
reversionMinutes != null && reversionMinutes > currentMinutes reversionMinutes != null && reversionMinutes > pathStartMinutes
? reversionMinutes ? reversionMinutes
: lastSeriesMinute != null && lastSeriesMinute > currentMinutes : lastSeriesMinute != null && lastSeriesMinute > pathStartMinutes
? lastSeriesMinute ? lastSeriesMinute
: currentMinutes + 6 * 60; : pathStartMinutes + 6 * 60;
const future = times.map((time, index) => { const future = times.map((time, index) => {
const minute = hmToMinutes(time); const minute = hmToMinutes(time);
const base = debTemps[index]; const base = debTemps[index];
if ( if (
minute == null || minute == null ||
minute < currentMinutes || minute < pathStartMinutes ||
base == null || base == null ||
!Number.isFinite(base) !Number.isFinite(base)
) { ) {
@@ -212,8 +231,8 @@ function buildCalibratedFuturePath({
} }
const progressToEvening = Math.min( const progressToEvening = Math.min(
Math.max( Math.max(
(minute - currentMinutes) / (minute - pathStartMinutes) /
Math.max(returnToBaselineMinute - currentMinutes, 1), Math.max(returnToBaselineMinute - pathStartMinutes, 1),
0, 0,
), ),
1, 1,