mirror of
https://github.com/eliasstepanik/voxel-simulation.git
synced 2026-01-11 22:08:29 +00:00
73 lines
1.9 KiB
Rust
73 lines
1.9 KiB
Rust
use bevy::core_pipeline::Skybox;
|
|
use bevy::input::mouse::{MouseMotion, MouseWheel};
|
|
use bevy::math::Vec3;
|
|
use bevy::prelude::*;
|
|
use bevy::render::camera::{Exposure, PhysicalCameraParameters};
|
|
use big_space::prelude::{BigSpaceCommands, FloatingOrigin};
|
|
use rand::Rng;
|
|
use crate::plugins::big_space::big_space_plugin::RootGrid;
|
|
|
|
#[derive(Component)]
|
|
pub struct CameraController {
|
|
pub yaw: f32,
|
|
pub pitch: f32,
|
|
pub speed: f32,
|
|
pub sensitivity: f32,
|
|
}
|
|
|
|
impl Default for CameraController {
|
|
fn default() -> Self {
|
|
Self {
|
|
yaw: 0.0,
|
|
pitch: 0.0,
|
|
speed: 10.0,
|
|
sensitivity: 0.1,
|
|
}
|
|
}
|
|
}
|
|
pub fn setup(mut commands: Commands,
|
|
root: Res<RootGrid>,
|
|
asset_server: Res<AssetServer>) {
|
|
|
|
|
|
|
|
let cubemap_handle = asset_server.load("textures/skybox_space_1024/sky.ktx2");
|
|
commands.insert_resource(PendingSkybox { handle: cubemap_handle.clone() });
|
|
|
|
commands.entity(root.0).with_children(|parent| {
|
|
parent.spawn((
|
|
|
|
Name::new("Camera"),
|
|
Transform::from_xyz(0.0, 0.0, 10.0), // initial position
|
|
GlobalTransform::default(),
|
|
Camera3d::default(),
|
|
Projection::from(PerspectiveProjection {
|
|
near: 0.0001,
|
|
..default()
|
|
}),
|
|
CameraController::default(),
|
|
Exposure::from_physical_camera(PhysicalCameraParameters {
|
|
aperture_f_stops: 1.0,
|
|
shutter_speed_s: 1.0 / 125.0,
|
|
sensitivity_iso: 100.0,
|
|
sensor_height: 0.01866,
|
|
}),
|
|
FloatingOrigin,
|
|
Skybox {
|
|
image: cubemap_handle.clone(),
|
|
brightness: 1000.0,
|
|
..default()
|
|
},
|
|
));
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Resource)]
|
|
struct PendingSkybox {
|
|
handle: Handle<Image>,
|
|
}
|
|
|