precision mediump float;
uniform samplerCube Texture;
uniform float skyPercent; 
uniform float uPlayerLightFactor; // Глобальный фактор дня/ночи для позиции игрока
uniform vec3 uSkyColor;    

varying vec3 vViewDir;

void main() {
    vec3 viewDir = normalize(vViewDir);
    
    // 1. Получаем звезды
    vec4 starsColor = textureCube(Texture, viewDir);

    // 2. Цвета атмосферы
    vec3 dayColor = uSkyColor;
    vec3 nightColor = vec3(0.01, 0.01, 0.04);

    // 3. Теперь всё небо окрашивается одинаково в зависимости от положения игрока
    // Мы плавно смешиваем ночной и дневной купол
    vec3 atmosphericColor = mix(nightColor, dayColor, uPlayerLightFactor);

    // 4. Логика видимости звезд
    // Звезды видны в космосе (skyPercent=0) 
    // И в атмосфере, если сейчас ночь (uPlayerLightFactor -> 0)
    float starsVisibility = (1.0 - skyPercent) + (skyPercent * (1.0 - uPlayerLightFactor));
    
    // Делаем звезды чуть ярче на ночном небе
    starsVisibility = pow(starsVisibility, 1.5);

    // 5. Итоговый цвет
    // Добавляем слой атмосферы к звездам
    vec3 skyLayer = atmosphericColor * skyPercent;
    vec3 finalColor = (starsColor.rgb * starsVisibility) + skyLayer;

    gl_FragColor = vec4(finalColor, 1.0);
}