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

This commit is contained in:
5 changed files with 48 additions and 89 deletions
-76
View File
@@ -40,42 +40,6 @@ pub fn moving(time: Res<Time>, query: Query<(&mut Transform, &mut Inert, &Direct
}
}
fn get_overflow(grid: f32, coord: f32, delta: f32) -> f32 {
let rem = coord % grid;
let rem = if rem < 0.0 { grid + rem } else { rem };
let new = rem + delta;
if new >= 0.0 && new <= grid {
0.0
} else {
new % grid
}
}
/// Найти значение значение на границе сетки, если она находится между значениями old и new
fn find_grid_bound(old: f32, new: f32, grid: f32) -> f32 {
use std::f32::NAN;
if grid <= 0.0 {
return NAN;
};
let old_grid = old / grid;
let new_grid = new / grid;
let old_grid_left = old_grid.floor();
let old_grid_right = old_grid.ceil();
let new_grid_left = new_grid.floor();
let new_grid_right = new_grid.ceil();
if old_grid_right == new_grid_left {
old_grid_right * grid
} else if old_grid_left == new_grid_right {
old_grid_left * grid
} else {
NAN
}
}
/// Разбиение изменения координаты по границам сетки
fn split_by_grid(src: f32, dst: f32, grid: f32) -> Vec<(f32, f32)> {
if grid <= 0.0 {
@@ -114,46 +78,6 @@ fn split_by_grid(src: f32, dst: f32, grid: f32) -> Vec<(f32, f32)> {
mod test {
use crate::gameplay::*;
#[test]
fn test_get_overflow() {
assert_eq!(get_overflow(5.0, -6.0, 3.0), 2.0);
assert_eq!(get_overflow(5.0, 6.0, 3.0), 0.0);
assert_eq!(get_overflow(5.0, -6.0, -3.0), 0.0);
assert_eq!(get_overflow(5.0, 6.0, -3.0), -2.0);
}
#[test]
fn test_find_grid_bound() {
// проверка с положительными значениями old и new
assert!(find_grid_bound(1.0, 4.0, 5.0).is_nan());
assert!(find_grid_bound(4.0, 1.0, 5.0).is_nan());
assert_eq!(find_grid_bound(4.0, 6.0, 5.0), 5.0);
assert_eq!(find_grid_bound(6.0, 4.0, 5.0), 5.0);
assert!(find_grid_bound(1.0, 11.0, 5.0).is_nan());
assert!(find_grid_bound(11.0, 1.0, 5.0).is_nan());
// проверка с отрицательными значениями old и new
assert!(find_grid_bound(-1.0, -4.0, 5.0).is_nan());
assert!(find_grid_bound(-4.0, -1.0, 5.0).is_nan());
assert_eq!(find_grid_bound(-4.0, -6.0, 5.0), -5.0);
assert_eq!(find_grid_bound(-6.0, -4.0, 5.0), -5.0);
assert!(find_grid_bound(-1.0, -11.0, 5.0).is_nan());
assert!(find_grid_bound(-11.0, -1.0, 5.0).is_nan());
// проверка перехода через 0
assert_eq!(find_grid_bound(-1.0, 1.0, 5.0), 0.0);
assert_eq!(find_grid_bound(1.0, -1.0, 5.0), 0.0);
assert_eq!(find_grid_bound(-1.0, 1.0, 10.0), 0.0);
assert_eq!(find_grid_bound(1.0, -1.0, 10.0), 0.0);
assert!(find_grid_bound(-1.0, 10.0, 5.0).is_nan());
assert!(find_grid_bound(-10.0, 1.0, 5.0).is_nan());
// проверка при grid <= 0
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());
}
#[test]
fn test_split_by_grid() {
// движение вправо