};
csr_rt_clear( &target );
- draw_vmf_group( &target, map, map->root, 0, NULL, NULL );
+ draw_vmf_group( &target, map, map->root, "tar_layout", NULL, NULL );
float *rgba_test = (float *)csr_malloc( 1024*1024*sizeof(float)*3 );
}
}
-void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, int const group, m4x3f prev, m4x3f inst )
+void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, const char *group, m4x3f prev, m4x3f inst )
{
m4x3f transform = M4X3_IDENTITY;
vmf_solid solid;
vmf_vert tri[3];
+ u32 group_id = 0;
+
+ if( group )
+ {
+ group_id = vmf_visgroup_id( root, group );
+ }
+
// Multiply previous transform with instance transform to create basis
if( prev )
{
vdf_foreach( world, "solid", brush )
{
+ if( group && !vmf_visgroup_match( brush, group_id ) )
+ continue;
+
solidgen_push( &solid, brush );
}
vdf_foreach( root, "entity", ent )
{
+ if( group && !vmf_visgroup_match( ent, group_id ) )
+ continue;
+
if( ent->user & VMF_FLAG_IS_PROP )
{
// Create model transform
// Scale
m4x3_scale( mat, scale );
}
+
+u32 vmf_visgroup_id( vdf_node *root, const char *name )
+{
+ vdf_node *dict = vdf_next( root, "visgroups", NULL );
+
+ if( dict )
+ {
+ vdf_foreach( dict, "visgroup", group )
+ {
+ if( !strcmp( kv_get( group, "name", "" ), name ) )
+ {
+ return kv_get_int( group, "visgroupid", 0 );
+ }
+ }
+ }
+
+ return 0;
+}
+
+int vmf_visgroup_match( vdf_node *ent, u32 target )
+{
+ vdf_node *editor = vdf_next( ent, "editor", NULL );
+
+ if( editor )
+ {
+ kv_foreach( editor, "visgroupid", groupe )
+ {
+ if( target == atoi( groupe ) )
+ return 1;
+ }
+ }
+
+ return 0;
+}