update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / workshop.h
index 36a6aa5ad2f0b7e2ce18ab4006104242ea72e8fe..be9e3a5207728c7a7490d8fda4a0e96aa00e2e9c 100644 (file)
@@ -1,13 +1,12 @@
-#ifndef WORKSHOP_H
-#define WORKSHOP_H
-
-#include "workshop_types.h"
-
-#define VG_GAME
-#include "vg/vg.h"
+#pragma once
+#include "addon_types.h"
 #include "vg/vg_steam_remote_storage.h"
 #include "skaterift.h"
-#include "pointcloud.h"
+#include "vg/vg_steam_auth.h"
+#include "vg/vg_steam_ugc.h"
+#include "vg/vg_steam_friends.h"
+#include "steam.h"
+#include "ent_skateshop.h"
 
 struct async_workshop_filepath_info{
    PublishedFileId_t id;
@@ -25,15 +24,111 @@ struct async_workshop_metadata_info{
    const char *path;
 };
 
-VG_STATIC void async_workshop_get_filepath( void *data, u32 len );
-VG_STATIC void async_workshop_get_installed_files( void *data, u32 len );
-VG_STATIC void workshop_load_metadata( const char *path,
-                                       struct workshop_file_info *info );
 
-/* generic reciever */
-VG_STATIC void workshop_async_any_complete( void *data, u32 size )
-{
-   skaterift_end_op();
+#define WORKSHOP_VIEW_PER_PAGE 15
+
+struct workshop_form{
+   enum workshop_op {
+      k_workshop_op_none,
+      k_workshop_op_downloading_submission,
+      k_workshop_op_publishing_update,
+      k_workshop_op_loading_model
+   }
+   op;
+
+   struct {
+      char title[80];
+      char description[512];
+      char author[32];
+      i32 submission_type_selection;
+      enum addon_type type;
+
+      PublishedFileId_t file_id; /* 0 if not published yet */
+
+      i32 visibility;
+      int submit_title,       /* set if the respective controls are touched */
+          submit_description,
+          submit_file_and_image;
+   } 
+   submission;
+
+   enum workshop_form_page{
+      k_workshop_form_hidden, 
+      k_workshop_form_open,      /* open but not looking at anything */
+      k_workshop_form_edit,      /* editing a submission */
+      k_workshop_form_cclosing,
+      k_workshop_form_closing_good, /* post upload screen */
+      k_workshop_form_closing_bad,  
+   }
+   page;
+
+   /* model viewer 
+    * -----------------------------
+    */
+
+   char addon_folder[128];
+   struct player_board board_model;
+   struct player_model player_model;
+
+   /* what does the user want to do with the image preview? */
+   enum workshop_form_file_intent{
+      k_workshop_form_file_intent_none,         /* loading probably */
+      k_workshop_form_file_intent_new,          /* board_model is valid */
+      k_workshop_form_file_intent_keep_old      /* just browsing */
+   }
+   file_intent;
+
+   world_instance *view_world;
+   ent_swspreview *ptr_ent;
+   v2f view_angles,
+       view_angles_begin;
+   v3f view_offset,
+       view_offset_begin;
+
+   float view_dist;
+   int view_changed;
+
+   /*
+    * published UGC request
+    * ------------------------------
+    */
+
+   struct {
+      UGCQueryHandle_t handle;
+      EResult result;
+
+      int all_item_count,
+          returned_item_count;
+   }
+   ugc_query;
+
+   /* 
+    * UI information
+    * ------------------------------------------
+    */
+
+   const char *failure_or_success_string;
+   char error_msg[256];
+
+   int img_w, img_h;
+   u8 *img_buffer;
+
+   int view_published_page_count,
+       view_published_page_id;
+
+   struct published_file{
+      EResult result;
+      int result_index;
+      char title[80];
+   }
+   published_files_list[WORKSHOP_VIEW_PER_PAGE];
+   int published_files_list_length;
 }
+extern workshop_form;
 
-#endif /* WORKSHOP_H */
+void workshop_init(void);
+int workshop_submit_command( int argc, const char *argv[] );
+void async_workshop_get_filepath( void *data, u32 len );
+void async_workshop_get_installed_files( void *data, u32 len );
+void workshop_load_metadata( const char *path,struct workshop_file_info *info );
+void workshop_form_gui(void);