compiler error fallout

This commit is contained in:
Quaternions 2024-02-07 22:29:26 -08:00
parent 720b65d71e
commit 4a84d3a419
2 changed files with 32 additions and 13 deletions

View File

@ -1,6 +1,6 @@
use std::borrow::{Borrow,Cow}; use std::borrow::{Borrow,Cow};
use std::collections::{HashSet,HashMap}; use std::collections::{HashSet,HashMap};
use strafesnet_common::model::{self,PolygonIter}; use strafesnet_common::model::{self,MeshId,PolygonIter};
use strafesnet_common::zeroes; use strafesnet_common::zeroes;
use strafesnet_common::integer::{self,Planar64,Planar64Vec3}; use strafesnet_common::integer::{self,Planar64,Planar64Vec3};
@ -110,8 +110,18 @@ struct PhysicsMeshTopology{
edge_topology:Vec<EdgeRefs>, edge_topology:Vec<EdgeRefs>,
vert_topology:Vec<VertRefs>, vert_topology:Vec<VertRefs>,
} }
#[derive(id::Id)] #[derive(Hash,id::Id,Eq,PartialEq)]
pub struct PhysicsMeshId(u32); pub struct PhysicsMeshId(u32);
impl Into<MeshId> for PhysicsMeshId{
fn into(self)->MeshId{
MeshId::new(self.0)
}
}
impl From<MeshId> for PhysicsMeshId{
fn from(value:MeshId)->Self{
Self::new(value.get())
}
}
#[derive(Debug,Clone,Copy,Hash,id::Id,Eq,PartialEq)] #[derive(Debug,Clone,Copy,Hash,id::Id,Eq,PartialEq)]
pub struct PhysicsSubmeshId(u32); pub struct PhysicsSubmeshId(u32);
pub struct PhysicsMesh{ pub struct PhysicsMesh{
@ -417,9 +427,9 @@ impl MeshQuery<SubmeshFaceId,SubmeshDirectedEdgeId,SubmeshVertId> for PhysicsMes
} }
pub struct PhysicsMeshTransform{ pub struct PhysicsMeshTransform{
vertex:integer::Planar64Affine3, pub vertex:integer::Planar64Affine3,
normal:integer::Planar64Mat3, pub normal:integer::Planar64Mat3,
det:Planar64, pub det:Planar64,
} }
impl PhysicsMeshTransform{ impl PhysicsMeshTransform{
pub const fn new(transform:integer::Planar64Affine3)->Self{ pub const fn new(transform:integer::Planar64Affine3)->Self{

View File

@ -6,7 +6,7 @@ use strafesnet_common::bvh;
use strafesnet_common::map; use strafesnet_common::map;
use strafesnet_common::aabb; use strafesnet_common::aabb;
use strafesnet_common::gameplay_modes; use strafesnet_common::gameplay_modes;
use strafesnet_common::gameplay_attributes; use strafesnet_common::gameplay_attributes::{self,CollisionAttributesId};
use strafesnet_common::model::ModelId; use strafesnet_common::model::ModelId;
use strafesnet_common::gameplay_style::{self,StyleModifiers}; use strafesnet_common::gameplay_style::{self,StyleModifiers};
use strafesnet_common::instruction::{self,InstructionEmitter,InstructionConsumer,TimedInstruction}; use strafesnet_common::instruction::{self,InstructionEmitter,InstructionConsumer,TimedInstruction};
@ -170,17 +170,17 @@ impl PhysicsModels{
//TODO: "statically" verify the maps don't refer to any nonexistant data, if they do delete the references. //TODO: "statically" verify the maps don't refer to any nonexistant data, if they do delete the references.
//then I can make these getter functions unchecked. //then I can make these getter functions unchecked.
fn mesh(&self,convex_mesh_id:ConvexMeshId)->TransformedMesh{ fn mesh(&self,convex_mesh_id:ConvexMeshId)->TransformedMesh{
let model_idx=convex_mesh_id.model_id.get() as usize; let model=self.models[&convex_mesh_id.model_id];
TransformedMesh::new( TransformedMesh::new(
self.meshes[model_idx].submesh_view(convex_mesh_id.submesh_id), self.meshes[&model.mesh_id].submesh_view(convex_mesh_id.submesh_id),
&self.models[model_idx].transform &model.transform
) )
} }
fn model(&self,model_id:PhysicsModelId)->&PhysicsModel{ fn model(&self,model_id:PhysicsModelId)->&PhysicsModel{
&self.models[model_id.get() as usize] &self.models[&model_id]
} }
fn attr(&self,model_id:PhysicsModelId)->&PhysicsCollisionAttributes{ fn attr(&self,model_id:PhysicsModelId)->&PhysicsCollisionAttributes{
&self.attributes[self.models[model_id.get() as usize].attr_id.get() as usize] &self.attributes[&self.models[&model_id].attr_id]
} }
fn push_mesh(&mut self,mesh:PhysicsMesh){ fn push_mesh(&mut self,mesh:PhysicsMesh){
self.meshes.push(mesh); self.meshes.push(mesh);
@ -470,9 +470,18 @@ impl TryFrom<&gameplay_attributes::CollisionAttributes> for PhysicsCollisionAttr
} }
} }
} }
#[derive(id::Id)] #[derive(Hash,id::Id,Eq,PartialEq)]
struct PhysicsAttributesId(u32); struct PhysicsAttributesId(u32);
impl Into<CollisionAttributesId> for PhysicsAttributesId{
fn into(self)->CollisionAttributesId{
CollisionAttributesId::new(self.0)
}
}
impl From<CollisionAttributesId> for PhysicsAttributesId{
fn from(value:CollisionAttributesId)->Self{
Self::new(value.get())
}
}
//unique physics meshes indexed by this //unique physics meshes indexed by this
#[derive(Debug,Clone,Copy,Eq,Hash,PartialEq)] #[derive(Debug,Clone,Copy,Eq,Hash,PartialEq)]
struct ConvexMeshId{ struct ConvexMeshId{