weather: add lightning flashes during storms
This commit is contained in:
1 parent
e3ce9119fe
commit
fb113e2e2d
2 files changed
+61
No files matched your search
@@ -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 } }
|
||||||
},
|
},
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|||||||
Vendored
+53
@@ -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) {
|
||||||
|
|||||||
Reference in new issue
Block a user