fix: Incorrect camera minimum distance and start distance

This commit is contained in:
Rendo 2026-08-05 19:10:31 +05:00
commit caa57922bf

View file

@ -2,6 +2,8 @@ use bevy::{input::mouse::{AccumulatedMouseMotion, AccumulatedMouseScroll}, prelu
use crate::grid::Grid; use crate::grid::Grid;
use std::{f32::consts::FRAC_PI_2,ops::Range}; use std::{f32::consts::FRAC_PI_2,ops::Range};
const MIN_DISTANCE: f32 = 1.;
pub struct GameCameraPlugin; pub struct GameCameraPlugin;
impl Plugin for GameCameraPlugin { impl Plugin for GameCameraPlugin {
@ -57,7 +59,18 @@ pub fn camera() -> impl Scene {
center.z + grid.size.z as f32 * 1.2).looking_at(center, Vec3::Y)) center.z + grid.size.z as f32 * 1.2).looking_at(center, Vec3::Y))
} }
) )
CameraOrbit template(
|ctx| {
let grid = ctx.resource::<Grid>();
let center = grid.size.as_vec3() * 0.5;
Ok(CameraOrbit {
distance: vec3(
center.x + grid.size.x as f32 * 1.2,
grid.size.y as f32 * 1.2,
center.z + grid.size.z as f32 * 1.2).length(),
..default()
})
})
} }
} }
@ -97,12 +110,8 @@ pub fn orbit(
} }
let center = grid.size.as_vec3() * 0.5; let center = grid.size.as_vec3() * 0.5;
let min_distance = vec3(
center.x + grid.size.x as f32 * 1.2,
grid.size.y as f32 * 1.2,
center.z + grid.size.z as f32 * 1.2).length();
orbit.distance = (orbit.distance-mouse_scroll.delta.y).max(min_distance); orbit.distance = (orbit.distance-mouse_scroll.delta.y).max(MIN_DISTANCE);
transform.translation = center + orbit.center_offset -transform.forward() * orbit.distance; transform.translation = center + orbit.center_offset -transform.forward() * orbit.distance;
} }