quite a lot of changes
[carveJwlIkooP6JGAAIwe30JlM.git] / player_render.c
index 17eb34200aa3453053152b77587334e21de29091..a03902297c30b9442332f53adfde92624c36d6bd 100644 (file)
@@ -57,6 +57,11 @@ VG_STATIC void dynamic_model_load( mdl_context *ctx,
    mdl_async_load_glmesh( ctx, &mdl->mesh );
 }
 
+VG_STATIC void dynamic_model_unload( struct dynamic_model_1texture *mdl ){
+   mesh_free( &mdl->mesh );
+   glDeleteTextures( 1, &mdl->texture );
+}
+
 /* TODO: allow error handling */
 VG_STATIC void player_board_load( struct player_board *board, 
                                   const char *path ){
@@ -112,12 +117,23 @@ VG_STATIC void player_board_load( struct player_board *board,
    mdl_close( &ctx );
 }
 
-VG_STATIC void dynamic_model_unload( struct dynamic_model_1texture *mdl ){
-   mesh_free( &mdl->mesh );
-   glDeleteTextures( 1, &mdl->texture );
+VG_STATIC void player_board_unload( struct player_board *board ){
+   dynamic_model_unload( &board->mdl );
 }
 
-VG_STATIC void player_board_unload( struct player_board *board ){
+VG_STATIC void player_model_load( struct player_model *board, const char *path){
+   vg_linear_clear( vg_mem.scratch );
+
+   mdl_context ctx;
+   mdl_open( &ctx, path, vg_mem.scratch );
+   mdl_load_metadata_block( &ctx, vg_mem.scratch );
+
+   dynamic_model_load( &ctx, &board->mdl, path );
+
+   mdl_close( &ctx );
+}
+
+VG_STATIC void player_model_unload( struct player_model *board ){
    dynamic_model_unload( &board->mdl );
 }
 
@@ -153,7 +169,7 @@ VG_STATIC void player__pre_render( player_instance *player )
 
    struct player_avatar *av = player->playeravatar;
    struct player_board *board = 
-      addon_cache_item_if_loaded( k_workshop_file_type_board,
+      addon_cache_item_if_loaded( k_addon_type_board,
                                   player->board_view_slot );
 
    v3f vp0, vp1;
@@ -438,12 +454,14 @@ PLAYER_API void player__render( camera *cam, player_instance *player )
    SDL_AtomicLock( &addon_system.sl_cache_using_resources );
 
    struct player_model *model = 
-      addon_cache_item_if_loaded( k_workshop_file_type_player, 
+      addon_cache_item_if_loaded( k_addon_type_player, 
                                   player->playermodel_view_slot );
+
+   if( !model ) model = &player->fallback_model;
    render_playermodel( cam, world, model, &player->playeravatar->sk );
 
    struct player_board *board = 
-      addon_cache_item_if_loaded( k_workshop_file_type_board,
+      addon_cache_item_if_loaded( k_addon_type_board,
                                   player->board_view_slot );
    render_board( cam, world, board, player->playeravatar->sk.final_mtx[
                                        player->playeravatar->id_board],