]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/server/server_map.h
Use spaces for alignment
[dragonblocks_alpha.git] / src / server / server_map.h
1 #ifndef _SERVER_MAP_H_
2 #define _SERVER_MAP_H_
3
4 #include <stddef.h>
5 #include <pthread.h>
6 #include "map.h"
7 #include "server/server.h"
8
9 typedef enum
10 {
11         MBS_CREATED,    // block exists but was not yet generated
12         MBS_GENERATING, // currently generating in a seperate thread
13         MBS_READY,      // generation finished
14 } MapBlockState;
15
16 typedef enum
17 {
18         MGS_VOID,     // initial air, can be overridden by anything
19         MGS_TERRAIN,  // basic terrain, can be overridden by anything except the void
20         MGS_BOULDERS, // boulders, replace terrain
21         MGS_TREES,    // trees replace boulders
22         MGS_PLAYER,   // player-placed nodes or things placed after map generation
23 } MapgenStage;
24
25 typedef MapgenStage MapgenStageBuffer[MAPBLOCK_SIZE][MAPBLOCK_SIZE][MAPBLOCK_SIZE];
26
27 typedef struct {
28         MapgenStage mgs;
29         List *changed_blocks;
30 } MapgenSetNodeArg;
31
32 typedef struct
33 {
34         char *data;                   // cached serialized data
35         size_t size;                  // size of data
36         size_t rawsize;               // size of decompressed data
37         MapBlockState state;          // generation state of the block
38         pthread_t mapgen_thread;      // thread that is generating block
39         MapgenStageBuffer mgs_buffer; // buffer to make sure mapgen only overrides things it should
40 } MapBlockExtraData;
41
42 extern struct ServerMap {
43         Map *map;                            // map object, data is stored here
44         bool joining_threads;                // prevent threads from removing themselves from the thread list if thread list is being cleared anyway
45         pthread_mutex_t joining_threads_mtx; // mutex to protect joining threads
46         List mapgen_threads;                 // a list of mapgen threads (need to be joined before shutdown)
47         pthread_mutex_t mapgen_threads_mtx;  // mutex to protect mapgen thread list
48         s32 spawn_height;                    // height to spawn players at
49 } server_map; // ServerMap singleton
50
51 void server_map_init(Server *server);                       // ServerMap singleton constructor
52 void server_map_deinit();                                   // ServerMap singleton destructor
53 void server_map_requested_block(Client *client, v3s32 pos); // handle block request from client (thread safe)
54 void server_map_prepare_spawn();                            // prepare spawn region
55
56 #endif