+ font3d_simple_draw( &gui.font, 0, "JA", &main_camera, mmdl );
+}
+
+VG_STATIC void skateshop_render_charshop(void)
+{
+}
+
+VG_STATIC void skateshop_render_worldshop(void)
+{
+ world_instance *world = world_current_instance();
+
+ ent_skateshop *shop = global_skateshop.ptr_ent;
+ ent_marker *mark_display = mdl_arritm( &world->ent_marker,
+ mdl_entity_id_id(shop->worlds.id_display)),
+ *mark_info = mdl_arritm( &world->ent_marker,
+ mdl_entity_id_id(shop->boards.id_info));
+
+ /* Text */
+ char buftext[128], bufsubtext[128];
+ vg_str info, subtext;
+ vg_strnull( &info, buftext, 128 );
+ vg_strnull( &subtext, bufsubtext, 128 );
+
+ if( addon_count(k_workshop_file_type_world) ){
+ addon_reg *reg = get_addon_from_index( k_workshop_file_type_world,
+ global_skateshop.selected_world_id );
+
+ info.i+=highscore_intl( info.buffer+info.i,
+ global_skateshop.selected_world_id+1, 3 );
+ info.buffer[info.i++] = '/';
+ info.i+=highscore_intl( info.buffer+info.i,
+ addon_count(k_workshop_file_type_world), 3 );
+ info.buffer[info.i++] = ' ';
+ info.buffer[info.i] = '\0';
+
+ vg_strcat( &info, "AFAWJFKAW" );
+ if( skaterift.async_op == k_async_op_world_loading ||
+ skaterift.async_op == k_async_op_world_preloading ){
+ vg_strcat( &subtext, "Loading..." );
+ }
+ else{
+ vg_strcat( &subtext, "No information" );
+ }
+ }
+ else{
+ vg_strcat( &info, "No worlds installed" );
+ }
+
+
+ m4x3f mtext,mlocal,mtextmdl;
+ mdl_transform_m4x3( &mark_info->transform, mtext );
+
+ font3d_bind( &gui.font, &main_camera );
+ shader_model_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} );
+
+ float scale = 0.2f, thickness = 0.015f, scale1 = 0.08f;
+ m3x3_zero( mlocal );
+ m3x3_setdiagonalv3( mlocal, (v3f){ scale, scale, thickness } );
+ mlocal[3][0] = -font3d_string_width( &gui.font, 0, buftext );
+ mlocal[3][0] *= scale*0.5f;
+ mlocal[3][1] = 0.1f;
+ mlocal[3][2] = 0.0f;
+ m4x3_mul( mtext, mlocal, mtextmdl );
+ font3d_simple_draw( &gui.font, 0, buftext, &main_camera, mtextmdl );
+
+ m3x3_setdiagonalv3( mlocal, (v3f){ scale1, scale1, thickness } );
+ mlocal[3][0] = -font3d_string_width( &gui.font, 0, bufsubtext );
+ mlocal[3][0] *= scale1*0.5f;
+ mlocal[3][1] = -scale1*0.3f;
+ m4x3_mul( mtext, mlocal, mtextmdl );
+ font3d_simple_draw( &gui.font, 0, bufsubtext, &main_camera, mtextmdl );
+
+ /* pointcloud */
+ m4x3f mmdl;
+ mdl_transform_m4x3( &mark_display->transform, mmdl );
+ m4x3_rotate_y( mmdl, vg.time * 0.2 );
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE, GL_ONE);
+ glDisable(GL_DEPTH_TEST);
+ pointcloud_render( world, &main_camera, mmdl );
+ glDisable(GL_BLEND);
+ glEnable(GL_DEPTH_TEST);
+}
+
+/*
+ * World: render event
+ */
+VG_STATIC void skateshop_render(void)
+{
+ if( !global_skateshop.active ) return;
+
+ ent_skateshop *shop = global_skateshop.ptr_ent;
+
+ if( shop->type == k_skateshop_type_boardshop ){
+ skateshop_render_boardshop();
+ }
+ else if( shop->type == k_skateshop_type_charshop ){
+ skateshop_render_charshop();
+ }
+ else if( shop->type == k_skateshop_type_worldshop ){
+ skateshop_render_worldshop();
+ }
+ else{
+ vg_fatal_error( "Unknown store (%u)\n", shop->type );
+ }