Проектная работа - WIP
This commit is contained in:
@@ -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() {
|
||||
// движение вправо
|
||||
|
||||
Reference in New Issue
Block a user