]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/server/biomes.h
dce835dd4d46479e7e47f70c7cd5a4a4bb8c609d
[dragonblocks_alpha.git] / src / server / biomes.h
1 #ifndef _BIOMES_H_
2 #define _BIOMES_H_
3
4 #include "perlin.h"
5 #include "terrain.h"
6 #include "types.h"
7
8 typedef enum {
9         BIOME_MOUNTAIN,
10         BIOME_OCEAN,
11         BIOME_HILLS,
12         COUNT_BIOME,
13 } Biome;
14
15 typedef struct {
16         TerrainChunk *chunk;
17         List *changed_chunks;
18         void *chunk_data;
19 } BiomeArgsChunk;
20
21 typedef struct {
22         v2s32 pos;
23         f64 factor;
24         void *row_data;
25         void *chunk_data;
26 } BiomeArgsRow;
27
28 typedef struct {
29         v2s32 pos;
30         f64 factor;
31         f32 height;
32         void *row_data;
33         void *chunk_data;
34 } BiomeArgsHeight;
35
36 typedef struct {
37         v3s32 offset;
38         v3s32 pos;
39         s32 diff;
40         f64 humidity;
41         f64 temperature;
42         f64 factor;
43         TerrainChunk *chunk;
44         List *changed_chunks;
45         void *row_data;
46         void *chunk_data;
47 } BiomeArgsGenerate;
48
49 typedef struct {
50         f64 probability;
51         SeedOffset offset;
52         f64 threshold;
53         bool snow;
54         s32 (*height)(BiomeArgsHeight *args);
55         NodeType (*generate)(BiomeArgsGenerate *args);
56         size_t chunk_data_size;
57         void (*before_chunk)(BiomeArgsChunk *args);
58         void (*after_chunk)(BiomeArgsChunk *args);
59         size_t row_data_size;
60         void (*before_row)(BiomeArgsRow *args);
61         void (*after_row)(BiomeArgsRow *args);
62 } BiomeDef;
63
64 extern BiomeDef biomes[];
65
66 Biome get_biome(v2s32 pos, f64 *factor);
67 NodeType ocean_get_node_at(v3s32 pos, s32 diff, void *_row_data);
68
69 #endif // _BIOMES_H_