network oneshots
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_skateshop.c
index a4cfe22d526afb8cf1a20e9bd9c07468b6085fc6..f471f42b1359c6309d5cd3f9840f08e3e120a0fc 100644 (file)
@@ -15,6 +15,7 @@
 #include "steam.h"
 #include "addon.h"
 #include "save.h"
+#include "network.h"
 
 /*
  * Checks string equality but does a hash check first
@@ -74,11 +75,30 @@ static void board_scan_thread( void *_args ){
    board_processview_thread(NULL);
 }
 
+/* TODO: migrate to addon.c */
 static void skateshop_op_board_scan(void){
    vg_loader_start( board_scan_thread, NULL );
 }
 
-static void skateshop_op_processview(void){
+/* TODO: migrate to addon.c */
+static void skateshop_autostart_loading(void){
+   if( !vg_loader_availible() ) return;
+
+   SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+   for( u32 type=0; type<k_addon_type_max; type++ ){
+      struct addon_cache *cache = &addon_system.cache[type];
+
+      for( u32 id=1; id<=cache->pool.count; id++ ){
+         addon_cache_entry *entry = vg_pool_item( &cache->pool, id );
+         if( entry->state == k_addon_cache_state_load_request ){
+            SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+            goto launch;
+         }
+      }
+   }
+   SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+   return;
+launch:
    vg_loader_start( board_processview_thread, NULL );
 }
 
@@ -232,7 +252,7 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
 
       if( opage != npage ){
          skateshop_update_viewpage();
-         skateshop_op_processview();
+         //skateshop_op_processview();
       }
       else if( cache_id && button_down( k_srbind_maccept )){
          vg_info( "chose board from skateshop (%u)\n", 
@@ -241,6 +261,7 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
          addon_cache_unwatch( k_addon_type_board, localplayer.board_view_slot );
          addon_cache_watch( k_addon_type_board, cache_id );
          localplayer.board_view_slot = cache_id;
+         network_send_item( k_netmsg_playeritem_board );
 
          world_entity_unfocus();
          skaterift_autosave(1);
@@ -282,10 +303,11 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
 
       if( changed ){
          player__use_model( global_skateshop.selected_player_id );
-         skateshop_op_processview();
+         //skateshop_op_processview();
       }
 
       if( button_down( k_srbind_maccept ) ){
+         network_send_item( k_netmsg_playeritem_player );
          world_entity_unfocus();
       }
    }
@@ -308,8 +330,7 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
 
       if( browseable ){
          if( button_down( k_srbind_mleft ) ){
-            if( global_skateshop.selected_world_id > 0 )
-            {
+            if( global_skateshop.selected_world_id > 0 ){
                global_skateshop.selected_world_id --;
                change = 1;
             }
@@ -368,6 +389,9 @@ static void ent_skateshop_preupdate( ent_skateshop *shop, int active ){
    }
 
    if( button_down( k_srbind_mback ) ){
+      if( shop->type == k_skateshop_type_charshop )
+         network_send_item( k_netmsg_playeritem_player );
+
       world_entity_unfocus();
       return;
    }