Проектная работа - WIP

This commit is contained in:
2 changed files with 88 additions and 0 deletions
+81
View File
@@ -83,6 +83,40 @@ fn find_grid_bound(old: f32, new: f32, grid: f32) -> f32 {
} }
} }
/// Разбиение изменения координаты по границам сетки
fn split_by_grid(src: f32, dst: f32, grid: f32) -> Vec<(f32, f32)> {
if grid <= 0.0 {
return Vec::default();
};
let old_grid = src / grid;
let new_grid = dst / grid;
let old_grid_right = old_grid.ceil();
let new_grid_right = new_grid.ceil();
let mut output = Vec::with_capacity(2);
if src < dst {
let mut src: f32 = src;
for step in old_grid_right as i32..new_grid_right as i32 {
let step = step as f32 * grid;
output.push((step, step - src));
src = step;
}
output.push((dst, dst - src));
} else {
let mut dst: f32 = dst;
for step in new_grid_right as i32..old_grid_right as i32 {
let step = step as f32 * grid;
output.push((dst, dst - step));
dst = step;
}
output.push((dst, dst - src));
output.reverse();
}
output
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::gameplay::*; use crate::gameplay::*;
@@ -126,4 +160,51 @@ mod test {
assert!(find_grid_bound(1.0, 2.0, -0.0).is_nan()); assert!(find_grid_bound(1.0, 2.0, -0.0).is_nan());
assert!(find_grid_bound(1.0, 2.0, -0.1).is_nan()); assert!(find_grid_bound(1.0, 2.0, -0.1).is_nan());
} }
#[test]
fn test_split_by_grid() {
// движение вправо
assert_eq!(split_by_grid(1.0, 4.0, 5.0), vec![(4.0, 3.0)]);
assert_eq!(split_by_grid(3.0, 5.0, 5.0), vec![(5.0, 2.0)]);
assert_eq!(split_by_grid(3.0, 6.0, 5.0), vec![(5.0, 2.0), (6.0, 1.0)]);
assert_eq!(split_by_grid(3.0, 10.0, 5.0), vec![(5.0, 2.0), (10.0, 5.0)]);
assert_eq!(
split_by_grid(3.0, 11.0, 5.0),
vec![(5.0, 2.0), (10.0, 5.0), (11.0, 1.0)]
);
assert_eq!(split_by_grid(-2.0, 3.0, 5.0), vec![(0.0, 2.0), (3.0, 3.0)]);
assert_eq!(
split_by_grid(-6.0, 7.0, 5.0),
vec![(-5.0, 1.0), (0.0, 5.0), (5.0, 5.0), (7.0, 2.0)]
);
assert_eq!(
split_by_grid(-6.0, -2.0, 5.0),
vec![(-5.0, 1.0), (-2.0, 3.0)]
);
// движение влево
assert_eq!(split_by_grid(4.0, 1.0, 5.0), vec![(1.0, -3.0)]);
assert_eq!(split_by_grid(5.0, 3.0, 5.0), vec![(3.0, -2.0)]);
assert_eq!(split_by_grid(6.0, 3.0, 5.0), vec![(5.0, -1.0), (3.0, -2.0)]);
assert_eq!(
split_by_grid(10.0, 3.0, 5.0),
vec![(5.0, -5.0), (3.0, -2.0)]
);
assert_eq!(
split_by_grid(11.0, 3.0, 5.0),
vec![(10.0, -1.0), (5.0, -5.0), (3.0, -2.0)]
);
assert_eq!(
split_by_grid(3.0, -2.0, 5.0),
vec![(0.0, -3.0), (-2.0, -2.0)]
);
assert_eq!(
split_by_grid(7.0, -6.0, 5.0),
vec![(5.0, -2.0), (0.0, -5.0), (-5.0, -5.0), (-6.0, -1.0)]
);
assert_eq!(
split_by_grid(-2.0, -6.0, 5.0),
vec![(-5.0, -3.0), (-6.0, -1.0)]
);
}
} }
+7
View File
@@ -36,3 +36,10 @@ fn test_floor() {
fn test_zero() { fn test_zero() {
dbg!(-0.0_f32 == 0.0_f32); dbg!(-0.0_f32 == 0.0_f32);
} }
#[test]
fn test_ranges() {
for x in 0..5 {
dbg!(x);
}
}