]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/server/voxel_procedural.h
Rework structure
[dragonblocks_alpha.git] / src / server / voxel_procedural.h
1 #ifndef _VOXEL_PROCEDURAL_H_
2 #define _VOXEL_PROCEDURAL_H_
3
4 #include <dragonstd/list.h>
5 #include <linmath.h>
6 #include "server/server_terrain.h"
7 #include "types.h"
8
9 // Note: This is a close reimplementation of goxel procedural scripting capabilities
10
11 typedef struct {
12         vec4 pos;
13         vec3 scale;
14         mat4x4 mat;
15         f32 h, s, l;
16         s32 life;
17 } VoxelProceduralState;
18
19 typedef struct {
20         v3s32 pos;
21         List *changed_chunks;
22         TerrainGenStage tgs;
23         s32 random;
24         List state;
25 } VoxelProcedural;
26
27 typedef TerrainNode (*VoxelProceduralNode)(v3s32 pos, v3f32 color, void *arg);
28
29 VoxelProcedural *voxel_procedural_create(List *changed_chunks, TerrainGenStage tgs, v3s32 pos);
30 void voxel_procedural_delete(VoxelProcedural *proc);
31 void voxel_procedural_hue(VoxelProcedural *proc, f32 value);
32 void voxel_procedural_sat(VoxelProcedural *proc, f32 value);
33 void voxel_procedural_light(VoxelProcedural *proc, f32 value);
34 void voxel_procedural_life(VoxelProcedural *proc, s32 value);
35 void voxel_procedural_x(VoxelProcedural *proc, f32 value);
36 void voxel_procedural_y(VoxelProcedural *proc, f32 value);
37 void voxel_procedural_z(VoxelProcedural *proc, f32 value);
38 void voxel_procedural_rx(VoxelProcedural *proc, f32 value);
39 void voxel_procedural_ry(VoxelProcedural *proc, f32 value);
40 void voxel_procedural_rz(VoxelProcedural *proc, f32 value);
41 void voxel_procedural_sx(VoxelProcedural *proc, f32 value);
42 void voxel_procedural_sy(VoxelProcedural *proc, f32 value);
43 void voxel_procedural_sz(VoxelProcedural *proc, f32 value);
44 void voxel_procedural_s(VoxelProcedural *proc, f32 value);
45 void voxel_procedural_pop(VoxelProcedural *proc);
46 void voxel_procedural_push(VoxelProcedural *proc);
47 bool voxel_procedural_is_alive(VoxelProcedural *proc);
48 void voxel_procedural_cube(VoxelProcedural *proc,  VoxelProceduralNode func, void *arg);
49 void voxel_procedural_cylinder(VoxelProcedural *proc,  VoxelProceduralNode func, void *arg);
50 f32 voxel_procedural_random(VoxelProcedural *proc, f32 base, f32 vary);
51
52 #endif // _VOXEL_PROCEDURAL_H_