]> git.lizzy.rs Git - dragonblocks_alpha.git/blobdiff - src/server/trees.c
Fix boulder shapes: depth-search to ground
[dragonblocks_alpha.git] / src / server / trees.c
index 4de22852259e2b7d4aea2cf9c27cc9e546f772be..2d165c26c1d80f9db098007e82e3e616b0aa14ec 100644 (file)
@@ -2,7 +2,7 @@
 #include "server/biomes.h"
 #include "server/server_terrain.h"
 #include "server/trees.h"
-#include "server/voxelctx.h"
+#include "server/voxel_procedural.h"
 
 // oak
 
@@ -11,98 +11,98 @@ static bool oak_condition(TreeArgsCondition *args)
        return args->biome == BIOME_HILLS;
 }
 
-static void oak_tree_leaf(Voxelctx *ctx)
+static void oak_tree_leaf(VoxelProcedural *proc)
 {
-       if (!voxelctx_is_alive(ctx))
+       if (!voxel_procedural_is_alive(proc))
                return;
 
-       voxelctx_push(ctx);
-               voxelctx_cube(ctx, NODE_OAK_LEAVES, true);
-       voxelctx_pop(ctx);
-
-       voxelctx_push(ctx);
-               voxelctx_x(ctx, 0.5f);
-               voxelctx_sx(ctx, 0.9f);
-               voxelctx_sy(ctx, 0.9f);
-               voxelctx_sz(ctx, 0.8f);
-               voxelctx_ry(ctx, 25.0f);
-               voxelctx_x(ctx, 0.4f);
-               oak_tree_leaf(ctx);
-       voxelctx_pop(ctx);
+       voxel_procedural_push(proc);
+               voxel_procedural_cube(proc, NODE_OAK_LEAVES, true);
+       voxel_procedural_pop(proc);
+
+       voxel_procedural_push(proc);
+               voxel_procedural_x(proc, 0.5f);
+               voxel_procedural_sx(proc, 0.9f);
+               voxel_procedural_sy(proc, 0.9f);
+               voxel_procedural_sz(proc, 0.8f);
+               voxel_procedural_ry(proc, 25.0f);
+               voxel_procedural_x(proc, 0.4f);
+               oak_tree_leaf(proc);
+       voxel_procedural_pop(proc);
 }
 
-static void oak_tree_top(Voxelctx *ctx)
+static void oak_tree_top(VoxelProcedural *proc)
 {
-       if (!voxelctx_is_alive(ctx))
+       if (!voxel_procedural_is_alive(proc))
                return;
 
-       voxelctx_push(ctx);
+       voxel_procedural_push(proc);
        for (int i = 0; i < 8; i++) {
-               voxelctx_rz(ctx, 360.0f / 8.0f);
-               voxelctx_push(ctx);
-                       voxelctx_life(ctx, 8);
-                       voxelctx_sy(ctx, 2.0f);
-                       voxelctx_z(ctx, voxelctx_random(ctx, 0.0f, 5.0f));
-                       voxelctx_s(ctx, 5.0f);
-                       voxelctx_light(ctx, -0.4f);
-                       voxelctx_sat(ctx, 0.5f);
-                       voxelctx_hue(ctx, voxelctx_random(ctx, 60.0f, 20.0f));
-                       voxelctx_ry(ctx, -45.0f);
-                       oak_tree_leaf(ctx);
-               voxelctx_pop(ctx);
+               voxel_procedural_rz(proc, 360.0f / 8.0f);
+               voxel_procedural_push(proc);
+                       voxel_procedural_life(proc, 8);
+                       voxel_procedural_sy(proc, 2.0f);
+                       voxel_procedural_z(proc, voxel_procedural_random(proc, 0.0f, 5.0f));
+                       voxel_procedural_s(proc, 5.0f);
+                       voxel_procedural_light(proc, -0.4f);
+                       voxel_procedural_sat(proc, 0.5f);
+                       voxel_procedural_hue(proc, voxel_procedural_random(proc, 60.0f, 20.0f));
+                       voxel_procedural_ry(proc, -45.0f);
+                       oak_tree_leaf(proc);
+               voxel_procedural_pop(proc);
        }
-       voxelctx_pop(ctx);
+       voxel_procedural_pop(proc);
 }
 
-static void oak_tree_part(Voxelctx *ctx, f32 n)
+static void oak_tree_part(VoxelProcedural *proc, f32 n)
 {
-       if (!voxelctx_is_alive(ctx))
+       if (!voxel_procedural_is_alive(proc))
                return;
 
-       voxelctx_push(ctx);
+       voxel_procedural_push(proc);
        for (int i = 1; i <= n; i++) {
-               voxelctx_z(ctx, 1.0f);
-               voxelctx_rz(ctx, voxelctx_random(ctx, 30.0f, 10.0f));
-               voxelctx_rx(ctx, voxelctx_random(ctx, 0.0f, 10.0f));
+               voxel_procedural_z(proc, 1.0f);
+               voxel_procedural_rz(proc, voxel_procedural_random(proc, 30.0f, 10.0f));
+               voxel_procedural_rx(proc, voxel_procedural_random(proc, 0.0f, 10.0f));
 
-               voxelctx_push(ctx);
-                       voxelctx_s(ctx, 4.0f);
-                       voxelctx_x(ctx, 0.1f);
-                       voxelctx_light(ctx, voxelctx_random(ctx, 0.0f, 0.1f));
-                       voxelctx_cylinder(ctx, NODE_OAK_WOOD, true);
-               voxelctx_pop(ctx);
+               voxel_procedural_push(proc);
+                       voxel_procedural_s(proc, 4.0f);
+                       voxel_procedural_x(proc, 0.1f);
+                       voxel_procedural_light(proc, voxel_procedural_random(proc, 0.0f, 0.1f));
+                       voxel_procedural_cylinder(proc, NODE_OAK_WOOD, true);
+               voxel_procedural_pop(proc);
 
                if (i == (int) (n - 2.0f)) {
-                       voxelctx_push(ctx);
-                               oak_tree_top(ctx);
-                       voxelctx_pop(ctx);
+                       voxel_procedural_push(proc);
+                               oak_tree_top(proc);
+                       voxel_procedural_pop(proc);
                }
        }
-       voxelctx_pop(ctx);
+       voxel_procedural_pop(proc);
 }
 
 static void oak_tree(v3s32 pos, List *changed_chunks)
 {
-       Voxelctx *ctx = voxelctx_create(changed_chunks, STAGE_TREES, pos);
+       VoxelProcedural *proc = voxel_procedural_create(changed_chunks, STAGE_TREES, pos);
 
-       voxelctx_hue(ctx, 40.0f);
-       voxelctx_light(ctx, -0.5f);
-       voxelctx_sat(ctx, 0.5f);
+       voxel_procedural_hue(proc, 40.0f);
+       voxel_procedural_light(proc, -0.5f);
+       voxel_procedural_sat(proc, 0.5f);
 
-       f32 n = voxelctx_random(ctx, 40.0f, 10.0f);
+       f32 n = voxel_procedural_random(proc, 40.0f, 10.0f);
 
-       voxelctx_push(ctx);
+       voxel_procedural_push(proc);
        for (int i = 1; i <= 3; i++) {
-               voxelctx_rz(ctx, voxelctx_random(ctx, 120.0f, 45.0f));
-               voxelctx_push(ctx);
-                       voxelctx_y(ctx, 0.5f);
-                       voxelctx_light(ctx, voxelctx_random(ctx, -0.3f, 0.05f));
-                       oak_tree_part(ctx, n);
-               voxelctx_pop(ctx);
+               voxel_procedural_rz(proc, voxel_procedural_random(proc, 120.0f, 45.0f));
+               voxel_procedural_push(proc);
+                       voxel_procedural_y(proc, 0.5f);
+                       voxel_procedural_light(proc, voxel_procedural_random(proc, -0.3f, 0.05f));
+                       oak_tree_part(proc, n);
+               voxel_procedural_pop(proc);
        }
-       voxelctx_pop(ctx);
+       voxel_procedural_pop(proc);
 
-       voxelctx_delete(ctx);
+       voxel_procedural_delete(proc);
 }
 
 // pine
@@ -114,9 +114,9 @@ static bool pine_condition(TreeArgsCondition *args)
 
 static void pine_tree(v3s32 pos, List *changed_chunks)
 {
-       s32 tree_top = (noise2d(pos.x, pos.z, 0, seed + SO_PINETREE_HEIGHT) * 0.5 + 0.5) * (35.0 - 20.0) + 20.0 + pos.y;
+       s32 tree_top = (noise2d(pos.x, pos.z, 0, seed + OFFSET_PINETREE_HEIGHT) * 0.5 + 0.5) * (35.0 - 20.0) + 20.0 + pos.y;
        for (v3s32 tree_pos = pos; tree_pos.y < tree_top; tree_pos.y++) {
-               f64 branch_length = noise3d(tree_pos.x, tree_pos.y, tree_pos.z, 0, seed + SO_PINETREE_BRANCH) * 3.0;
+               f64 branch_length = noise3d(tree_pos.x, tree_pos.y, tree_pos.z, 0, seed + OFFSET_PINETREE_BRANCH) * 3.0;
 
                v3s32 dirs[4] = {
                        {+0, +0, +1},
@@ -125,7 +125,7 @@ static void pine_tree(v3s32 pos, List *changed_chunks)
                        {-1, +0, +0},
                };
 
-               s32 dir = (noise3d(tree_pos.x, tree_pos.y, tree_pos.z, 0, seed + SO_PINETREE_BRANCH_DIR) * 0.5 + 0.5) * 4.0;
+               s32 dir = (noise3d(tree_pos.x, tree_pos.y, tree_pos.z, 0, seed + OFFSET_PINETREE_BRANCH_DIR) * 0.5 + 0.5) * 4.0;
 
                for (v3s32 branch_pos = tree_pos; branch_length > 0; branch_length--, branch_pos = v3s32_add(branch_pos, dirs[dir]))
                        server_terrain_gen_node(branch_pos,
@@ -147,58 +147,58 @@ static bool palm_condition(TreeArgsCondition *args)
                && ocean_get_node_at((v3s32) {args->pos.x, args->pos.y - 1, args->pos.z}, 0, args->row_data) == NODE_SAND;
 }
 
-static void palm_branch(Voxelctx *ctx)
+static void palm_branch(VoxelProcedural *proc)
 {
-       if (!voxelctx_is_alive(ctx))
+       if (!voxel_procedural_is_alive(proc))
                return;
 
-       voxelctx_cube(ctx, NODE_PALM_LEAVES, true);
-       voxelctx_push(ctx);
-               voxelctx_z(ctx, 0.5f);
-               voxelctx_s(ctx, 0.8f);
-               voxelctx_rx(ctx, voxelctx_random(ctx, 20.0f, 4.0f));
-               voxelctx_z(ctx, 0.5f);
-               palm_branch(ctx);
-       voxelctx_pop(ctx);
+       voxel_procedural_cube(proc, NODE_PALM_LEAVES, true);
+       voxel_procedural_push(proc);
+               voxel_procedural_z(proc, 0.5f);
+               voxel_procedural_s(proc, 0.8f);
+               voxel_procedural_rx(proc, voxel_procedural_random(proc, 20.0f, 4.0f));
+               voxel_procedural_z(proc, 0.5f);
+               palm_branch(proc);
+       voxel_procedural_pop(proc);
 }
 
 static void palm_tree(v3s32 pos, List *changed_chunks)
 {
-       Voxelctx *ctx = voxelctx_create(changed_chunks, STAGE_TREES, (v3s32) {pos.x, pos.y - 1, pos.z});
+       VoxelProcedural *proc = voxel_procedural_create(changed_chunks, STAGE_TREES, (v3s32) {pos.x, pos.y - 1, pos.z});
 
-       f32 s = voxelctx_random(ctx, 8.0f, 2.0f);
+       f32 s = voxel_procedural_random(proc, 8.0f, 2.0f);
 
-       voxelctx_push(ctx);
+       voxel_procedural_push(proc);
        for (int i = 1; i <= s; i++) {
-               voxelctx_z(ctx, 1.0f);
-               voxelctx_push(ctx);
-                       voxelctx_s(ctx, 1.0f);
-                       voxelctx_light(ctx, voxelctx_random(ctx, -0.8f, 0.1f));
-                       voxelctx_sat(ctx, 0.5f);
-                       voxelctx_cube(ctx, NODE_PALM_WOOD, true);
-               voxelctx_pop(ctx);
+               voxel_procedural_z(proc, 1.0f);
+               voxel_procedural_push(proc);
+                       voxel_procedural_s(proc, 1.0f);
+                       voxel_procedural_light(proc, voxel_procedural_random(proc, -0.8f, 0.1f));
+                       voxel_procedural_sat(proc, 0.5f);
+                       voxel_procedural_cube(proc, NODE_PALM_WOOD, true);
+               voxel_procedural_pop(proc);
        }
-       voxelctx_pop(ctx);
+       voxel_procedural_pop(proc);
 
-       voxelctx_z(ctx, s);
-       voxelctx_sat(ctx, 1.0f),
-       voxelctx_light(ctx, -0.5f);
-       voxelctx_hue(ctx, voxelctx_random(ctx, 50.0f, 30.0f));
+       voxel_procedural_z(proc, s);
+       voxel_procedural_sat(proc, 1.0f),
+       voxel_procedural_light(proc, -0.5f);
+       voxel_procedural_hue(proc, voxel_procedural_random(proc, 50.0f, 30.0f));
 
-       voxelctx_push(ctx);
+       voxel_procedural_push(proc);
        for (int i = 0; i < 6; i++) {
-               voxelctx_rz(ctx, 360.0f / 6.0f);
-               voxelctx_rz(ctx, voxelctx_random(ctx, 0.0f, 10.0f));
-               voxelctx_push(ctx);
-                       voxelctx_light(ctx, voxelctx_random(ctx, 0.0f, 0.3f));
-                       voxelctx_rx(ctx, 90.0f);
-                       voxelctx_s(ctx, 2.0f);
-                       palm_branch(ctx);
-               voxelctx_pop(ctx);
+               voxel_procedural_rz(proc, 360.0f / 6.0f);
+               voxel_procedural_rz(proc, voxel_procedural_random(proc, 0.0f, 10.0f));
+               voxel_procedural_push(proc);
+                       voxel_procedural_light(proc, voxel_procedural_random(proc, 0.0f, 0.3f));
+                       voxel_procedural_rx(proc, 90.0f);
+                       voxel_procedural_s(proc, 2.0f);
+                       palm_branch(proc);
+               voxel_procedural_pop(proc);
        }
-       voxelctx_pop(ctx);
+       voxel_procedural_pop(proc);
 
-       voxelctx_delete(ctx);
+       voxel_procedural_delete(proc);
 }
 
 TreeDef tree_definitions[NUM_TREES] = {
@@ -207,8 +207,8 @@ TreeDef tree_definitions[NUM_TREES] = {
                .spread = 64.0f,
                .probability = 0.0005f,
                .area_probability = 0.3f,
-               .offset = SO_OAKTREE,
-               .area_offset = SO_OAKTREE_AREA,
+               .offset = OFFSET_OAKTREE,
+               .area_offset = OFFSET_OAKTREE_AREA,
                .condition = &oak_condition,
                .generate = &oak_tree,
        },
@@ -217,8 +217,8 @@ TreeDef tree_definitions[NUM_TREES] = {
                .spread = 256.0f,
                .probability = 0.01f,
                .area_probability = 0.1f,
-               .offset = SO_PINETREE,
-               .area_offset = SO_PINETREE_AREA,
+               .offset = OFFSET_PINETREE,
+               .area_offset = OFFSET_PINETREE_AREA,
                .condition = &pine_condition,
                .generate = &pine_tree,
        },
@@ -227,8 +227,8 @@ TreeDef tree_definitions[NUM_TREES] = {
                .spread = 16.0f,
                .probability = 0.005f,
                .area_probability = 0.5f,
-               .offset = SO_PALMTREE,
-               .area_offset = SO_PALMTREE_AREA,
+               .offset = OFFSET_PALMTREE,
+               .area_offset = OFFSET_PALMTREE_AREA,
                .condition = &palm_condition,
                .generate = &palm_tree,
        },