debug
This commit is contained in:
parent
9ecb494748
commit
a52d46b7cc
@ -2,6 +2,7 @@ use crate::model::{GigaTime,FEV,MeshQuery,DirectedEdge};
|
|||||||
use strafesnet_common::integer::{Fixed,Ratio,vec3::Vector3};
|
use strafesnet_common::integer::{Fixed,Ratio,vec3::Vector3};
|
||||||
use crate::physics::{Time,Body};
|
use crate::physics::{Time,Body};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
enum Transition<M:MeshQuery>{
|
enum Transition<M:MeshQuery>{
|
||||||
Miss,
|
Miss,
|
||||||
Next(FEV<M>,GigaTime),
|
Next(FEV<M>,GigaTime),
|
||||||
@ -27,7 +28,7 @@ impl<M:MeshQuery> CrawlResult<M>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F:Copy,M:MeshQuery<Normal=Vector3<F>,Offset=Fixed<4,128>>> FEV<M>
|
impl<F:Copy,M:MeshQuery<Normal=Vector3<F>,Offset=Fixed<4,128>>+std::fmt::Debug> FEV<M>
|
||||||
where
|
where
|
||||||
// This is hardcoded for MinkowskiMesh lol
|
// This is hardcoded for MinkowskiMesh lol
|
||||||
M::Face:Copy,
|
M::Face:Copy,
|
||||||
@ -138,7 +139,9 @@ impl<F:Copy,M:MeshQuery<Normal=Vector3<F>,Offset=Fixed<4,128>>> FEV<M>
|
|||||||
Ratio::new(r.num.widen_4(),r.den.widen_4())
|
Ratio::new(r.num.widen_4(),r.den.widen_4())
|
||||||
};
|
};
|
||||||
for _ in 0..20{
|
for _ in 0..20{
|
||||||
match self.next_transition(body_time,mesh,relative_body,time_limit){
|
let transition=self.next_transition(body_time,mesh,relative_body,time_limit);
|
||||||
|
println!("transition={transition:?}");
|
||||||
|
match transition{
|
||||||
Transition::Miss=>return CrawlResult::Miss(self),
|
Transition::Miss=>return CrawlResult::Miss(self),
|
||||||
Transition::Next(next_fev,next_time)=>(self,body_time)=(next_fev,next_time),
|
Transition::Next(next_fev,next_time)=>(self,body_time)=(next_fev,next_time),
|
||||||
Transition::Hit(face,time)=>return CrawlResult::Hit(face,time),
|
Transition::Hit(face,time)=>return CrawlResult::Hit(face,time),
|
||||||
|
@ -68,16 +68,17 @@ pub enum FEV<M:MeshQuery>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//use Unit32 #[repr(C)] for map files
|
//use Unit32 #[repr(C)] for map files
|
||||||
#[derive(Clone,Hash,Eq,PartialEq)]
|
#[derive(Clone,Debug,Hash,Eq,PartialEq)]
|
||||||
struct Face{
|
struct Face{
|
||||||
normal:Planar64Vec3,
|
normal:Planar64Vec3,
|
||||||
dot:Planar64,
|
dot:Planar64,
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
struct Vert(Planar64Vec3);
|
struct Vert(Planar64Vec3);
|
||||||
pub trait MeshQuery{
|
pub trait MeshQuery{
|
||||||
type Face:Copy;
|
type Face:Copy+std::fmt::Debug;
|
||||||
type Edge:Copy+DirectedEdge;
|
type Edge:Copy+DirectedEdge+std::fmt::Debug;
|
||||||
type Vert:Copy;
|
type Vert:Copy+std::fmt::Debug;
|
||||||
// Vertex must be Planar64Vec3 because it represents an actual position
|
// Vertex must be Planar64Vec3 because it represents an actual position
|
||||||
type Normal;
|
type Normal;
|
||||||
type Offset;
|
type Offset;
|
||||||
@ -97,18 +98,22 @@ pub trait MeshQuery{
|
|||||||
fn vert_edges(&self,vert_id:Self::Vert)->impl AsRef<[Self::Edge]>;
|
fn vert_edges(&self,vert_id:Self::Vert)->impl AsRef<[Self::Edge]>;
|
||||||
fn vert_faces(&self,vert_id:Self::Vert)->impl AsRef<[Self::Face]>;
|
fn vert_faces(&self,vert_id:Self::Vert)->impl AsRef<[Self::Face]>;
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
struct FaceRefs{
|
struct FaceRefs{
|
||||||
edges:Vec<SubmeshDirectedEdgeId>,
|
edges:Vec<SubmeshDirectedEdgeId>,
|
||||||
//verts:Vec<VertId>,
|
//verts:Vec<VertId>,
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
struct EdgeRefs{
|
struct EdgeRefs{
|
||||||
faces:[SubmeshFaceId;2],//left, right
|
faces:[SubmeshFaceId;2],//left, right
|
||||||
verts:[SubmeshVertId;2],//bottom, top
|
verts:[SubmeshVertId;2],//bottom, top
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
struct VertRefs{
|
struct VertRefs{
|
||||||
faces:Vec<SubmeshFaceId>,
|
faces:Vec<SubmeshFaceId>,
|
||||||
edges:Vec<SubmeshDirectedEdgeId>,
|
edges:Vec<SubmeshDirectedEdgeId>,
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct PhysicsMeshData{
|
pub struct PhysicsMeshData{
|
||||||
//this contains all real and virtual faces used in both the complete mesh and convex submeshes
|
//this contains all real and virtual faces used in both the complete mesh and convex submeshes
|
||||||
//faces are sorted such that all faces that belong to the complete mesh appear first, and then
|
//faces are sorted such that all faces that belong to the complete mesh appear first, and then
|
||||||
@ -118,6 +123,7 @@ pub struct PhysicsMeshData{
|
|||||||
faces:Vec<Face>,//MeshFaceId indexes this list
|
faces:Vec<Face>,//MeshFaceId indexes this list
|
||||||
verts:Vec<Vert>,//MeshVertId indexes this list
|
verts:Vec<Vert>,//MeshVertId indexes this list
|
||||||
}
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct PhysicsMeshTopology{
|
pub struct PhysicsMeshTopology{
|
||||||
//mapping of local ids to PhysicsMeshData ids
|
//mapping of local ids to PhysicsMeshData ids
|
||||||
faces:Vec<MeshFaceId>,//SubmeshFaceId indexes this list
|
faces:Vec<MeshFaceId>,//SubmeshFaceId indexes this list
|
||||||
@ -425,6 +431,7 @@ impl TryFrom<&model::Mesh> for PhysicsMesh{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct PhysicsMeshView<'a>{
|
pub struct PhysicsMeshView<'a>{
|
||||||
data:&'a PhysicsMeshData,
|
data:&'a PhysicsMeshData,
|
||||||
topology:&'a PhysicsMeshTopology,
|
topology:&'a PhysicsMeshTopology,
|
||||||
@ -461,6 +468,7 @@ impl MeshQuery for PhysicsMeshView<'_>{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct PhysicsMeshTransform{
|
pub struct PhysicsMeshTransform{
|
||||||
pub vertex:integer::Planar64Affine3,
|
pub vertex:integer::Planar64Affine3,
|
||||||
pub normal:integer::mat3::Matrix3<Fixed<2,64>>,
|
pub normal:integer::mat3::Matrix3<Fixed<2,64>>,
|
||||||
@ -476,6 +484,7 @@ impl PhysicsMeshTransform{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct TransformedMesh<'a>{
|
pub struct TransformedMesh<'a>{
|
||||||
view:PhysicsMeshView<'a>,
|
view:PhysicsMeshView<'a>,
|
||||||
transform:&'a PhysicsMeshTransform,
|
transform:&'a PhysicsMeshTransform,
|
||||||
@ -601,6 +610,7 @@ pub enum MinkowskiFace{
|
|||||||
//FaceFace
|
//FaceFace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct MinkowskiMesh<'a>{
|
pub struct MinkowskiMesh<'a>{
|
||||||
mesh0:TransformedMesh<'a>,
|
mesh0:TransformedMesh<'a>,
|
||||||
mesh1:TransformedMesh<'a>,
|
mesh1:TransformedMesh<'a>,
|
||||||
@ -745,7 +755,9 @@ impl MinkowskiMesh<'_>{
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
pub fn predict_collision_in(&self,relative_body:&Body,Range{start:start_time,end:time_limit}:Range<Time>)->Option<(MinkowskiFace,GigaTime)>{
|
pub fn predict_collision_in(&self,relative_body:&Body,Range{start:start_time,end:time_limit}:Range<Time>)->Option<(MinkowskiFace,GigaTime)>{
|
||||||
|
println!("=== physics setup ===");
|
||||||
self.closest_fev_not_inside(relative_body.clone(),start_time).and_then(|fev|{
|
self.closest_fev_not_inside(relative_body.clone(),start_time).and_then(|fev|{
|
||||||
|
println!("=== physics crawl ===");
|
||||||
//continue forwards along the body parabola
|
//continue forwards along the body parabola
|
||||||
fev.crawl(self,relative_body,start_time,time_limit).hit()
|
fev.crawl(self,relative_body,start_time,time_limit).hit()
|
||||||
})
|
})
|
||||||
|
@ -1672,6 +1672,7 @@ fn atomic_internal_instruction(state:&mut PhysicsState,data:&PhysicsData,ins:Tim
|
|||||||
}
|
}
|
||||||
match ins.instruction{
|
match ins.instruction{
|
||||||
InternalInstruction::CollisionStart(collision,_)=>{
|
InternalInstruction::CollisionStart(collision,_)=>{
|
||||||
|
println!("yeaahhh!");
|
||||||
let mode=data.modes.get_mode(state.mode_state.get_mode_id());
|
let mode=data.modes.get_mode(state.mode_state.get_mode_id());
|
||||||
match collision{
|
match collision{
|
||||||
Collision::Contact(contact)=>collision_start_contact(
|
Collision::Contact(contact)=>collision_start_contact(
|
||||||
|
@ -648,7 +648,7 @@ pub mod mat3{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone,Copy,Default,Hash,Eq,PartialEq)]
|
#[derive(Clone,Copy,Debug,Default,Hash,Eq,PartialEq)]
|
||||||
pub struct Planar64Affine3{
|
pub struct Planar64Affine3{
|
||||||
pub matrix3:Planar64Mat3,//includes scale above 1
|
pub matrix3:Planar64Mat3,//includes scale above 1
|
||||||
pub translation:Planar64Vec3,
|
pub translation:Planar64Vec3,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user