player_avatar_load( &localplayer_avatar, "models/ch_none.mdl" );
player__use_avatar( &localplayer_avatar );
+
+ /* FIXME FIXME FIXME FIXME FIXME */
+ u32 mtx_size = sizeof(m4x3f)*localplayer_avatar.sk.bone_count;
+ localplayer.final_mtx = vg_linear_alloc( vg_mem.rtmemory, mtx_size );
+ netplayers.final_mtx = vg_linear_alloc( vg_mem.rtmemory, mtx_size*32 );
+
player_model_load( &localplayer.fallback_model, "models/ch_none.mdl" );
player__bind();
player__render( &small_cam );
}
+static void animate_remote_players(void){
+ for( u32 i=0; i<vg_list_size(netplayers.list); i ++ ){
+ struct network_player *player = &netplayers.list[i];
+ if( !player->active ) continue;
+
+ animate_remote_player( i );
+#if 0
+ if( player->subsystem > k_player_subsystem_max ) continue;
+
+ struct player_subsystem_interface *sys =
+ player_subsystems[player->subsystem];
+
+ struct player_avatar *av = localplayer.playeravatar;
+
+ player_pose pose;
+ sys->pose( &player->animdata, &pose );
+ apply_full_skeleton_pose( &av->sk, &pose,
+ &netplayers.final_mtx[ av->sk.bone_count*i ] );
+#endif
+ }
+}
+
+static void render_remote_players( world_instance *world, camera *cam ){
+ for( u32 i=0; i<vg_list_size(netplayers.list); i ++ ){
+ struct network_player *player = &netplayers.list[i];
+ if( !player->active ) continue;
+
+ struct player_avatar *av = localplayer.playeravatar;
+
+ struct player_model *model = &localplayer.fallback_model;
+ render_playermodel( cam, world, 0, model, &av->sk,
+ &netplayers.final_mtx[ av->sk.bone_count*i ] );
+ }
+}
+
static void render_scene(void){
/* Draw world */
glEnable( GL_DEPTH_TEST );
render_water_texture( view_world, &skaterift.cam, 0 );
render_fb_bind( gpipeline.fb_main, 1 );
render_water_surface( view_world, &skaterift.cam );
+ render_remote_players( view_world, &skaterift.cam );
}
}
player__animate();
skaterift_record_frame( &skaterift.replay, 0 );
}
+ animate_remote_players();
player__pre_render();
skaterift_composite_maincamera();
skaterift_replay_imgui();
workshop_form_gui();
render_view_framebuffer_ui();
- remote_player_network_imgui();
+ remote_player_network_imgui( vg.pv );
}