the luxuries of a modern C compiler
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.h
1 #ifndef SKATERIFT_H
2 #define SKATERIFT_H
3
4 #include "common.h"
5 #include "world.h"
6
7 struct{
8 enum async_operation{
9 k_async_op_none,
10 k_async_op_clientloading,
11 k_async_op_world_preloading,
12 k_async_op_world_loading,
13 k_async_op_world_scan,
14 k_workshop_form_op_loading_model,
15 k_workshop_form_op_downloading_submission,
16 k_workshop_form_op_publishing_update,
17 k_workshop_op_item_scan,
18 k_workshop_op_item_load
19 }
20 async_op;
21 }
22 static skaterift = { .async_op = k_async_op_clientloading };
23
24 /* Skaterift api */
25 static void skaterift_change_world( const char *world_path );
26 static int skaterift_change_world_command( int argc, const char *argv[] );
27
28 /*
29 * Start a new operation or crash if we are already running one. you can avoid
30 * crashing the game by checking the async status yourself before calling.
31 */
32 VG_STATIC void skaterift_begin_op( enum async_operation op )
33 {
34 if( skaterift.async_op != k_async_op_none ){
35 vg_fatal_error( "Async executing op(%d), tried to start op(%d)\n",
36 skaterift.async_op, op );
37 }
38
39 skaterift.async_op = op;
40 vg_info( "Starting op( %d )\n", op );
41 }
42
43 /*
44 * Switch operation for those who have multiple parts
45 */
46 VG_STATIC void skaterift_shift_op( enum async_operation op )
47 {
48 if( skaterift.async_op == k_async_op_none ){
49 vg_fatal_error( "No current op, cannot shift operation (%d)\n", op );
50 }
51
52 skaterift.async_op = op;
53 vg_info( "Shifting to op( %d )\n", op );
54 }
55
56 /*
57 * Finished operation, otheres can now run
58 */
59 VG_STATIC void skaterift_end_op(void)
60 {
61 vg_info( "Finishing op( %d )\n", skaterift.async_op );
62 skaterift.async_op = k_async_op_none;
63 }
64
65 #endif /* SKATERIFT_H */