weather: add lightning flashes during storms

This commit is contained in:
Richard Zink committed 2026-10-12 22:46:48 +02:00
1 parent e3ce9119fe
commit fb113e2e2d
2 files changed
+61

No files matched your search

+8
View File
@@ -136,9 +136,17 @@ window.CONFIG = {
intensity: 1.0, intensity: 1.0,
maxAlpha: 0.45, maxAlpha: 0.45,
speed: 0.35 // slow drifting flakes speed: 0.35 // slow drifting flakes
},
lightning: {
enabled: true,
gain: 1.2, // brightness of one flash
minDelayS: 8, // minimum delay between storm flashes
maxDelayS: 45, // maximum delay between storm flashes
doubleFlash: true // some flashes flicker twice
} }
// weatherEffects: { enabled: false } // weatherEffects: { enabled: false }
// weatherEffects: { rain: { maxAlpha: 0.55, speed: 1.4 }, snow: { enabled: false } } // weatherEffects: { rain: { maxAlpha: 0.55, speed: 1.4 }, snow: { enabled: false } }
// weatherEffects: { lightning: { gain: 2.0, minDelayS: 3, maxDelayS: 12 } }
}, },
// ------------------------------------------------------------------ // ------------------------------------------------------------------
+53
View File
@@ -6034,6 +6034,46 @@ var WEATHER_RAIN_ALPHA = (typeof WEATHER_RAIN_CFG.maxAlpha === 'number') ? Math.
var WEATHER_SNOW_ALPHA = (typeof WEATHER_SNOW_CFG.maxAlpha === 'number') ? Math.max(0, Math.min(1, WEATHER_SNOW_CFG.maxAlpha)) : 0.45; var WEATHER_SNOW_ALPHA = (typeof WEATHER_SNOW_CFG.maxAlpha === 'number') ? Math.max(0, Math.min(1, WEATHER_SNOW_CFG.maxAlpha)) : 0.45;
var WEATHER_RAIN_SPEED = (typeof WEATHER_RAIN_CFG.speed === 'number') ? Math.max(0.1, WEATHER_RAIN_CFG.speed) : 1.0; var WEATHER_RAIN_SPEED = (typeof WEATHER_RAIN_CFG.speed === 'number') ? Math.max(0.1, WEATHER_RAIN_CFG.speed) : 1.0;
var WEATHER_SNOW_SPEED = (typeof WEATHER_SNOW_CFG.speed === 'number') ? Math.max(0.05, WEATHER_SNOW_CFG.speed) : 0.35; var WEATHER_SNOW_SPEED = (typeof WEATHER_SNOW_CFG.speed === 'number') ? Math.max(0.05, WEATHER_SNOW_CFG.speed) : 0.35;
var WEATHER_LIGHTNING_CFG = WEATHER_FX_CFG.lightning || {};
var WEATHER_LIGHTNING_ON = WEATHER_LIGHTNING_CFG.enabled !== false;
var WEATHER_LIGHTNING_GAIN = (typeof WEATHER_LIGHTNING_CFG.gain === 'number') ? Math.max(0, WEATHER_LIGHTNING_CFG.gain) : 1.2;
var WEATHER_LIGHTNING_MIN_DELAY = (typeof WEATHER_LIGHTNING_CFG.minDelayS === 'number') ? Math.max(0.5, WEATHER_LIGHTNING_CFG.minDelayS) : 8;
var WEATHER_LIGHTNING_MAX_DELAY = (typeof WEATHER_LIGHTNING_CFG.maxDelayS === 'number') ? Math.max(WEATHER_LIGHTNING_MIN_DELAY, WEATHER_LIGHTNING_CFG.maxDelayS) : 45;
var WEATHER_LIGHTNING_DOUBLE = WEATHER_LIGHTNING_CFG.doubleFlash !== false;
var lightningNextT = 0, lightningSeq = 0, lightningSeqT = 0, lightningFlash = 0;
function updateLightning(now) {
if (!WEATHER_LIGHTNING_ON) {
lightningFlash = 0;
lightningSeq = 0;
return 0;
}
var wx = window.__currentWeather || {};
var code = Number(wx.code || 0);
var storm = code >= 95 || window.__currentWeatherName === 'stormy';
if (!storm) {
lightningFlash = 0;
lightningSeq = 0;
return 0;
}
if (now > lightningNextT) {
lightningSeq = 1 + (WEATHER_LIGHTNING_DOUBLE && Math.random() < 0.45 ? 1 : 0);
lightningSeqT = now;
lightningNextT = now + WEATHER_LIGHTNING_MIN_DELAY +
Math.random() * (WEATHER_LIGHTNING_MAX_DELAY - WEATHER_LIGHTNING_MIN_DELAY);
}
var flash = 0;
if (lightningSeq > 0) {
var dt = now - lightningSeqT;
var f1 = Math.exp(-dt * 12.0);
var f2 = lightningSeq > 1 ? Math.exp(-Math.max(0.0, dt - 0.12) * 10.0) : 0.0;
flash = Math.max(f1, f2 * 0.75);
if (dt > 1.2) lightningSeq = 0;
}
lightningFlash = flash;
return flash;
}
var weatherProg = null, weatherU = null; var weatherProg = null, weatherU = null;
var WEATHER_VERT_SRC = [ var WEATHER_VERT_SRC = [
@@ -6310,6 +6350,13 @@ window.clouds3dRender = function(target) {
_moonI *= _exp; _moonI *= _exp;
_amb *= _exp; _amb *= _exp;
} }
var _lightning = updateLightning(now);
if (_lightning > 0.001) {
var _lightningGain = WEATHER_LIGHTNING_GAIN * _lightning;
_amb += _lightningGain * 0.85;
_beamL += _lightningGain * 0.35;
_beam = mixRgb(_beam, [0.82, 0.88, 1.0], Math.min(0.75, _lightning));
}
var _terrainHazeColor = hazeColorDynamic(TERRAIN_HAZE_COLOR, _air, _amb, _star, _moonI); var _terrainHazeColor = hazeColorDynamic(TERRAIN_HAZE_COLOR, _air, _amb, _star, _moonI);
var _frontHazeColor = hazeColorDynamic(FRONT_HAZE_COLOR, _air, _amb, _star, _moonI); var _frontHazeColor = hazeColorDynamic(FRONT_HAZE_COLOR, _air, _amb, _star, _moonI);
var _airHazeColor = hazeColorDynamic(AIR_HAZE_COLOR, _air, _amb, _star, _moonI); var _airHazeColor = hazeColorDynamic(AIR_HAZE_COLOR, _air, _amb, _star, _moonI);
@@ -7267,6 +7314,12 @@ window.clouds3dRender = function(target) {
// ---- Weather overlay: rain/snow ------------------------------------ // ---- Weather overlay: rain/snow ------------------------------------
if (WEATHER_FX_ON) { if (WEATHER_FX_ON) {
var _weather = weatherOverlayIntensities(); var _weather = weatherOverlayIntensities();
window.__weatherFxDbg = {
rain: +_weather[0].toFixed(2),
snow: +_weather[1].toFixed(2),
lightning: +lightningFlash.toFixed(2),
code: Number((window.__currentWeather || {}).code || 0)
};
var _rainI = _weather[0]; var _rainI = _weather[0];
var _snowI = _weather[1]; var _snowI = _weather[1];
if (_rainI > 0.001 || _snowI > 0.001) { if (_rainI > 0.001 || _snowI > 0.001) {