X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_gen.c;h=c31c2c2dd904955be10e8c7fde126cdfd2b2438e;hb=7eba38b8178c82040618a518634d8ff4813e2ff2;hp=a454d02509b6baac826cd00b74b7662e3a5985da;hpb=7fb47c3eb672f4468da8b5b452c09d44e1389d5f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_gen.c b/world_gen.c index a454d02..c31c2c2 100644 --- a/world_gen.c +++ b/world_gen.c @@ -148,6 +148,19 @@ VG_STATIC void world_apply_procedural_foliage( scene_context *scene, 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 */ @@ -243,24 +256,29 @@ VG_STATIC void world_gen_generate_meshes(void) 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; ient_traffic ); i++ ){ ent_traffic *vehc = mdl_arritm( &world->ent_traffic, i ); for( u32 j=0; jsubmesh_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; - } - - m4x3f identity; - m4x3_identity( identity ); - scene_add_mdl_submesh( &world->scene_no_collide, - &world->meta, sm, identity ); + /* unpack challenge models */ + for( u32 i=0; ient_challenge ); i++ ){ + ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i ); - scene_copy_slice( &world->scene_no_collide, sm ); - sm->flags |= k_submesh_flag_consumed; + for( u32 j=0; jsubmesh_count; j ++ ){ + mdl_submesh *sm = mdl_arritm( &world->meta.submeshs, + challenge->submesh_start+j ); + world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm ); } }