enable workshop world submissions
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.h
1 #ifndef SKATERIFT_H
2 #define SKATERIFT_H
3
4 #include "common.h"
5 #include "world.h"
6 #include "addon.h"
7
8 struct{
9 enum async_operation{
10 k_async_op_none,
11 k_async_op_clientloading,
12 k_async_op_world_preloading,
13 k_async_op_world_loading,
14 k_async_op_world_scan,
15 k_async_op_world_load_preview,
16 k_async_op_board_scan,
17 k_async_op_board_load,
18 k_workshop_form_op_loading_model,
19 k_workshop_form_op_downloading_submission,
20 k_workshop_form_op_publishing_update,
21 }
22 async_op;
23 }
24 static skaterift = { .async_op = k_async_op_clientloading };
25
26 /* Skaterift api */
27 static void skaterift_change_world_start( void );
28 static int skaterift_change_world_command( int argc, const char *argv[] );
29
30 /*
31 * Start a new operation or crash if we are already running one. you can avoid
32 * crashing the game by checking the async status yourself before calling.
33 */
34 VG_STATIC void skaterift_begin_op( enum async_operation op )
35 {
36 if( vg_thread_purpose() == k_thread_purpose_loader ){
37 vg_fatal_error( "Can't do that here\n" );
38 }
39
40 if( skaterift.async_op != k_async_op_none ){
41 vg_fatal_error( "Async executing op(%d), tried to start op(%d)\n",
42 skaterift.async_op, op );
43 }
44
45 skaterift.async_op = op;
46 vg_info( "Starting op( %d )\n", op );
47 }
48
49 /*
50 * Switch operation for those who have multiple parts
51 */
52 VG_STATIC void skaterift_shift_op( enum async_operation op )
53 {
54 if( skaterift.async_op == k_async_op_none ){
55 vg_fatal_error( "No current op, cannot shift operation (%d)\n", op );
56 }
57
58 skaterift.async_op = op;
59 vg_info( "Shifting to op( %d )\n", op );
60 }
61
62 VG_STATIC void skaterift_end_op(void);
63 VG_STATIC void async_skaterift_end_op( void *data, u32 size ){
64 skaterift_end_op();
65 }
66
67 /*
68 * Finished operation, otheres can now run
69 */
70 VG_STATIC void skaterift_end_op(void)
71 {
72 if( vg_thread_purpose() == k_thread_purpose_loader ){
73 vg_async_call( async_skaterift_end_op, NULL, 0 );
74 }
75 else{
76 vg_info( "Finishing op( %d )\n", skaterift.async_op );
77 skaterift.async_op = k_async_op_none;
78 }
79 }
80
81 #endif /* SKATERIFT_H */