From 91f8652ecebd054299bed5952fb04d7ea82976d2 Mon Sep 17 00:00:00 2001 From: Quaternions Date: Thu, 26 Oct 2023 20:24:43 -0700 Subject: [PATCH] fix fix --- src/physics.rs | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/physics.rs b/src/physics.rs index a42ad7c..2c59391 100644 --- a/src/physics.rs +++ b/src/physics.rs @@ -975,7 +975,8 @@ impl PhysicsState { //collect x match collision_data.face { TreyMeshFace::Top|TreyMeshFace::Back|TreyMeshFace::Bottom|TreyMeshFace::Front=>{ - for &t in zeroes2(mesh0.max.x()-mesh1.min.x(),v.x(),a.x()/2){ + let (roots,nroots)=zeroes2(mesh0.max.x()-mesh1.min.x(),v.x(),a.x()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -988,7 +989,8 @@ impl PhysicsState { break; } } - for &t in zeroes2(mesh0.min.x()-mesh1.max.x(),v.x(),a.x()/2){ + let (roots,nroots)=zeroes2(mesh0.min.x()-mesh1.max.x(),v.x(),a.x()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -1020,7 +1022,8 @@ impl PhysicsState { //collect y match collision_data.face { TreyMeshFace::Left|TreyMeshFace::Back|TreyMeshFace::Right|TreyMeshFace::Front=>{ - for &t in zeroes2(mesh0.max.y()-mesh1.min.y(),v.y(),a.y()/2){ + let (roots,nroots)=zeroes2(mesh0.max.y()-mesh1.min.y(),v.y(),a.y()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -1033,7 +1036,8 @@ impl PhysicsState { break; } } - for &t in zeroes2(mesh0.min.y()-mesh1.max.y(),v.y(),a.y()/2){ + let (roots,nroots)=zeroes2(mesh0.min.y()-mesh1.max.y(),v.y(),a.y()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -1065,7 +1069,8 @@ impl PhysicsState { //collect z match collision_data.face { TreyMeshFace::Left|TreyMeshFace::Bottom|TreyMeshFace::Right|TreyMeshFace::Top=>{ - for &t in zeroes2(mesh0.max.z()-mesh1.min.z(),v.z(),a.z()/2){ + let (roots,nroots)=zeroes2(mesh0.max.z()-mesh1.min.z(),v.z(),a.z()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -1078,7 +1083,8 @@ impl PhysicsState { break; } } - for &t in zeroes2(mesh0.min.z()-mesh1.max.z(),v.z(),a.z()/2){ + let (roots,nroots)=zeroes2(mesh0.min.z()-mesh1.max.z(),v.z(),a.z()/2); + for &t in &roots[0..nroots]{ //negative t = back in time //must be moving towards surface to collide //must beat the current soonest collision time @@ -1124,7 +1130,8 @@ impl PhysicsState { let mut best_time=time_limit; let mut best_face:Option=None; //collect x - for &t in zeroes2(mesh0.max.x()-mesh1.min.x(),v.x(),a.x()/2){ + let (roots,nroots)=zeroes2(mesh0.max.x()-mesh1.min.x(),v.x(),a.x()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface @@ -1140,7 +1147,8 @@ impl PhysicsState { } } } - for &t in zeroes2(mesh0.min.x()-mesh1.max.x(),v.x(),a.x()/2){ + let (roots,nroots)=zeroes2(mesh0.min.x()-mesh1.max.x(),v.x(),a.x()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface @@ -1157,7 +1165,8 @@ impl PhysicsState { } } //collect y - for &t in zeroes2(mesh0.max.y()-mesh1.min.y(),v.y(),a.y()/2){ + let (roots,nroots)=zeroes2(mesh0.max.y()-mesh1.min.y(),v.y(),a.y()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface @@ -1173,7 +1182,8 @@ impl PhysicsState { } } } - for &t in zeroes2(mesh0.min.y()-mesh1.max.y(),v.y(),a.y()/2){ + let (roots,nroots)=zeroes2(mesh0.min.y()-mesh1.max.y(),v.y(),a.y()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface @@ -1190,7 +1200,8 @@ impl PhysicsState { } } //collect z - for &t in zeroes2(mesh0.max.z()-mesh1.min.z(),v.z(),a.z()/2){ + let (roots,nroots)=zeroes2(mesh0.max.z()-mesh1.min.z(),v.z(),a.z()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface @@ -1206,7 +1217,8 @@ impl PhysicsState { } } } - for &t in zeroes2(mesh0.min.z()-mesh1.max.z(),v.z(),a.z()/2){ + let (roots,nroots)=zeroes2(mesh0.min.z()-mesh1.max.z(),v.z(),a.z()/2); + for &t in &roots[0..nroots]{ //must collide now or in the future //must beat the current soonest collision time //must be moving towards surface