fix not moving
This commit is contained in:
parent
d191538aa8
commit
8839b8fbb3
@ -354,22 +354,26 @@ impl MinkowskiMesh<'_>{
|
|||||||
MinkowskiVert::VertVert(self.mesh0.farthest_vert(dir),self.mesh1.farthest_vert(-dir))
|
MinkowskiVert::VertVert(self.mesh0.farthest_vert(dir),self.mesh1.farthest_vert(-dir))
|
||||||
}
|
}
|
||||||
pub fn predict_collision_in(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time)->Option<(MinkowskiFace,crate::integer::Time)>{
|
pub fn predict_collision_in(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time)->Option<(MinkowskiFace,crate::integer::Time)>{
|
||||||
let start_vert=FEV::<MinkowskiFace,MinkowskiDirectedEdge,MinkowskiVert>::Vert(self.farthest_vert((-relative_body.clone()).infinity_dir()));
|
(-relative_body.clone()).infinity_dir().map_or(None,|dir|{
|
||||||
match crate::face_crawler::crawl_fev_from_negative_infinity(start_vert,self,relative_body,relative_body.time){
|
let start_vert=FEV::<MinkowskiFace,MinkowskiDirectedEdge,MinkowskiVert>::Vert(self.farthest_vert(dir));
|
||||||
crate::face_crawler::CrawlResult::Closest(fev)=>{
|
match crate::face_crawler::crawl_fev_from_negative_infinity(start_vert,self,relative_body,relative_body.time){
|
||||||
crate::face_crawler::crawl_fev(fev,self,relative_body,relative_body.time,time_limit)
|
crate::face_crawler::CrawlResult::Closest(fev)=>{
|
||||||
},
|
crate::face_crawler::crawl_fev(fev,self,relative_body,relative_body.time,time_limit)
|
||||||
crate::face_crawler::CrawlResult::Hit(_,_)=>None,//already in or passed
|
},
|
||||||
}
|
crate::face_crawler::CrawlResult::Hit(_,_)=>None,//already in or passed
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
pub fn predict_collision_out(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time)->Option<(MinkowskiFace,crate::integer::Time)>{
|
pub fn predict_collision_out(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time)->Option<(MinkowskiFace,crate::integer::Time)>{
|
||||||
let start_vert=FEV::<MinkowskiFace,MinkowskiDirectedEdge,MinkowskiVert>::Vert(self.farthest_vert(relative_body.infinity_dir()));
|
relative_body.infinity_dir().map_or(None,|dir|{
|
||||||
match crate::face_crawler::crawl_fev_from_negative_infinity(start_vert,self,&-relative_body.clone(),-time_limit){
|
let start_vert=FEV::<MinkowskiFace,MinkowskiDirectedEdge,MinkowskiVert>::Vert(self.farthest_vert(dir));
|
||||||
crate::face_crawler::CrawlResult::Closest(fev)=>{
|
match crate::face_crawler::crawl_fev_from_negative_infinity(start_vert,self,&-relative_body.clone(),-time_limit){
|
||||||
crate::face_crawler::crawl_fev(fev,self,&-relative_body.clone(),-time_limit,-relative_body.time).map(|t|(t.0,-t.1))
|
crate::face_crawler::CrawlResult::Closest(fev)=>{
|
||||||
},
|
crate::face_crawler::crawl_fev(fev,self,&-relative_body.clone(),-time_limit,-relative_body.time).map(|t|(t.0,-t.1))
|
||||||
crate::face_crawler::CrawlResult::Hit(face,time)=>Some((face,-time)),
|
},
|
||||||
}
|
crate::face_crawler::CrawlResult::Hit(face,time)=>Some((face,-time)),
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
pub fn predict_collision_face_out(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time,contact_face_id:MinkowskiFace)->Option<(MinkowskiEdge,crate::integer::Time)>{
|
pub fn predict_collision_face_out(&self,relative_body:&crate::physics::Body,time_limit:crate::integer::Time,contact_face_id:MinkowskiFace)->Option<(MinkowskiEdge,crate::integer::Time)>{
|
||||||
//no algorithm needed, there is only one state and two cases (Edge,None)
|
//no algorithm needed, there is only one state and two cases (Edge,None)
|
||||||
|
@ -968,11 +968,15 @@ impl Body{
|
|||||||
self.velocity=self.extrapolated_velocity(time);
|
self.velocity=self.extrapolated_velocity(time);
|
||||||
self.time=time;
|
self.time=time;
|
||||||
}
|
}
|
||||||
pub fn infinity_dir(&self)->Planar64Vec3{
|
pub fn infinity_dir(&self)->Option<Planar64Vec3>{
|
||||||
if self.acceleration==Planar64Vec3::ZERO{
|
if self.acceleration==Planar64Vec3::ZERO{
|
||||||
self.velocity
|
if self.velocity==Planar64Vec3::ZERO{
|
||||||
|
None
|
||||||
|
}else{
|
||||||
|
Some(self.velocity)
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
self.acceleration
|
Some(self.acceleration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user