]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/server/biomes.h
refactoring
[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 pos;
38         s32 diff;
39         f64 humidity;
40         f64 temperature;
41         f64 factor;
42         TerrainChunk *chunk;
43         List *changed_chunks;
44         void *row_data;
45         void *chunk_data;
46 } BiomeArgsGenerate;
47
48 typedef struct {
49         f64 probability;
50         SeedOffset offset;
51         f64 threshold;
52         bool snow;
53         s32 (*height)(BiomeArgsHeight *args);
54         NodeType (*generate)(BiomeArgsGenerate *args);
55         size_t chunk_data_size;
56         void (*chunk)(BiomeArgsChunk *args);
57         size_t row_data_size;
58         void (*row)(BiomeArgsRow *args);
59 } BiomeDef;
60
61 extern BiomeDef biomes[];
62
63 Biome get_biome(v2s32 pos, f64 *factor);
64 NodeType ocean_get_node_at(v3s32 pos, s32 diff, void *_row_data);
65
66 #endif // _BIOMES_H_