vg_info( "%d foliage models added\n", count );
}
+VG_STATIC
+void world_unpack_submesh_dynamic( world_instance *world,
+ scene_context *scene, mdl_submesh *sm ){
+ if( sm->flags & k_submesh_flag_consumed ) return;
+
+ m4x3f identity;
+ m4x3_identity( identity );
+ scene_add_mdl_submesh( scene, &world->meta, sm, identity );
+
+ scene_copy_slice( scene, sm );
+ sm->flags |= k_submesh_flag_consumed;
+}
+
/*
* Create the main meshes for the world
*/
scene_copy_slice( &world->scene_no_collide, &surf->sm_no_collide );
}
+ /* unpack traffic models.. TODO: should we just put all these submeshes in a
+ * dynamic models list? and then the actual entitities point to the
+ * models. we only have 2 types at the moment which need dynamic models but
+ * would make sense to do this when/if we have more.
+ */
for( u32 i=0; i<mdl_arrcount( &world->ent_traffic ); i++ ){
ent_traffic *vehc = mdl_arritm( &world->ent_traffic, i );
for( u32 j=0; j<vehc->submesh_count; j++ ){
mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
vehc->submesh_start+j );
+ world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
+ }
+ }
- if( sm->flags & k_submesh_flag_consumed ){
- continue;
- }
+ /* unpack challenge models */
+ for( u32 i=0; i<mdl_arrcount( &world->ent_challenge ); i++ ){
+ ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
- m4x3f identity;
- m4x3_identity( identity );
- scene_add_mdl_submesh( &world->scene_no_collide,
- &world->meta, sm, identity );
+ for( u32 j=0; j<challenge->submesh_count; j ++ ){
+ mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
+ challenge->submesh_start+j );
+ world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
+ }
+ }
- scene_copy_slice( &world->scene_no_collide, sm );
- sm->flags |= k_submesh_flag_consumed;
+ /* unpack gate models */
+ for( u32 i=0; i<mdl_arrcount( &world->ent_gate ); i++ ){
+ ent_gate *gate = mdl_arritm( &world->ent_gate, i );
+
+ if( !(gate->flags & k_ent_gate_custom_mesh) ) continue;
+
+ for( u32 j=0; j<gate->submesh_count; j ++ ){
+ mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
+ gate->submesh_start+j );
+ world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
}
}