offlineEarnings function
Same formula as OfflineProgressionService._earningsAt(): earnings
accrued between lastClaimedMs and nowMs, capped at
maxOfflineCapMs elapsed, at productionRatePerSecond.
Throws ArgumentError for a negative maxOfflineCapMs or a
non-finite/negative productionRatePerSecond — same validation as the
real service, so a misconfigured simulator scenario fails exactly the
same way a misconfigured real service would.
Implementation
double offlineEarnings({
required int lastClaimedMs,
required int nowMs,
required int maxOfflineCapMs,
required double productionRatePerSecond,
}) {
if (maxOfflineCapMs < 0) {
throw ArgumentError.value(
maxOfflineCapMs,
'maxOfflineCapMs',
'must be >= 0',
);
}
if (!productionRatePerSecond.isFinite || productionRatePerSecond < 0) {
throw ArgumentError.value(
productionRatePerSecond,
'productionRatePerSecond',
'must be finite and >= 0',
);
}
final elapsedMs = (nowMs - lastClaimedMs).clamp(0, maxOfflineCapMs);
return elapsedMs / 1000 * productionRatePerSecond;
}