diff --git a/vendor/clouds3d.js b/vendor/clouds3d.js index c4ed5a1..2bd7615 100644 --- a/vendor/clouds3d.js +++ b/vendor/clouds3d.js @@ -3473,7 +3473,10 @@ var EMERGENCY_SPEED_KMH = (typeof EMERGENCY_CFG.speedKmh === 'number') ? Math.ma var EMERGENCY_MIN_KM = (typeof EMERGENCY_CFG.minKm === 'number') ? Math.max(5, EMERGENCY_CFG.minKm) : 40; var EMERGENCY_MAX_KM = (typeof EMERGENCY_CFG.maxKm === 'number') ? Math.max(EMERGENCY_MIN_KM, EMERGENCY_CFG.maxKm) : 80; var EMERGENCY_RANK_MAX = (typeof EMERGENCY_CFG.rankMax === 'number') ? Math.max(0, Math.min(4, EMERGENCY_CFG.rankMax)) : 1; -var EMERGENCY_COLOR = Array.isArray(EMERGENCY_CFG.color) ? EMERGENCY_CFG.color : [0.22, 0.55, 1.0]; +var EMERGENCY_COLOR = Array.isArray(EMERGENCY_CFG.color) ? EMERGENCY_CFG.color : [0.12, 0.42, 1.0]; +var EMERGENCY_LED_COLOR = Array.isArray(EMERGENCY_CFG.ledColor) ? EMERGENCY_CFG.ledColor : [0.04, 0.26, 1.0]; +var EMERGENCY_HALOGEN_COLOR = Array.isArray(EMERGENCY_CFG.halogenColor) ? EMERGENCY_CFG.halogenColor : [0.58, 0.74, 1.0]; +var EMERGENCY_COLOR_VARIATION = (typeof EMERGENCY_CFG.colorVariation === 'number') ? Math.max(0, Math.min(1, EMERGENCY_CFG.colorVariation)) : 0.55; var EMERGENCY_FLASH_HZ = (typeof EMERGENCY_CFG.flashHz === 'number') ? Math.max(0.2, Math.min(8, EMERGENCY_CFG.flashHz)) : 2.2; var EMERGENCY_NIGHT_ONLY = EMERGENCY_CFG.nightOnly !== false; var EMERGENCY_BRIGHT = (typeof EMERGENCY_CFG.bright === 'number') ? Math.max(0.1, Math.min(6, EMERGENCY_CFG.bright)) : 1.35; @@ -4423,6 +4426,9 @@ var CARP_FRAG_SRC = [ 'uniform float uWetGain;', // extra halo on lights when wet', 'uniform float uEmergency;', 'uniform vec3 uEmergencyColor;', + 'uniform vec3 uEmergencyLedColor;', + 'uniform vec3 uEmergencyHalogenColor;', + 'uniform float uEmergencyColorVariation;', 'uniform float uEmergencyFlashHz;', 'uniform float uEmergencyNightOnly;', 'varying float vApproach;', @@ -4470,8 +4476,11 @@ var CARP_FRAG_SRC = [ 'smoothstep(-0.1, 0.1, approach));', 'if (uEmergency > 0.5) {', 'float flash = 0.20 + 0.80 * pow(max(0.0, sin(uTime * uEmergencyFlashHz * 6.2831853 + vSeed * 6.2831853)), 1.35);', - 'col = uEmergencyColor * (0.45 + 0.75 * flash);', - 'inten *= 0.45 + 1.15 * flash;', + 'float lampVariant = fract(vSeed * 7.13 + 0.317);', + 'vec3 lampColor = mix(uEmergencyLedColor, uEmergencyHalogenColor, lampVariant);', + 'vec3 emergencyBase = mix(uEmergencyColor, lampColor, clamp(uEmergencyColorVariation, 0.0, 1.0));', + 'col = emergencyBase * (0.45 + 0.75 * flash);', + 'inten *= (0.45 + 1.15 * flash) * (0.88 + 0.28 * lampVariant);', '}', // Switching on/off individually: this vehicle's own threshold sits // somewhere in the twilight window, so the A-net lights up piece by @@ -4525,6 +4534,9 @@ function ensureCarPtsProgram(gl) { wetGain: gl.getUniformLocation(cpp, 'uWetGain'), emergency: gl.getUniformLocation(cpp, 'uEmergency'), emergencyColor: gl.getUniformLocation(cpp, 'uEmergencyColor'), + emergencyLedColor: gl.getUniformLocation(cpp, 'uEmergencyLedColor'), + emergencyHalogenColor: gl.getUniformLocation(cpp, 'uEmergencyHalogenColor'), + emergencyColorVariation: gl.getUniformLocation(cpp, 'uEmergencyColorVariation'), emergencyFlashHz: gl.getUniformLocation(cpp, 'uEmergencyFlashHz'), emergencyNightOnly: gl.getUniformLocation(cpp, 'uEmergencyNightOnly') }; @@ -7477,6 +7489,9 @@ window.clouds3dRender = function(target) { gl.uniform1f(carPtsUniforms.wetGain, WET_LIGHT_GAIN); gl.uniform1f(carPtsUniforms.emergency, 0.0); gl.uniform3f(carPtsUniforms.emergencyColor, EMERGENCY_COLOR[0], EMERGENCY_COLOR[1], EMERGENCY_COLOR[2]); + gl.uniform3f(carPtsUniforms.emergencyLedColor, EMERGENCY_LED_COLOR[0], EMERGENCY_LED_COLOR[1], EMERGENCY_LED_COLOR[2]); + gl.uniform3f(carPtsUniforms.emergencyHalogenColor, EMERGENCY_HALOGEN_COLOR[0], EMERGENCY_HALOGEN_COLOR[1], EMERGENCY_HALOGEN_COLOR[2]); + gl.uniform1f(carPtsUniforms.emergencyColorVariation, EMERGENCY_COLOR_VARIATION); gl.uniform1f(carPtsUniforms.emergencyFlashHz, EMERGENCY_FLASH_HZ); gl.uniform1f(carPtsUniforms.emergencyNightOnly, EMERGENCY_NIGHT_ONLY ? 1.0 : 0.0); var carPtsGroup = function (vbo, count, dash, speed, maxDens) { @@ -7533,6 +7548,9 @@ window.clouds3dRender = function(target) { gl.uniform1f(carPtsUniforms.wetGain, WET_LIGHT_GAIN); gl.uniform1f(carPtsUniforms.emergency, 1.0); gl.uniform3f(carPtsUniforms.emergencyColor, EMERGENCY_COLOR[0], EMERGENCY_COLOR[1], EMERGENCY_COLOR[2]); + gl.uniform3f(carPtsUniforms.emergencyLedColor, EMERGENCY_LED_COLOR[0], EMERGENCY_LED_COLOR[1], EMERGENCY_LED_COLOR[2]); + gl.uniform3f(carPtsUniforms.emergencyHalogenColor, EMERGENCY_HALOGEN_COLOR[0], EMERGENCY_HALOGEN_COLOR[1], EMERGENCY_HALOGEN_COLOR[2]); + gl.uniform1f(carPtsUniforms.emergencyColorVariation, EMERGENCY_COLOR_VARIATION); gl.uniform1f(carPtsUniforms.emergencyFlashHz, EMERGENCY_FLASH_HZ); gl.uniform1f(carPtsUniforms.emergencyNightOnly, EMERGENCY_NIGHT_ONLY ? 1.0 : 0.0); gl.uniform1f(carPtsUniforms.dash, 0.0);