X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=vmdl.h;h=d6564a3a87dfe4afbb5d1d2eb73d1bb663d51ab8;hp=51b8f05c19264dff7ae28991fb4ad08c7a1154f8;hb=d7339f0f28ca5b35ad60a393ca270cbae1a154c6;hpb=a97099abba0a239e20929f04ece9d6839c96ac14 diff --git a/vmdl.h b/vmdl.h index 51b8f05..d6564a3 100644 --- a/vmdl.h +++ b/vmdl.h @@ -460,6 +460,9 @@ typedef struct float *vertices; u32 num_vertices; + + // Bounding box + boxf bounds; } mdl_mesh_t; @@ -469,6 +472,14 @@ void mdl_free( mdl_mesh_t *m ) free( m->vertices ); } +void mdl_error( mdl_mesh_t *m ) +{ + m->num_indices = 0; + m->num_vertices = 0; + m->indices = NULL; + m->vertices = NULL; +} + int mdl_from_find_files( const char *mdlname, mdl_mesh_t *ctx ) { // Read entire files into memory (inline functions map memory) @@ -477,20 +488,24 @@ int mdl_from_find_files( const char *mdlname, mdl_mesh_t *ctx ) strcpy( path, mdlname ); csr_stripext( path ); strcat( path, ".dx90.vtx" ); - VTXFileHeader_t *pVtxHdr = (VTXFileHeader_t *)csr_asset_read( path ); + VTXFileHeader_t *pVtxHdr = (VTXFileHeader_t *)valve_fs_get( path ); - if( !pVtxHdr ) + if( !pVtxHdr ) + { + mdl_error( ctx ); return 0; + } // .VVD strcpy( path, mdlname ); csr_stripext( path ); strcat( path, ".vvd" ); - vertexFileHeader_t *pVvdHdr = (vertexFileHeader_t *)csr_asset_read( path ); + vertexFileHeader_t *pVvdHdr = (vertexFileHeader_t *)valve_fs_get( path ); if( !pVvdHdr ) { free( pVtxHdr ); + mdl_error( ctx ); return 0; } @@ -498,15 +513,19 @@ int mdl_from_find_files( const char *mdlname, mdl_mesh_t *ctx ) strcpy( path, mdlname ); csr_stripext( path ); strcat( path, ".mdl" ); - studiohdr_t *pMdl = (studiohdr_t *)csr_asset_read( path ); + studiohdr_t *pMdl = (studiohdr_t *)valve_fs_get( path ); if( !pMdl ) { free( pVtxHdr ); free( pVvdHdr ); + mdl_error( ctx ); return 0; } + v3_copy( pMdl->hull_min, ctx->bounds[0] ); + v3_copy( pMdl->hull_max, ctx->bounds[1] ); + ctx->num_indices = vtx_count_indices( pVtxHdr ); // Allocate and read indices