projects
/
csRadar.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed instance loading forget to append basepath.. other path fixes (windows)
[csRadar.git]
/
vmf.h
diff --git
a/vmf.h
b/vmf.h
index c5f736b4474977214d8ef543dbb79ba1029c4a0d..740a3749da0af94070dabd7da5077aaae7ac8197 100644
(file)
--- a/
vmf.h
+++ b/
vmf.h
@@
-43,7
+43,7
@@
void vmf_load_models( vmf_map *map );
// Create matrix describing this entities transform
void vmf_entity_transform( vdf_node *ent, m4x3f mat );
// Create matrix describing this entities transform
void vmf_entity_transform( vdf_node *ent, m4x3f mat );
-
u32
vmf_visgroup_id( vdf_node *root, const char *name );
+
int
vmf_visgroup_id( vdf_node *root, const char *name );
int vmf_visgroup_match( vdf_node *ent, u32 target );
// Currently unused
int vmf_visgroup_match( vdf_node *ent, u32 target );
// Currently unused
@@
-74,7
+74,7
@@
struct vmf_vert
{
v3f co;
v3f nrm;
{
v3f co;
v3f nrm;
- v
2f xy
;
+ v
3f origin
;
};
struct vmf_face
};
struct vmf_face
@@
-422,7
+422,7
@@
ESolidResult solidgen_push( vmf_solid *ctx, vdf_node *node )
v3_divs( center, (float)numpoints, center );
for( ; vert_start < csr_sb_count( ctx->verts ); vert_start ++ )
{
v3_divs( center, (float)numpoints, center );
for( ; vert_start < csr_sb_count( ctx->verts ); vert_start ++ )
{
- v
2_copy( center, ctx->verts[ vert_start ].xy
);
+ v
3_copy( center, ctx->verts[ vert_start ].origin
);
}
// Sort each faces and trianglulalate them
}
// Sort each faces and trianglulalate them
@@
-522,6
+522,9
@@
ESolidResult solidgen_push( vmf_solid *ctx, vdf_node *node )
// Todo, put correct normal
v3_copy( (v3f){ 0.f, 0.f, 1.f }, vert->nrm );
// Todo, put correct normal
v3_copy( (v3f){ 0.f, 0.f, 1.f }, vert->nrm );
+
+ // Todo: use real bounds of displaced vertices
+ v3_copy( center, vert->origin );
}
}
}
}
@@
-692,15
+695,24
@@
u32 vmf_init_subvmf( vmf_map *map, const char *subvmf );
void vmf_load_all_instances( vmf_map *map, vdf_node *vmf )
{
void vmf_load_all_instances( vmf_map *map, vdf_node *vmf )
{
+ char nextvmf[ 512 ];
+ const char *base = kv_get( vmf, "csr_path", "" );
+
vdf_foreach( vmf, "entity", ent )
{
if( !strcmp( kv_get( ent, "classname", "" ), "func_instance" ))
{
// Entity is in use if file is specified, if not just ignore the entity.
vdf_foreach( vmf, "entity", ent )
{
if( !strcmp( kv_get( ent, "classname", "" ), "func_instance" ))
{
// Entity is in use if file is specified, if not just ignore the entity.
- const char *path = kv_get( ent, "file", "" );
- if( strcmp( path, "" ) )
+ const char *path = kv_get( ent, "file", NULL );
+
+ if( path )
{
{
- if( (ent->user1 = vmf_init_subvmf( map, path )))
+ // Make relative path real
+ strcpy( nextvmf, base );
+ csr_downlvl( nextvmf );
+ strcat( nextvmf, path );
+
+ if( (ent->user1 = vmf_init_subvmf( map, nextvmf )))
{
ent->user1 --;
ent->user = VMF_FLAG_IS_INSTANCE;
{
ent->user1 --;
ent->user = VMF_FLAG_IS_INSTANCE;
@@
-741,7
+753,9
@@
u32 vmf_init_subvmf( vmf_map *map, const char *subvmf )
strcpy( inst->name, subvmf );
if( (inst->root = vdf_open_file( subvmf )) )
strcpy( inst->name, subvmf );
if( (inst->root = vdf_open_file( subvmf )) )
- {
+ {
+ vdf_kv_append( inst->root, "csr_path", subvmf );
+
// Recursive load other instances
vmf_load_all_instances( map, inst->root );
return id+1;
// Recursive load other instances
vmf_load_all_instances( map, inst->root );
return id+1;
@@
-764,6
+778,8
@@
vmf_map *vmf_init( const char *path )
return NULL;
}
return NULL;
}
+ vdf_kv_append( map->root, "csr_path", path );
+
// Prepare instances
vmf_load_all_instances( map, map->root );
// Prepare instances
vmf_load_all_instances( map, map->root );
@@
-817,7
+833,7
@@
void vmf_entity_transform( vdf_node *ent, m4x3f mat )
m4x3_scale( mat, scale );
}
m4x3_scale( mat, scale );
}
-
u32
vmf_visgroup_id( vdf_node *root, const char *name )
+
int
vmf_visgroup_id( vdf_node *root, const char *name )
{
vdf_node *dict = vdf_next( root, "visgroups", NULL );
{
vdf_node *dict = vdf_next( root, "visgroups", NULL );
@@
-832,7
+848,7
@@
u32 vmf_visgroup_id( vdf_node *root, const char *name )
}
}
}
}
- return
0
;
+ return
-1
;
}
int vmf_visgroup_match( vdf_node *ent, u32 target )
}
int vmf_visgroup_match( vdf_node *ent, u32 target )