solarsystems 0.0.1

N-body solar system engine — gravitational dynamics, orbital mechanics, perturbations, event detection, and full celestial orchestration
Documentation
use super::shaders::{ShaderEndpoint, ShaderUniform, UniformValue};

pub fn scene_lighting_solar() -> ShaderEndpoint {
    ShaderEndpoint {
        name: "material_scene_lighting_solar",
        uniforms: vec![
            ShaderUniform {
                name: "u_sun_direction",
                value: UniformValue::Vec3([0.0, 0.0, 1.0]),
            },
            ShaderUniform {
                name: "u_sun_color",
                value: UniformValue::Vec3([1.0, 0.98, 0.95]),
            },
            ShaderUniform {
                name: "u_sun_intensity",
                value: UniformValue::Float(1.0),
            },
            ShaderUniform {
                name: "u_ambient_color",
                value: UniformValue::Vec3([0.02, 0.02, 0.03]),
            },
            ShaderUniform {
                name: "u_ambient_intensity",
                value: UniformValue::Float(0.01),
            },
        ],
    }
}

pub fn scene_lighting_from_sun(sun_pos: [f32; 3], observer_pos: [f32; 3]) -> ShaderEndpoint {
    let dx = sun_pos[0] - observer_pos[0];
    let dy = sun_pos[1] - observer_pos[1];
    let dz = sun_pos[2] - observer_pos[2];
    let len = (dx * dx + dy * dy + dz * dz).sqrt();
    let dir = if len > 0.0 {
        [dx / len, dy / len, dz / len]
    } else {
        [0.0, 0.0, 1.0]
    };
    ShaderEndpoint {
        name: "material_scene_lighting_positioned",
        uniforms: vec![
            ShaderUniform {
                name: "u_sun_direction",
                value: UniformValue::Vec3(dir),
            },
            ShaderUniform {
                name: "u_sun_color",
                value: UniformValue::Vec3([1.0, 0.98, 0.95]),
            },
            ShaderUniform {
                name: "u_sun_intensity",
                value: UniformValue::Float(1.0),
            },
            ShaderUniform {
                name: "u_ambient_color",
                value: UniformValue::Vec3([0.02, 0.02, 0.03]),
            },
            ShaderUniform {
                name: "u_ambient_intensity",
                value: UniformValue::Float(0.01),
            },
        ],
    }
}

pub fn skybox_deep_space() -> ShaderEndpoint {
    ShaderEndpoint {
        name: "material_skybox_deep_space",
        uniforms: vec![
            ShaderUniform {
                name: "u_background_color",
                value: UniformValue::Vec3([0.0, 0.0, 0.002]),
            },
            ShaderUniform {
                name: "u_star_field_density",
                value: UniformValue::Float(1.0),
            },
            ShaderUniform {
                name: "u_milky_way_intensity",
                value: UniformValue::Float(0.1),
            },
        ],
    }
}

pub fn skybox_inner_system() -> ShaderEndpoint {
    ShaderEndpoint {
        name: "material_skybox_inner_system",
        uniforms: vec![
            ShaderUniform {
                name: "u_background_color",
                value: UniformValue::Vec3([0.0, 0.0, 0.001]),
            },
            ShaderUniform {
                name: "u_star_field_density",
                value: UniformValue::Float(0.8),
            },
            ShaderUniform {
                name: "u_milky_way_intensity",
                value: UniformValue::Float(0.05),
            },
        ],
    }
}