List state;
} VoxelProcedural;
+typedef TerrainNode (*VoxelProceduralNode)(v3s32 pos, v3f32 color, void *arg);
+
VoxelProcedural *voxel_procedural_create(List *changed_chunks, TerrainGenStage tgs, v3s32 pos);
void voxel_procedural_delete(VoxelProcedural *proc);
void voxel_procedural_hue(VoxelProcedural *proc, f32 value);
void voxel_procedural_pop(VoxelProcedural *proc);
void voxel_procedural_push(VoxelProcedural *proc);
bool voxel_procedural_is_alive(VoxelProcedural *proc);
-void voxel_procedural_cube(VoxelProcedural *proc, NodeType node, bool use_color);
-void voxel_procedural_cylinder(VoxelProcedural *proc, NodeType node, bool use_color);
+void voxel_procedural_cube(VoxelProcedural *proc, VoxelProceduralNode func, void *arg);
+void voxel_procedural_cylinder(VoxelProcedural *proc, VoxelProceduralNode func, void *arg);
f32 voxel_procedural_random(VoxelProcedural *proc, f32 base, f32 vary);
#endif // _VOXEL_PROCEDURAL_H_