#ifndef VOXEL_TOOLS_H #define VOXEL_TOOLS_H #include "core/color.h" #include "core/math/rect2.h" #include "core/math/vector2.h" #include "core/math/vector3.h" #include "core/pool_vector.h" #include "core/reference.h" #include "core/vector.h" #include "scene/3d/immediate_geometry.h" #include "scene/3d/mesh_instance.h" #include "scene/3d/spatial.h" #include "scene/main/node.h" #include "scene/resources/concave_polygon_shape.h" #include "scene/resources/material.h" #include "scene/resources/mesh.h" #include "scene/resources/surface_tool.h" #include "../../mesh_data_resource/mesh_data_resource.h" #include "../library/voxelman_library.h" const double PI_2 = 3.141592653589793238463 / 2; const double PI = 3.141592653589793238463; class VoxelmanLibrary; class VoxelChunk; class VoxelMesher : public Reference { GDCLASS(VoxelMesher, Reference); public: Ref get_library(); void set_library(Ref library); Ref get_material(); void set_material(Ref material); float get_ao_strength() const; void set_ao_strength(float value); float get_base_light_value() const; void set_base_light_value(float value); float get_voxel_scale() const; void set_voxel_scale(const float voxel_scale); int get_lod_size() const; void set_lod_size(const int lod_size); Rect2 get_uv_margin() const; void set_uv_margin(const Rect2 margin); void reset(); void add_chunk_bind(Node *chunk); void add_chunk(VoxelChunk *chunk); void add_chunk_liquid_bind(Node *chunk); void add_chunk_liquid(VoxelChunk *chunk); void add_mesh_data_resource(Ref mesh, const Vector3 position = Vector3(0, 0, 0), const Vector3 rotation = Vector3(0, 0, 0), const Vector3 scale = Vector3(1.0, 1.0, 1.0), const Rect2 uv_rect = Rect2(0, 0, 1, 1)); void add_mesh_data_resource_transform(Ref mesh, const Transform transform, const Rect2 uv_rect = Rect2(0, 0, 1, 1)); void bake_colors_bind(Node *chunk); void bake_colors(VoxelChunk *chunk); void _bake_colors(Node *p_chunk); void bake_liquid_colors_bind(Node *chunk); void bake_liquid_colors(VoxelChunk *chunk); void _bake_liquid_colors(Node *p_chunk); void build_collider(RID shape) const; void bake_lights(MeshInstance *node, Vector > &lights); void build_mesh(RID mesh); PoolVector get_vertices(); void set_vertices(const PoolVector &values); int get_vertex_count(); Vector3 get_vertex(int idx); void remove_vertex(int idx); void add_vertex(Vector3 vertex); PoolVector get_normals(); void set_normals(const PoolVector &values); int get_normal_count(); Vector3 get_normal(int idx); void remove_normal(int idx); void add_normal(Vector3 normal); PoolVector get_colors(); void set_colors(const PoolVector &values); int get_color_count(); Color get_color(int idx); void remove_color(int idx); void add_color(Color color); PoolVector get_uvs(); void set_uvs(const PoolVector &values); int get_uv_count(); Vector2 get_uv(int idx); void remove_uv(int idx); void add_uv(Vector2 vector); PoolVector get_uv2s(); void set_uv2s(const PoolVector &values); int get_uv2_count(); Vector2 get_uv2(int idx); void remove_uv2(int idx); void add_uv2(Vector2 vector); PoolVector get_indices(); void set_indices(const PoolVector values); int get_indices_count(); int get_indice(int idx); void remove_indices(int idx); void add_indices(int index); VoxelMesher(Ref library); VoxelMesher(); ~VoxelMesher(); protected: static void _bind_methods(); PoolVector _vertices; PoolVector _normals; PoolVector _colors; PoolVector _uvs; PoolVector _uv2s; PoolVector _indices; PoolVector _bones; Ref _library; Ref _material; float _voxel_scale; int _lod_size; Ref _surface_tool; float _ao_strength; float _base_light_value; Rect2 _uv_margin; }; #endif