|
|
|
@ -5337,16 +5337,22 @@ |
|
|
|
function animateBuildings(timestamp) { |
|
|
|
if (!buildingAnimationEnabled) return; |
|
|
|
|
|
|
|
// Single multiplier for all buildings: 100% to 150% |
|
|
|
// (sin + 1) gives 0 to 2, multiply by 0.25 gives 0 to 0.5, add 1 gives 1.0 to 1.5 |
|
|
|
const multiplier = 1 + (Math.sin(timestamp * buildingAnimationSpeed) + 1) * 0.25; |
|
|
|
// Two multipliers 180° out of phase: when one grows, the other shrinks |
|
|
|
// Range: 100% to 150% |
|
|
|
const sinVal = Math.sin(timestamp * buildingAnimationSpeed); |
|
|
|
const multiplierA = 1 + (sinVal + 1) * 0.25; // 1.0 → 1.5 |
|
|
|
const multiplierB = 1 + (-sinVal + 1) * 0.25; // 1.5 → 1.0 (inverted) |
|
|
|
|
|
|
|
// Update building height |
|
|
|
// Alternate based on floor of height being even/odd |
|
|
|
if (map.getLayer('buildings-3d')) { |
|
|
|
map.setPaintProperty('buildings-3d', 'fill-extrusion-height', [ |
|
|
|
'*', |
|
|
|
['get', 'render_height'], |
|
|
|
multiplier |
|
|
|
['case', |
|
|
|
['==', ['%', ['floor', ['get', 'render_height']], 2], 0], |
|
|
|
multiplierA, |
|
|
|
multiplierB |
|
|
|
] |
|
|
|
]); |
|
|
|
} |
|
|
|
|
|
|
|
|