emergency: apply emergency blue tone variation in renderer

This commit is contained in:
Richard Zink committed 2026-10-13 07:50:31 +02:00
1 parent 16c26729c2
commit 22e2bae5bd
1 file changed
+21 -3
+21 -3
View File
@@ -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);