Files
MC-Worldgen/worldgen-c/include/worldgen.h

84 lines
2.0 KiB
C

#ifndef WORLDGEN_H
#define WORLDGEN_H
#include <stddef.h>
#include <stdint.h>
#include "noise.h"
#define CHUNK_SIZE 16
#define CHUNK_HEIGHT 256
enum BlockId {
BLOCK_BEDROCK = 0,
BLOCK_STONE = 1,
BLOCK_DIRT = 2,
BLOCK_GRASS = 3,
BLOCK_WATER = 4,
BLOCK_AIR = 5,
BLOCK_OAK_LOG = 6,
BLOCK_OAK_LEAVES = 7,
BLOCK_BIRCH_LOG = 8,
BLOCK_BIRCH_LEAVES = 9,
BLOCK_COAL = 10,
BLOCK_SAND = 11,
BLOCK_GRAVEL = 12,
BLOCK_SNOW = 13,
BLOCK_TALL_GRASS = 14,
BLOCK_WILDFLOWER = 15,
BLOCK_COPPER_ORE = 16,
BLOCK_IRON_ORE = 17,
BLOCK_GOLD_ORE = 18,
BLOCK_REDSTONE_ORE = 19,
BLOCK_LAPIS_ORE = 20,
BLOCK_DIAMOND_ORE = 21,
BLOCK_OAK_PLANKS = 22,
BLOCK_SPRUCE_PLANKS = 23,
BLOCK_OAK_LOG_X = 24,
BLOCK_OAK_LOG_Z = 25,
BLOCK_SPRUCE_LOG_X = 26,
BLOCK_SPRUCE_LOG_Z = 27,
BLOCK_GLASS_PANE = 28,
BLOCK_SPRUCE_DOOR_S_LOWER = 29,
BLOCK_SPRUCE_DOOR_S_UPPER = 30,
BLOCK_SPRUCE_DOOR_N_LOWER = 31,
BLOCK_SPRUCE_DOOR_N_UPPER = 32,
BLOCK_SPRUCE_DOOR_W_LOWER = 33,
BLOCK_SPRUCE_DOOR_W_UPPER = 34,
BLOCK_SPRUCE_DOOR_E_LOWER = 35,
BLOCK_SPRUCE_DOOR_E_UPPER = 36,
BLOCK_SPRUCE_STAIRS_E = 37,
BLOCK_SPRUCE_STAIRS_W = 38,
BLOCK_LADDER_N = 39,
BLOCK_LADDER_S = 40,
BLOCK_LADDER_W = 41,
BLOCK_LADDER_E = 42
};
struct trail_segment;
typedef struct {
int chunk_x;
int chunk_z;
uint16_t heightmap[CHUNK_SIZE][CHUNK_SIZE];
uint16_t blocks[CHUNK_HEIGHT][CHUNK_SIZE][CHUNK_SIZE];
} chunk_data;
typedef struct {
simplex_noise noise;
int sea_level;
int world_seed;
int enable_trails;
int snow_line;
struct trail_segment *trail_segments;
size_t trail_segment_count;
size_t trail_segment_cap;
int prepass_done;
int prepass_min_x, prepass_max_x, prepass_min_z, prepass_max_z;
} worldgen_ctx;
void worldgen_init(worldgen_ctx *ctx, int world_seed, int sea_level, int snow_line);
void worldgen_generate_chunk(worldgen_ctx *ctx, int chunk_x, int chunk_z, chunk_data *out);
void worldgen_prepass(worldgen_ctx *ctx, int min_x, int max_x, int min_z, int max_z);
#endif