]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/server/server_map.h
Add trees
[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