diff --git a/engine/physics/src/face_crawler.rs b/engine/physics/src/face_crawler.rs index 0d10cb6..8b95f43 100644 --- a/engine/physics/src/face_crawler.rs +++ b/engine/physics/src/face_crawler.rs @@ -2,6 +2,7 @@ use crate::model::{GigaTime,FEV,MeshQuery,DirectedEdge}; use strafesnet_common::integer::{Fixed,Ratio,vec3::Vector3}; use crate::physics::{Time,Body}; +#[derive(Debug)] enum Transition<M:MeshQuery>{ Miss, 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 // This is hardcoded for MinkowskiMesh lol 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()) }; 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::Next(next_fev,next_time)=>(self,body_time)=(next_fev,next_time), Transition::Hit(face,time)=>return CrawlResult::Hit(face,time), diff --git a/engine/physics/src/model.rs b/engine/physics/src/model.rs index 25b0f24..caf9f16 100644 --- a/engine/physics/src/model.rs +++ b/engine/physics/src/model.rs @@ -68,16 +68,17 @@ pub enum FEV<M:MeshQuery>{ } //use Unit32 #[repr(C)] for map files -#[derive(Clone,Hash,Eq,PartialEq)] +#[derive(Clone,Debug,Hash,Eq,PartialEq)] struct Face{ normal:Planar64Vec3, dot:Planar64, } +#[derive(Debug)] struct Vert(Planar64Vec3); pub trait MeshQuery{ - type Face:Copy; - type Edge:Copy+DirectedEdge; - type Vert:Copy; + type Face:Copy+std::fmt::Debug; + type Edge:Copy+DirectedEdge+std::fmt::Debug; + type Vert:Copy+std::fmt::Debug; // Vertex must be Planar64Vec3 because it represents an actual position type Normal; type Offset; @@ -97,18 +98,22 @@ pub trait MeshQuery{ fn vert_edges(&self,vert_id:Self::Vert)->impl AsRef<[Self::Edge]>; fn vert_faces(&self,vert_id:Self::Vert)->impl AsRef<[Self::Face]>; } +#[derive(Debug)] struct FaceRefs{ edges:Vec<SubmeshDirectedEdgeId>, //verts:Vec<VertId>, } +#[derive(Debug)] struct EdgeRefs{ faces:[SubmeshFaceId;2],//left, right verts:[SubmeshVertId;2],//bottom, top } +#[derive(Debug)] struct VertRefs{ faces:Vec<SubmeshFaceId>, edges:Vec<SubmeshDirectedEdgeId>, } +#[derive(Debug)] pub struct PhysicsMeshData{ //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 @@ -118,6 +123,7 @@ pub struct PhysicsMeshData{ faces:Vec<Face>,//MeshFaceId indexes this list verts:Vec<Vert>,//MeshVertId indexes this list } +#[derive(Debug)] pub struct PhysicsMeshTopology{ //mapping of local ids to PhysicsMeshData ids faces:Vec<MeshFaceId>,//SubmeshFaceId indexes this list @@ -425,6 +431,7 @@ impl TryFrom<&model::Mesh> for PhysicsMesh{ } } +#[derive(Debug)] pub struct PhysicsMeshView<'a>{ data:&'a PhysicsMeshData, topology:&'a PhysicsMeshTopology, @@ -461,6 +468,7 @@ impl MeshQuery for PhysicsMeshView<'_>{ } } +#[derive(Debug)] pub struct PhysicsMeshTransform{ pub vertex:integer::Planar64Affine3, pub normal:integer::mat3::Matrix3<Fixed<2,64>>, @@ -476,6 +484,7 @@ impl PhysicsMeshTransform{ } } +#[derive(Debug)] pub struct TransformedMesh<'a>{ view:PhysicsMeshView<'a>, transform:&'a PhysicsMeshTransform, @@ -601,6 +610,7 @@ pub enum MinkowskiFace{ //FaceFace } +#[derive(Debug)] pub struct MinkowskiMesh<'a>{ mesh0: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)>{ + println!("=== physics setup ==="); self.closest_fev_not_inside(relative_body.clone(),start_time).and_then(|fev|{ + println!("=== physics crawl ==="); //continue forwards along the body parabola fev.crawl(self,relative_body,start_time,time_limit).hit() }) diff --git a/engine/physics/src/physics.rs b/engine/physics/src/physics.rs index 77a0059..f1a91e9 100644 --- a/engine/physics/src/physics.rs +++ b/engine/physics/src/physics.rs @@ -1672,6 +1672,7 @@ fn atomic_internal_instruction(state:&mut PhysicsState,data:&PhysicsData,ins:Tim } match ins.instruction{ InternalInstruction::CollisionStart(collision,_)=>{ + println!("yeaahhh!"); let mode=data.modes.get_mode(state.mode_state.get_mode_id()); match collision{ Collision::Contact(contact)=>collision_start_contact( diff --git a/lib/common/src/integer.rs b/lib/common/src/integer.rs index 5c79f5e..787d0fb 100644 --- a/lib/common/src/integer.rs +++ b/lib/common/src/integer.rs @@ -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 matrix3:Planar64Mat3,//includes scale above 1 pub translation:Planar64Vec3,