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