mirror of
https://github.com/Relintai/terraman.git
synced 2025-04-21 21:41:20 +02:00
Changed every Voxel prefix to Terra. Also added back everything to the build. It will also build with voxelman installed.
This commit is contained in:
parent
68cb3b7544
commit
126bb7c712
76
README.md
76
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
experimental terrain and building engine for godot, based on voxelman.
|
||||
|
||||
# Voxelman's readme: (will update later)
|
||||
# Terraman's readme: (will update later)
|
||||
|
||||
A voxel engine module for godot, focusing more on editor integration, gameplay-related features, and extendability (even from gdscript), without sacrificing too much speed.
|
||||
|
||||
@ -15,8 +15,8 @@ check whether it works from time to time.
|
||||
|
||||
## Optional Dependencies
|
||||
|
||||
`https://github.com/Relintai/thread_pool`: Threaded chunk generation. Without this Voxelman is single threaded! \
|
||||
`https://github.com/Relintai/texture_packer`: You get access to [VoxelmanLibraryMerger](#voxelmanlibrarymerger). \
|
||||
`https://github.com/Relintai/thread_pool`: Threaded chunk generation. Without this Terraman is single threaded! \
|
||||
`https://github.com/Relintai/texture_packer`: You get access to [TerramanLibraryMerger](#voxelmanlibrarymerger). \
|
||||
`https://github.com/Relintai/mesh_data_resource`: You get access to a bunch of properties, and methods that can manipulate meshes.\
|
||||
`https://github.com/Relintai/props`: You get access to a bunch of properties, and methods that can manipulate, and use props.\
|
||||
`https://github.com/Relintai/mesh_utils`: Lets you use lod levels higher than 4 by default.
|
||||
@ -28,29 +28,29 @@ repo, should you want to. It contains all my modules.
|
||||
|
||||
## Usage
|
||||
|
||||
First create a scene, and add a VoxelWorldBlocky node into it. Create a VoxelmanLibrary, and assign it to the Library property.
|
||||
Also, add a VoxelSurface into your library.
|
||||
First create a scene, and add a TerraWorldBlocky node into it. Create a TerramanLibrary, and assign it to the Library property.
|
||||
Also, add a TerraSurface into your library.
|
||||
|
||||
(VoxelWorldBlocky is the only one that works properly for now, this will soon be fixed!)
|
||||
(TerraWorldBlocky is the only one that works properly for now, this will soon be fixed!)
|
||||
|
||||
Tick the editable property, deselect, then select the world again, and click the insert button at the top toolbar, or press B to insert a
|
||||
voxel at the inspector's camera's location.
|
||||
|
||||
Select the add button, and now you can just add voxels with the mouse, by clicking on the newly added voxel.
|
||||
|
||||
## VoxelmanLibrary
|
||||
## TerramanLibrary
|
||||
|
||||
This class stores the materials, and the VoxelSurfaces.
|
||||
This class stores the materials, and the TerraSurfaces.
|
||||
|
||||
Note: If you want lods, assign equal (or more) materials than your maximum lod level. If you only want one material just assign it
|
||||
multiple times. If you don't then your meshes won't have materials (They will be white).
|
||||
|
||||
### VoxelmanLibrarySimple
|
||||
### TerramanLibrarySimple
|
||||
|
||||
The simplest library, just assign a material with a texture, and using the atlas_rows and atlas_culomns properties to tell the system
|
||||
how the UVs should be divided.
|
||||
|
||||
### VoxelmanLibraryMerger
|
||||
### TerramanLibraryMerger
|
||||
|
||||
You will only have this if your godot also contains https://github.com/Relintai/texture_packer
|
||||
|
||||
@ -60,41 +60,41 @@ You can assign any texture to your surfaces with this, and it will merge them to
|
||||
|
||||
The 2 base classes:
|
||||
|
||||
VoxelWorld: Basic world, does not do anything until you implemnent the required virtual methods!\
|
||||
VoxelWorldDefault: This adds threading, and LoD storage support to VoxelWorld. Will not create meshes for you!
|
||||
TerraWorld: Basic world, does not do anything until you implemnent the required virtual methods!\
|
||||
TerraWorldDefault: This adds threading, and LoD storage support to TerraWorld. Will not create meshes for you!
|
||||
|
||||
### VoxelWorldBlocky
|
||||
### TerraWorldBlocky
|
||||
|
||||
The most basic world. It is the Minecraft-style world.
|
||||
|
||||
### VoxelWorldMarchingCubes
|
||||
### TerraWorldMarchingCubes
|
||||
|
||||
A marching cubes based Voxel World. Actually it uses a modified version of the Transvoxel tables. It is UV mapped.
|
||||
A marching cubes based Terra World. Actually it uses a modified version of the Transvoxel tables. It is UV mapped.
|
||||
|
||||
### VoxelWorldCubic
|
||||
### TerraWorldCubic
|
||||
|
||||
This is my own meshing algorithm, it's basicly a Minecraft style mesher that can take isolevel into account.
|
||||
|
||||
### Level generation
|
||||
|
||||
Assign a VoxelManLevelGenerator to the `World`'s `Level Generator` property.
|
||||
Assign a TerraManLevelGenerator to the `World`'s `Level Generator` property.
|
||||
|
||||
You can write your own algorithm by implementing the ``` void _generate_chunk(chunk: VoxelChunk) virtual ``` method.
|
||||
You can write your own algorithm by implementing the ``` void _generate_chunk(chunk: TerraChunk) virtual ``` method.
|
||||
|
||||
`VoxelManLevelGeneratorFlat` is also available, it will generate a floor for you, if you use it.
|
||||
`TerraManLevelGeneratorFlat` is also available, it will generate a floor for you, if you use it.
|
||||
|
||||
## VoxelJobs
|
||||
## TerraJobs
|
||||
|
||||
Producing just a terrarin mesh for a chunk is not that hard by itself. However when you start adding layers/features
|
||||
like lod generation, collision meshes (especially since manipulating the physics server is not threadsafe),
|
||||
vertex volumetric lights, props, snapping props, props with vertex lights, etc
|
||||
chunk mesh generation can quicly become a serious mess.
|
||||
|
||||
VoxelJobs are meant to solve the issue with this complexity.
|
||||
TerraJobs are meant to solve the issue with this complexity.
|
||||
|
||||
They also provide a way to easily modularize mesh generation.
|
||||
|
||||
### VoxelJob
|
||||
### TerraJob
|
||||
|
||||
Base class for jobs.
|
||||
|
||||
@ -105,43 +105,43 @@ A job has a reference to it's owner chunk.
|
||||
|
||||
If you implement your own jobs, when your job finishes call `next_job()`.
|
||||
|
||||
### VoxelLightJob
|
||||
### TerraLightJob
|
||||
|
||||
This is the job that will generate vertex light based ao, random ao, and will bake your `VoxelLight`s.
|
||||
This is the job that will generate vertex light based ao, random ao, and will bake your `TerraLight`s.
|
||||
|
||||
### VoxelTerrarinJob
|
||||
### TerraTerrarinJob
|
||||
|
||||
This will generate your terrarin collider and mesh (with lods) for you, using the meshers that you add into it.
|
||||
|
||||
### VoxelPropJob
|
||||
### TerraPropJob
|
||||
|
||||
This will generate your prop meshes (with lods).
|
||||
|
||||
### Internal workings
|
||||
|
||||
#### VoxelWorld
|
||||
#### TerraWorld
|
||||
|
||||
Whenever you want to spawn a chunk your World will create it using the ``` VoxelChunk _create_chunk(x: int, y: int, z: int, chunk: VoxelChunk) virtual ``` method.
|
||||
Whenever you want to spawn a chunk your World will create it using the ``` TerraChunk _create_chunk(x: int, y: int, z: int, chunk: TerraChunk) virtual ``` method.
|
||||
|
||||
Since properly initializing a chunk usually takes quite a few steps that you probably don't want to repeat everywhere the `chunk`
|
||||
parameter was added. This means you can just call the super `_create_chunk` methods, and you won't need to worry about your chunk
|
||||
getting overridden. Like:
|
||||
|
||||
Note that `_create_chunk` is also responsible for initializing chunks if you have them stored inside a scene.
|
||||
This is done by `setup_chunk(shunk)` in `VoxelWorld`.
|
||||
This is done by `setup_chunk(shunk)` in `TerraWorld`.
|
||||
|
||||
```
|
||||
func _create_chunk(x : int, y : int, z : int, chunk : VoxelChunk) -> VoxelChunk:
|
||||
func _create_chunk(x : int, y : int, z : int, chunk : TerraChunk) -> TerraChunk:
|
||||
if !chunk:
|
||||
chunk = MyChunk.new()
|
||||
|
||||
# We need to check whether or not we need to initialize jobs
|
||||
if chunk.job_get_count() == 0:
|
||||
# Setup a blocky (minecratf like) mesher job
|
||||
var tj : VoxelTerrarinJob = VoxelTerrarinJob.new()
|
||||
var tj : TerraTerrarinJob = TerraTerrarinJob.new()
|
||||
|
||||
tj.add_mesher(VoxelMesherBlocky.new())
|
||||
tj.add_liquid_mesher(VoxelMesherLiquidBlocky.new())
|
||||
tj.add_mesher(TerraMesherBlocky.new())
|
||||
tj.add_liquid_mesher(TerraMesherLiquidBlocky.new())
|
||||
|
||||
chunk.job_add(tj);
|
||||
|
||||
@ -150,17 +150,17 @@ This is done by `setup_chunk(shunk)` in `VoxelWorld`.
|
||||
return ._create_chunk(x, y, z, chunk)
|
||||
```
|
||||
|
||||
#### VoxelChunk
|
||||
#### TerraChunk
|
||||
|
||||
Stores terrarin data, prop data. And mesh data (VoxelChunkDefault), and the mesh generation jobs.
|
||||
Stores terrarin data, prop data. And mesh data (TerraChunkDefault), and the mesh generation jobs.
|
||||
|
||||
When it starts building meshes it will start submitting jobs to thread_pool (if present) one by one.
|
||||
|
||||
#### VoxelMesher
|
||||
#### TerraMesher
|
||||
|
||||
If you want to implement your own meshing algorithm you can do so by overriding ``` void _add_chunk(chunk: VoxelChunk) virtual ```.
|
||||
If you want to implement your own meshing algorithm you can do so by overriding ``` void _add_chunk(chunk: TerraChunk) virtual ```.
|
||||
|
||||
VoxelMesher works similarly to SurfaceTool, so first you need to set colors, uvs, etc and then call add_vertex.
|
||||
TerraMesher works similarly to SurfaceTool, so first you need to set colors, uvs, etc and then call add_vertex.
|
||||
They won't get reset, so for exaple if you want all your vertices to have a certain color, you can get away with setting it only once.
|
||||
|
||||
## Compiling
|
||||
|
80
SCsub
80
SCsub
@ -25,65 +25,65 @@ sources = [
|
||||
|
||||
"register_types.cpp",
|
||||
|
||||
#"library/voxelman_library.cpp",
|
||||
#"library/voxelman_library_simple.cpp",
|
||||
"library/voxelman_library.cpp",
|
||||
"library/voxelman_library_simple.cpp",
|
||||
|
||||
#"nodes/voxelman_light.cpp",
|
||||
"nodes/voxelman_light.cpp",
|
||||
|
||||
#"library/voxel_surface.cpp",
|
||||
#"library/voxel_surface_simple.cpp",
|
||||
"library/voxel_surface.cpp",
|
||||
"library/voxel_surface_simple.cpp",
|
||||
|
||||
#"data/voxel_light.cpp",
|
||||
"data/voxel_light.cpp",
|
||||
|
||||
#"meshers/voxel_mesher.cpp",
|
||||
"meshers/voxel_mesher.cpp",
|
||||
|
||||
#"meshers/marching_cubes/marching_cubes_cell_data.cpp",
|
||||
#"meshers/marching_cubes/voxel_mesher_marching_cubes.cpp",
|
||||
#"meshers/marching_cubes/marching_cubes_tables.cpp",
|
||||
"meshers/marching_cubes/marching_cubes_cell_data.cpp",
|
||||
"meshers/marching_cubes/voxel_mesher_marching_cubes.cpp",
|
||||
"meshers/marching_cubes/marching_cubes_tables.cpp",
|
||||
|
||||
#"meshers/blocky/voxel_mesher_blocky.cpp",
|
||||
#"meshers/blocky/voxel_mesher_liquid_blocky.cpp",
|
||||
#"meshers/default/voxel_mesher_default.cpp",
|
||||
"meshers/blocky/voxel_mesher_blocky.cpp",
|
||||
"meshers/blocky/voxel_mesher_liquid_blocky.cpp",
|
||||
"meshers/default/voxel_mesher_default.cpp",
|
||||
|
||||
#"world/voxel_world.cpp",
|
||||
#"world/voxel_chunk.cpp",
|
||||
#"world/voxel_structure.cpp",
|
||||
#"world/block_voxel_structure.cpp",
|
||||
#"world/environment_data.cpp",
|
||||
"world/voxel_world.cpp",
|
||||
"world/voxel_chunk.cpp",
|
||||
"world/voxel_structure.cpp",
|
||||
"world/block_voxel_structure.cpp",
|
||||
"world/environment_data.cpp",
|
||||
|
||||
#"world/blocky/voxel_chunk_blocky.cpp",
|
||||
#"world/blocky/voxel_world_blocky.cpp",
|
||||
"world/blocky/voxel_chunk_blocky.cpp",
|
||||
"world/blocky/voxel_world_blocky.cpp",
|
||||
|
||||
#"world/default/voxel_world_default.cpp",
|
||||
# "world/default/voxel_chunk_default.cpp",
|
||||
"world/default/voxel_world_default.cpp",
|
||||
"world/default/voxel_chunk_default.cpp",
|
||||
|
||||
# "world/marching_cubes/voxel_chunk_marching_cubes.cpp",
|
||||
# "world/marching_cubes/voxel_world_marching_cubes.cpp",
|
||||
"world/marching_cubes/voxel_chunk_marching_cubes.cpp",
|
||||
"world/marching_cubes/voxel_world_marching_cubes.cpp",
|
||||
|
||||
#"meshers/cubic/voxel_mesher_cubic.cpp",
|
||||
#"meshers/cubic/voxel_cube_points.cpp",
|
||||
"meshers/cubic/voxel_mesher_cubic.cpp",
|
||||
"meshers/cubic/voxel_cube_points.cpp",
|
||||
|
||||
#"level_generator/voxelman_level_generator.cpp",
|
||||
#"level_generator/voxelman_level_generator_flat.cpp",
|
||||
"level_generator/voxelman_level_generator.cpp",
|
||||
"level_generator/voxelman_level_generator_flat.cpp",
|
||||
|
||||
#"world/cubic/voxel_chunk_cubic.cpp",
|
||||
#"world/cubic/voxel_world_cubic.cpp",
|
||||
"world/cubic/voxel_chunk_cubic.cpp",
|
||||
"world/cubic/voxel_world_cubic.cpp",
|
||||
|
||||
#"areas/world_area.cpp",
|
||||
"areas/world_area.cpp",
|
||||
|
||||
#"world/voxel_world_editor.cpp",
|
||||
"world/voxel_world_editor.cpp",
|
||||
|
||||
#"thirdparty/lz4/lz4.c",
|
||||
"thirdparty/lz4/lz4.c",
|
||||
|
||||
#"world/jobs/voxel_job.cpp",
|
||||
#"world/jobs/voxel_terrarin_job.cpp",
|
||||
#"world/jobs/voxel_light_job.cpp",
|
||||
#"world/jobs/voxel_prop_job.cpp",
|
||||
"world/jobs/voxel_job.cpp",
|
||||
"world/jobs/voxel_terrarin_job.cpp",
|
||||
"world/jobs/voxel_light_job.cpp",
|
||||
"world/jobs/voxel_prop_job.cpp",
|
||||
]
|
||||
|
||||
#if has_texture_packer:
|
||||
# sources.append("library/voxelman_library_merger.cpp")
|
||||
# sources.append("library/voxel_surface_merger.cpp")
|
||||
if has_texture_packer:
|
||||
sources.append("library/voxelman_library_merger.cpp")
|
||||
sources.append("library/voxel_surface_merger.cpp")
|
||||
|
||||
if ARGUMENTS.get('custom_modules_shared', 'no') == 'yes':
|
||||
# Shared lib compilation
|
||||
|
@ -22,66 +22,66 @@ SOFTWARE.
|
||||
|
||||
#include "world_area.h"
|
||||
|
||||
AABB WorldArea::get_aabb() const {
|
||||
AABB TerraWorldArea::get_aabb() const {
|
||||
return _aabb;
|
||||
}
|
||||
void WorldArea::set_aabb(const AABB value) {
|
||||
void TerraWorldArea::set_aabb(const AABB value) {
|
||||
_aabb = value;
|
||||
}
|
||||
|
||||
Ref<Texture> WorldArea::get_map_texture() const {
|
||||
Ref<Texture> TerraWorldArea::get_map_texture() const {
|
||||
return _map_texture;
|
||||
}
|
||||
void WorldArea::set_map_texture(const Ref<Texture> &value) {
|
||||
void TerraWorldArea::set_map_texture(const Ref<Texture> &value) {
|
||||
_map_texture = value;
|
||||
}
|
||||
|
||||
Ref<Texture> WorldArea::get_fov_texture() const {
|
||||
Ref<Texture> TerraWorldArea::get_fov_texture() const {
|
||||
return _fov_texture;
|
||||
}
|
||||
void WorldArea::set_fov_texture(const Ref<Texture> &value) {
|
||||
void TerraWorldArea::set_fov_texture(const Ref<Texture> &value) {
|
||||
_fov_texture = value;
|
||||
}
|
||||
|
||||
String WorldArea::get_name() const {
|
||||
String TerraWorldArea::get_name() const {
|
||||
return _name;
|
||||
}
|
||||
void WorldArea::set_name(const String &value) {
|
||||
void TerraWorldArea::set_name(const String &value) {
|
||||
_name = value;
|
||||
}
|
||||
|
||||
int WorldArea::get_level() const {
|
||||
int TerraWorldArea::get_level() const {
|
||||
return _level;
|
||||
}
|
||||
void WorldArea::set_level(const int level) {
|
||||
void TerraWorldArea::set_level(const int level) {
|
||||
_level = level;
|
||||
}
|
||||
|
||||
WorldArea::WorldArea() {
|
||||
TerraWorldArea::TerraWorldArea() {
|
||||
_level = 0;
|
||||
}
|
||||
|
||||
WorldArea::~WorldArea() {
|
||||
TerraWorldArea::~TerraWorldArea() {
|
||||
}
|
||||
|
||||
void WorldArea::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_aabb"), &WorldArea::get_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_aabb"), &WorldArea::set_aabb);
|
||||
void TerraWorldArea::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_aabb"), &TerraWorldArea::get_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_aabb"), &TerraWorldArea::set_aabb);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::AABB, "aabb"), "set_aabb", "get_aabb");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_map_texture"), &WorldArea::get_map_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_map_texture"), &WorldArea::set_map_texture);
|
||||
ClassDB::bind_method(D_METHOD("get_map_texture"), &TerraWorldArea::get_map_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_map_texture"), &TerraWorldArea::set_map_texture);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "map_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_map_texture", "get_map_texture");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_fov_texture"), &WorldArea::get_fov_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_fov_texture"), &WorldArea::set_fov_texture);
|
||||
ClassDB::bind_method(D_METHOD("get_fov_texture"), &TerraWorldArea::get_fov_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_fov_texture"), &TerraWorldArea::set_fov_texture);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "fov_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_fov_texture", "get_fov_texture");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_name"), &WorldArea::get_name);
|
||||
ClassDB::bind_method(D_METHOD("set_name"), &WorldArea::set_name);
|
||||
ClassDB::bind_method(D_METHOD("get_name"), &TerraWorldArea::get_name);
|
||||
ClassDB::bind_method(D_METHOD("set_name"), &TerraWorldArea::set_name);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "name"), "set_name", "get_name");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_level"), &WorldArea::get_level);
|
||||
ClassDB::bind_method(D_METHOD("set_level"), &WorldArea::set_level);
|
||||
ClassDB::bind_method(D_METHOD("get_level"), &TerraWorldArea::get_level);
|
||||
ClassDB::bind_method(D_METHOD("set_level"), &TerraWorldArea::set_level);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "level"), "set_level", "get_level");
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef WORLD_AREA_H
|
||||
#define WORLD_AREA_H
|
||||
#ifndef TERRA_WORLD_AREA_H
|
||||
#define TERRA_WORLD_AREA_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -37,8 +37,8 @@ SOFTWARE.
|
||||
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
class WorldArea : public Reference {
|
||||
GDCLASS(WorldArea, Reference);
|
||||
class TerraWorldArea : public Reference {
|
||||
GDCLASS(TerraWorldArea, Reference);
|
||||
|
||||
public:
|
||||
AABB get_aabb() const;
|
||||
@ -56,8 +56,8 @@ public:
|
||||
int get_level() const;
|
||||
void set_level(const int value);
|
||||
|
||||
WorldArea();
|
||||
~WorldArea();
|
||||
TerraWorldArea();
|
||||
~TerraWorldArea();
|
||||
|
||||
private:
|
||||
static void _bind_methods();
|
||||
|
78
config.py
78
config.py
@ -10,56 +10,56 @@ def configure(env):
|
||||
|
||||
def get_doc_classes():
|
||||
return [
|
||||
#"WorldArea",
|
||||
"TerraWorldArea",
|
||||
|
||||
#"VoxelLight",
|
||||
#"VoxelmanLight",
|
||||
"TerraLight",
|
||||
"TerramanLight",
|
||||
|
||||
# "VoxelmanLevelGenerator",
|
||||
# "VoxelmanLevelGeneratorFlat",
|
||||
"TerramanLevelGenerator",
|
||||
"TerramanLevelGeneratorFlat",
|
||||
|
||||
#"VoxelSurfaceMerger",
|
||||
# "VoxelSurfaceSimple",
|
||||
# "VoxelSurface",
|
||||
# "VoxelmanLibraryMerger",
|
||||
# "VoxelmanLibrarySimple",
|
||||
# "VoxelmanLibrary",
|
||||
"TerraSurfaceMerger",
|
||||
"TerraSurfaceSimple",
|
||||
"TerraSurface",
|
||||
"TerramanLibraryMerger",
|
||||
"TerramanLibrarySimple",
|
||||
"TerramanLibrary",
|
||||
|
||||
# "VoxelCubePoints",
|
||||
# "VoxelMesherCubic",
|
||||
# "VoxelMeshData",
|
||||
"TerraCubePoints",
|
||||
"TerraMesherCubic",
|
||||
"TerraMeshData",
|
||||
|
||||
# "MarchingCubesCellData",
|
||||
# "VoxelMesherMarchingCubes",
|
||||
"MarchingCubesCellData",
|
||||
"TerraMesherMarchingCubes",
|
||||
|
||||
# "VoxelMesher",
|
||||
"TerraMesher",
|
||||
|
||||
# "EnvironmentData",
|
||||
# "VoxelChunk",
|
||||
# "VoxelChunkDefault",
|
||||
# "VoxelStructure",
|
||||
# "BlockVoxelStructure",
|
||||
# "VoxelWorld",
|
||||
"EnvironmentData",
|
||||
"TerraChunk",
|
||||
"TerraChunkDefault",
|
||||
"TerraStructure",
|
||||
"BlockTerraStructure",
|
||||
"TerraWorld",
|
||||
|
||||
# "VoxelMesherBlocky",
|
||||
# "VoxelWorldBlocky",
|
||||
#"VoxelChunkBlocky",
|
||||
#"VoxelMesherLiquidBlocky",
|
||||
"TerraMesherBlocky",
|
||||
"TerraWorldBlocky",
|
||||
"TerraChunkBlocky",
|
||||
"TerraMesherLiquidBlocky",
|
||||
|
||||
# "VoxelWorldMarchingCubes",
|
||||
# "VoxelChunkMarchingCubes",
|
||||
"TerraWorldMarchingCubes",
|
||||
"TerraChunkMarchingCubes",
|
||||
|
||||
"TerraMesherCubic",
|
||||
"TerraWorldCubic",
|
||||
"TerraChunkCubic",
|
||||
|
||||
# "VoxelMesherCubic",
|
||||
# "VoxelWorldCubic",
|
||||
# "VoxelChunkCubic",
|
||||
"TerraMesherDefault",
|
||||
"TerraWorldDefault",
|
||||
|
||||
# "VoxelMesherDefault",
|
||||
# "VoxelWorldDefault",
|
||||
|
||||
# "VoxelJob",
|
||||
# "VoxelTerrarinJob",
|
||||
# "VoxelLightJob",
|
||||
#"VoxelPropJob",
|
||||
"TerraJob",
|
||||
"TerraTerrarinJob",
|
||||
"TerraLightJob",
|
||||
"TerraPropJob",
|
||||
]
|
||||
|
||||
|
||||
|
@ -22,56 +22,56 @@ SOFTWARE.
|
||||
|
||||
#include "voxel_light.h"
|
||||
|
||||
_FORCE_INLINE_ int VoxelLight::get_world_position_x() const {
|
||||
_FORCE_INLINE_ int TerraLight::get_world_position_x() const {
|
||||
return _world_position_x;
|
||||
}
|
||||
_FORCE_INLINE_ int VoxelLight::get_world_position_y() const {
|
||||
_FORCE_INLINE_ int TerraLight::get_world_position_y() const {
|
||||
return _world_position_y;
|
||||
}
|
||||
_FORCE_INLINE_ int VoxelLight::get_world_position_z() const {
|
||||
_FORCE_INLINE_ int TerraLight::get_world_position_z() const {
|
||||
return _world_position_z;
|
||||
}
|
||||
Vector3 VoxelLight::get_world_position() {
|
||||
Vector3 TerraLight::get_world_position() {
|
||||
return Vector3(_world_position_x, _world_position_y, _world_position_z);
|
||||
}
|
||||
void VoxelLight::set_world_position(const int x, const int y, const int z) {
|
||||
void TerraLight::set_world_position(const int x, const int y, const int z) {
|
||||
_world_position_x = x;
|
||||
_world_position_y = y;
|
||||
_world_position_z = z;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ Color VoxelLight::get_color() const {
|
||||
_FORCE_INLINE_ Color TerraLight::get_color() const {
|
||||
return _color;
|
||||
}
|
||||
void VoxelLight::set_color(const Color &color) {
|
||||
void TerraLight::set_color(const Color &color) {
|
||||
_color = color;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ float VoxelLight::get_size() const {
|
||||
_FORCE_INLINE_ float TerraLight::get_size() const {
|
||||
return _size;
|
||||
}
|
||||
void VoxelLight::set_size(const float size) {
|
||||
void TerraLight::set_size(const float size) {
|
||||
_size = size;
|
||||
}
|
||||
|
||||
VoxelLight::VoxelLight() {
|
||||
TerraLight::TerraLight() {
|
||||
_size = 0;
|
||||
}
|
||||
|
||||
VoxelLight::~VoxelLight() {
|
||||
TerraLight::~TerraLight() {
|
||||
}
|
||||
|
||||
void VoxelLight::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_x"), &VoxelLight::get_world_position_x);
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_y"), &VoxelLight::get_world_position_y);
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_z"), &VoxelLight::get_world_position_z);
|
||||
ClassDB::bind_method(D_METHOD("set_world_position", "x", "y", "z"), &VoxelLight::set_world_position);
|
||||
void TerraLight::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_x"), &TerraLight::get_world_position_x);
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_y"), &TerraLight::get_world_position_y);
|
||||
ClassDB::bind_method(D_METHOD("get_world_position_z"), &TerraLight::get_world_position_z);
|
||||
ClassDB::bind_method(D_METHOD("set_world_position", "x", "y", "z"), &TerraLight::set_world_position);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_color"), &VoxelLight::get_color);
|
||||
ClassDB::bind_method(D_METHOD("set_color"), &VoxelLight::set_color);
|
||||
ClassDB::bind_method(D_METHOD("get_color"), &TerraLight::get_color);
|
||||
ClassDB::bind_method(D_METHOD("set_color"), &TerraLight::set_color);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &VoxelLight::get_size);
|
||||
ClassDB::bind_method(D_METHOD("set_size"), &VoxelLight::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &TerraLight::get_size);
|
||||
ClassDB::bind_method(D_METHOD("set_size"), &TerraLight::set_size);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "size"), "set_size", "get_size");
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_LIGHT_H
|
||||
#define VOXEL_LIGHT_H
|
||||
#ifndef TERRA_LIGHT_H
|
||||
#define TERRA_LIGHT_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -35,8 +35,8 @@ SOFTWARE.
|
||||
#include "core/color.h"
|
||||
#endif
|
||||
|
||||
class VoxelLight : public Reference {
|
||||
GDCLASS(VoxelLight, Reference);
|
||||
class TerraLight : public Reference {
|
||||
GDCLASS(TerraLight, Reference);
|
||||
|
||||
public:
|
||||
int get_world_position_x() const;
|
||||
@ -51,8 +51,8 @@ public:
|
||||
float get_size() const;
|
||||
void set_size(const float strength);
|
||||
|
||||
VoxelLight();
|
||||
~VoxelLight();
|
||||
TerraLight();
|
||||
~TerraLight();
|
||||
|
||||
private:
|
||||
static void _bind_methods();
|
||||
|
@ -24,20 +24,20 @@ SOFTWARE.
|
||||
|
||||
#include "../world/voxel_chunk.h"
|
||||
|
||||
void VoxelmanLevelGenerator::generate_chunk(Ref<VoxelChunk> chunk) {
|
||||
void TerramanLevelGenerator::generate_chunk(Ref<TerraChunk> chunk) {
|
||||
if (has_method("_generate_chunk")) {
|
||||
call("_generate_chunk", chunk);
|
||||
}
|
||||
}
|
||||
|
||||
VoxelmanLevelGenerator::VoxelmanLevelGenerator() {
|
||||
TerramanLevelGenerator::TerramanLevelGenerator() {
|
||||
}
|
||||
|
||||
VoxelmanLevelGenerator::~VoxelmanLevelGenerator() {
|
||||
TerramanLevelGenerator::~TerramanLevelGenerator() {
|
||||
}
|
||||
|
||||
void VoxelmanLevelGenerator::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_generate_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
|
||||
void TerramanLevelGenerator::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_generate_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerraChunk")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("generate_chunk", "chunk"), &VoxelmanLevelGenerator::generate_chunk);
|
||||
ClassDB::bind_method(D_METHOD("generate_chunk", "chunk"), &TerramanLevelGenerator::generate_chunk);
|
||||
}
|
||||
|
@ -31,16 +31,16 @@ SOFTWARE.
|
||||
#include "core/resource.h"
|
||||
#endif
|
||||
|
||||
class VoxelChunk;
|
||||
class TerraChunk;
|
||||
|
||||
class VoxelmanLevelGenerator : public Resource {
|
||||
GDCLASS(VoxelmanLevelGenerator, Resource);
|
||||
class TerramanLevelGenerator : public Resource {
|
||||
GDCLASS(TerramanLevelGenerator, Resource);
|
||||
|
||||
public:
|
||||
void generate_chunk(Ref<VoxelChunk> chunk);
|
||||
void generate_chunk(Ref<TerraChunk> chunk);
|
||||
|
||||
VoxelmanLevelGenerator();
|
||||
~VoxelmanLevelGenerator();
|
||||
TerramanLevelGenerator();
|
||||
~TerramanLevelGenerator();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -24,21 +24,21 @@ SOFTWARE.
|
||||
|
||||
#include "../world/voxel_chunk.h"
|
||||
|
||||
int VoxelmanLevelGeneratorFlat::get_floor_position() const {
|
||||
int TerramanLevelGeneratorFlat::get_floor_position() const {
|
||||
return _floor_position;
|
||||
}
|
||||
void VoxelmanLevelGeneratorFlat::set_floor_position(const int floor_height) {
|
||||
void TerramanLevelGeneratorFlat::set_floor_position(const int floor_height) {
|
||||
_floor_position = floor_height;
|
||||
}
|
||||
|
||||
Dictionary VoxelmanLevelGeneratorFlat::get_channel_map() {
|
||||
Dictionary TerramanLevelGeneratorFlat::get_channel_map() {
|
||||
return _channel_map;
|
||||
}
|
||||
void VoxelmanLevelGeneratorFlat::set_channel_map(const Dictionary &map) {
|
||||
void TerramanLevelGeneratorFlat::set_channel_map(const Dictionary &map) {
|
||||
_channel_map = map;
|
||||
}
|
||||
|
||||
void VoxelmanLevelGeneratorFlat::_generate_chunk(Ref<VoxelChunk> chunk) {
|
||||
void TerramanLevelGeneratorFlat::_generate_chunk(Ref<TerraChunk> chunk) {
|
||||
int dymin = chunk->get_position_y() * chunk->get_size_y();
|
||||
int dymax = dymin + chunk->get_size_y() + chunk->get_margin_end();
|
||||
|
||||
@ -82,22 +82,22 @@ void VoxelmanLevelGeneratorFlat::_generate_chunk(Ref<VoxelChunk> chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelmanLevelGeneratorFlat::VoxelmanLevelGeneratorFlat() {
|
||||
TerramanLevelGeneratorFlat::TerramanLevelGeneratorFlat() {
|
||||
_floor_position = 0;
|
||||
}
|
||||
|
||||
VoxelmanLevelGeneratorFlat::~VoxelmanLevelGeneratorFlat() {
|
||||
TerramanLevelGeneratorFlat::~TerramanLevelGeneratorFlat() {
|
||||
_channel_map.clear();
|
||||
}
|
||||
|
||||
void VoxelmanLevelGeneratorFlat::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_floor_position"), &VoxelmanLevelGeneratorFlat::get_floor_position);
|
||||
ClassDB::bind_method(D_METHOD("set_floor_position", "value"), &VoxelmanLevelGeneratorFlat::set_floor_position);
|
||||
void TerramanLevelGeneratorFlat::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_floor_position"), &TerramanLevelGeneratorFlat::get_floor_position);
|
||||
ClassDB::bind_method(D_METHOD("set_floor_position", "value"), &TerramanLevelGeneratorFlat::set_floor_position);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "floor_position"), "set_floor_position", "get_floor_position");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_channel_map"), &VoxelmanLevelGeneratorFlat::get_channel_map);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_map", "value"), &VoxelmanLevelGeneratorFlat::set_channel_map);
|
||||
ClassDB::bind_method(D_METHOD("get_channel_map"), &TerramanLevelGeneratorFlat::get_channel_map);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_map", "value"), &TerramanLevelGeneratorFlat::set_channel_map);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "channel_map"), "set_channel_map", "get_channel_map");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_generate_chunk", "chunk"), &VoxelmanLevelGeneratorFlat::_generate_chunk);
|
||||
ClassDB::bind_method(D_METHOD("_generate_chunk", "chunk"), &TerramanLevelGeneratorFlat::_generate_chunk);
|
||||
}
|
||||
|
@ -25,10 +25,10 @@ SOFTWARE.
|
||||
|
||||
#include "voxelman_level_generator.h"
|
||||
|
||||
class VoxelChunk;
|
||||
class TerraChunk;
|
||||
|
||||
class VoxelmanLevelGeneratorFlat : public VoxelmanLevelGenerator {
|
||||
GDCLASS(VoxelmanLevelGeneratorFlat, VoxelmanLevelGenerator);
|
||||
class TerramanLevelGeneratorFlat : public TerramanLevelGenerator {
|
||||
GDCLASS(TerramanLevelGeneratorFlat, TerramanLevelGenerator);
|
||||
|
||||
public:
|
||||
int get_floor_position() const;
|
||||
@ -37,10 +37,10 @@ public:
|
||||
Dictionary get_channel_map();
|
||||
void set_channel_map(const Dictionary &map);
|
||||
|
||||
virtual void _generate_chunk(Ref<VoxelChunk> chunk);
|
||||
virtual void _generate_chunk(Ref<TerraChunk> chunk);
|
||||
|
||||
VoxelmanLevelGeneratorFlat();
|
||||
~VoxelmanLevelGeneratorFlat();
|
||||
TerramanLevelGeneratorFlat();
|
||||
~TerramanLevelGeneratorFlat();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -22,50 +22,50 @@ SOFTWARE.
|
||||
|
||||
#include "voxel_surface.h"
|
||||
|
||||
int VoxelSurface::get_id() const {
|
||||
int TerraSurface::get_id() const {
|
||||
return _id;
|
||||
}
|
||||
void VoxelSurface::set_id(const int value) {
|
||||
void TerraSurface::set_id(const int value) {
|
||||
_id = value;
|
||||
}
|
||||
|
||||
int VoxelSurface::get_mesher_index() const {
|
||||
int TerraSurface::get_mesher_index() const {
|
||||
return _mesher_index;
|
||||
}
|
||||
void VoxelSurface::set_mesher_index(const int value) {
|
||||
void TerraSurface::set_mesher_index(const int value) {
|
||||
_mesher_index = value;
|
||||
}
|
||||
|
||||
bool VoxelSurface::get_transparent() const {
|
||||
bool TerraSurface::get_transparent() const {
|
||||
return _transparent;
|
||||
}
|
||||
void VoxelSurface::set_transparent(const bool transparent) {
|
||||
void TerraSurface::set_transparent(const bool transparent) {
|
||||
_transparent = transparent;
|
||||
}
|
||||
|
||||
bool VoxelSurface::get_liquid() const {
|
||||
bool TerraSurface::get_liquid() const {
|
||||
return _liquid;
|
||||
}
|
||||
void VoxelSurface::set_liquid(const bool value) {
|
||||
void TerraSurface::set_liquid(const bool value) {
|
||||
_liquid = value;
|
||||
}
|
||||
|
||||
Rect2 VoxelSurface::get_rect(const VoxelSurfaceSides side) const {
|
||||
Rect2 TerraSurface::get_rect(const TerraSurfaceSides side) const {
|
||||
return _rects[side];
|
||||
}
|
||||
void VoxelSurface::set_rect(const VoxelSurfaceSides side, const Rect2 &rect) {
|
||||
void TerraSurface::set_rect(const TerraSurfaceSides side, const Rect2 &rect) {
|
||||
_rects[side] = rect;
|
||||
}
|
||||
|
||||
Ref<VoxelmanLibrary> VoxelSurface::get_library() const {
|
||||
return Ref<VoxelmanLibrary>(_library);
|
||||
Ref<TerramanLibrary> TerraSurface::get_library() const {
|
||||
return Ref<TerramanLibrary>(_library);
|
||||
}
|
||||
|
||||
void VoxelSurface::set_library(Ref<VoxelmanLibrary> library) {
|
||||
void TerraSurface::set_library(Ref<TerramanLibrary> library) {
|
||||
_library = (*library);
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ Vector2 VoxelSurface::transform_uv(const VoxelSurfaceSides p_side, const Vector2 &p_uv) const {
|
||||
_FORCE_INLINE_ Vector2 TerraSurface::transform_uv(const TerraSurfaceSides p_side, const Vector2 &p_uv) const {
|
||||
Vector2 uv = p_uv;
|
||||
|
||||
Rect2 r = _rects[p_side];
|
||||
@ -78,7 +78,7 @@ _FORCE_INLINE_ Vector2 VoxelSurface::transform_uv(const VoxelSurfaceSides p_side
|
||||
return uv;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ Vector2 VoxelSurface::transform_uv_scaled(const VoxelSurfaceSides p_side, const Vector2 &p_uv, const int p_current_x, const int p_current_y, const int p_max) const {
|
||||
_FORCE_INLINE_ Vector2 TerraSurface::transform_uv_scaled(const TerraSurfaceSides p_side, const Vector2 &p_uv, const int p_current_x, const int p_current_y, const int p_max) const {
|
||||
Vector2 uv = p_uv;
|
||||
|
||||
Rect2 r = _rects[p_side];
|
||||
@ -95,10 +95,10 @@ _FORCE_INLINE_ Vector2 VoxelSurface::transform_uv_scaled(const VoxelSurfaceSides
|
||||
return uv;
|
||||
}
|
||||
|
||||
void VoxelSurface::refresh_rects() {
|
||||
void TerraSurface::refresh_rects() {
|
||||
}
|
||||
|
||||
VoxelSurface::VoxelSurface() {
|
||||
TerraSurface::TerraSurface() {
|
||||
_id = 0;
|
||||
_mesher_index = 0;
|
||||
_transparent = false;
|
||||
@ -106,40 +106,40 @@ VoxelSurface::VoxelSurface() {
|
||||
_library = NULL;
|
||||
}
|
||||
|
||||
VoxelSurface::~VoxelSurface() {
|
||||
TerraSurface::~TerraSurface() {
|
||||
_library = NULL;
|
||||
}
|
||||
|
||||
void VoxelSurface::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_id"), &VoxelSurface::get_id);
|
||||
ClassDB::bind_method(D_METHOD("set_id", "value"), &VoxelSurface::set_id);
|
||||
void TerraSurface::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_id"), &TerraSurface::get_id);
|
||||
ClassDB::bind_method(D_METHOD("set_id", "value"), &TerraSurface::set_id);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_index"), &VoxelSurface::get_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher_index", "value"), &VoxelSurface::set_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_index"), &TerraSurface::get_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher_index", "value"), &TerraSurface::set_mesher_index);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "mesher_index"), "set_mesher_index", "get_mesher_index");
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "voxel_name"), "set_name", "get_name");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_transparent"), &VoxelSurface::get_transparent);
|
||||
ClassDB::bind_method(D_METHOD("set_transparent", "transparent"), &VoxelSurface::set_transparent);
|
||||
ClassDB::bind_method(D_METHOD("get_transparent"), &TerraSurface::get_transparent);
|
||||
ClassDB::bind_method(D_METHOD("set_transparent", "transparent"), &TerraSurface::set_transparent);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "transparent"), "set_transparent", "get_transparent");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_liquid"), &VoxelSurface::get_liquid);
|
||||
ClassDB::bind_method(D_METHOD("set_liquid", "transparent"), &VoxelSurface::set_liquid);
|
||||
ClassDB::bind_method(D_METHOD("get_liquid"), &TerraSurface::get_liquid);
|
||||
ClassDB::bind_method(D_METHOD("set_liquid", "transparent"), &TerraSurface::set_liquid);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "liquid"), "set_liquid", "get_liquid");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_rect", "side"), &VoxelSurface::get_rect);
|
||||
ClassDB::bind_method(D_METHOD("set_rect", "side", "rect"), &VoxelSurface::set_rect);
|
||||
ClassDB::bind_method(D_METHOD("get_rect", "side"), &TerraSurface::get_rect);
|
||||
ClassDB::bind_method(D_METHOD("set_rect", "side", "rect"), &TerraSurface::set_rect);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("transform_uv", "side", "uv"), &VoxelSurface::transform_uv);
|
||||
ClassDB::bind_method(D_METHOD("transform_uv_scaled", "side", "uv", "p_current_x", "p_current_y", "max"), &VoxelSurface::transform_uv_scaled);
|
||||
ClassDB::bind_method(D_METHOD("transform_uv", "side", "uv"), &TerraSurface::transform_uv);
|
||||
ClassDB::bind_method(D_METHOD("transform_uv_scaled", "side", "uv", "p_current_x", "p_current_y", "max"), &TerraSurface::transform_uv_scaled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("refresh_rects"), &VoxelSurface::refresh_rects);
|
||||
ClassDB::bind_method(D_METHOD("refresh_rects"), &TerraSurface::refresh_rects);
|
||||
|
||||
BIND_ENUM_CONSTANT(VOXEL_SIDE_TOP);
|
||||
BIND_ENUM_CONSTANT(VOXEL_SIDE_BOTTOM);
|
||||
BIND_ENUM_CONSTANT(VOXEL_SIDE_SIDE);
|
||||
BIND_ENUM_CONSTANT(TERRA_SIDE_TOP);
|
||||
BIND_ENUM_CONSTANT(TERRA_SIDE_BOTTOM);
|
||||
BIND_ENUM_CONSTANT(TERRA_SIDE_SIDE);
|
||||
|
||||
BIND_CONSTANT(VOXEL_SIDES_COUNT);
|
||||
BIND_CONSTANT(TERRA_SIDES_COUNT);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_SURFACE_H
|
||||
#define VOXEL_SURFACE_H
|
||||
#ifndef TERRA_SURFACE_H
|
||||
#define TERRA_SURFACE_H
|
||||
|
||||
|
||||
#include "core/version.h"
|
||||
@ -41,10 +41,10 @@ SOFTWARE.
|
||||
|
||||
#include "voxelman_library.h"
|
||||
|
||||
class VoxelmanLibrary;
|
||||
class TerramanLibrary;
|
||||
|
||||
class VoxelSurface : public Resource {
|
||||
GDCLASS(VoxelSurface, Resource)
|
||||
class TerraSurface : public Resource {
|
||||
GDCLASS(TerraSurface, Resource)
|
||||
|
||||
public:
|
||||
/*
|
||||
@ -62,15 +62,15 @@ public:
|
||||
/ z+ I ---I/
|
||||
*/
|
||||
|
||||
enum VoxelSurfaceSides {
|
||||
VOXEL_SIDE_TOP = 0,
|
||||
VOXEL_SIDE_BOTTOM = 1,
|
||||
VOXEL_SIDE_SIDE = 2,
|
||||
enum TerraSurfaceSides {
|
||||
TERRA_SIDE_TOP = 0,
|
||||
TERRA_SIDE_BOTTOM = 1,
|
||||
TERRA_SIDE_SIDE = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
VOXEL_SIDES_COUNT = 3,
|
||||
VOXEL_SIDES_ARRAY_SIZE = VOXEL_SIDES_COUNT * 2,
|
||||
TERRA_SIDES_COUNT = 3,
|
||||
TERRA_SIDES_ARRAY_SIZE = TERRA_SIDES_COUNT * 2,
|
||||
};
|
||||
|
||||
int get_id() const;
|
||||
@ -85,32 +85,32 @@ public:
|
||||
bool get_liquid() const;
|
||||
void set_liquid(const bool value);
|
||||
|
||||
Rect2 get_rect(const VoxelSurfaceSides side) const;
|
||||
void set_rect(const VoxelSurfaceSides side, const Rect2 &rect);
|
||||
Rect2 get_rect(const TerraSurfaceSides side) const;
|
||||
void set_rect(const TerraSurfaceSides side, const Rect2 &rect);
|
||||
|
||||
Ref<VoxelmanLibrary> get_library() const;
|
||||
void set_library(Ref<VoxelmanLibrary> library);
|
||||
Ref<TerramanLibrary> get_library() const;
|
||||
void set_library(Ref<TerramanLibrary> library);
|
||||
|
||||
Vector2 transform_uv(const VoxelSurfaceSides p_side, const Vector2 &p_uv) const;
|
||||
Vector2 transform_uv_scaled(const VoxelSurfaceSides p_side, const Vector2 &p_uv, const int p_current_x, const int p_current_y, const int p_max) const;
|
||||
Vector2 transform_uv(const TerraSurfaceSides p_side, const Vector2 &p_uv) const;
|
||||
Vector2 transform_uv_scaled(const TerraSurfaceSides p_side, const Vector2 &p_uv, const int p_current_x, const int p_current_y, const int p_max) const;
|
||||
|
||||
virtual void refresh_rects();
|
||||
|
||||
VoxelSurface();
|
||||
~VoxelSurface();
|
||||
TerraSurface();
|
||||
~TerraSurface();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
VoxelmanLibrary *_library;
|
||||
TerramanLibrary *_library;
|
||||
|
||||
int _id;
|
||||
int _mesher_index;
|
||||
bool _transparent;
|
||||
bool _liquid;
|
||||
Rect2 _rects[VOXEL_SIDES_COUNT];
|
||||
Rect2 _rects[TERRA_SIDES_COUNT];
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelSurface::VoxelSurfaceSides);
|
||||
VARIANT_ENUM_CAST(TerraSurface::TerraSurfaceSides);
|
||||
|
||||
#endif
|
||||
|
@ -30,26 +30,26 @@ SOFTWARE.
|
||||
#define Texture Texture2D
|
||||
#endif
|
||||
|
||||
Ref<AtlasTexture> VoxelSurfaceMerger::get_region(const VoxelSurfaceSides side) {
|
||||
Ref<AtlasTexture> TerraSurfaceMerger::get_region(const TerraSurfaceSides side) {
|
||||
return _regions[side];
|
||||
}
|
||||
void VoxelSurfaceMerger::set_region(const VoxelSurfaceSides side, const Ref<AtlasTexture> &texture) {
|
||||
void TerraSurfaceMerger::set_region(const TerraSurfaceSides side, const Ref<AtlasTexture> &texture) {
|
||||
_regions[side] = texture;
|
||||
}
|
||||
|
||||
Ref<Texture> VoxelSurfaceMerger::get_texture(const VoxelSurfaceSides side) {
|
||||
Ref<Texture> TerraSurfaceMerger::get_texture(const TerraSurfaceSides side) {
|
||||
return _textures[side];
|
||||
}
|
||||
void VoxelSurfaceMerger::set_texture(const VoxelSurfaceSides side, const Ref<Texture> &texture) {
|
||||
void TerraSurfaceMerger::set_texture(const TerraSurfaceSides side, const Ref<Texture> &texture) {
|
||||
_textures[side] = texture;
|
||||
}
|
||||
|
||||
void VoxelSurfaceMerger::refresh_rects() {
|
||||
VoxelmanLibraryMerger *lib = Object::cast_to<VoxelmanLibraryMerger>(_library);
|
||||
void TerraSurfaceMerger::refresh_rects() {
|
||||
TerramanLibraryMerger *lib = Object::cast_to<TerramanLibraryMerger>(_library);
|
||||
|
||||
ERR_FAIL_COND(lib == NULL);
|
||||
|
||||
for (int i = 0; i < VOXEL_SIDES_COUNT; ++i) {
|
||||
for (int i = 0; i < TERRA_SIDES_COUNT; ++i) {
|
||||
if (!_regions[i].is_valid()) {
|
||||
_rects[i] = Rect2();
|
||||
continue;
|
||||
@ -78,26 +78,26 @@ void VoxelSurfaceMerger::refresh_rects() {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelSurfaceMerger::VoxelSurfaceMerger() {
|
||||
for (int i = 0; i < VOXEL_SIDES_COUNT; ++i) {
|
||||
TerraSurfaceMerger::TerraSurfaceMerger() {
|
||||
for (int i = 0; i < TERRA_SIDES_COUNT; ++i) {
|
||||
_regions[i].unref();
|
||||
_textures[i].unref();
|
||||
}
|
||||
}
|
||||
|
||||
VoxelSurfaceMerger::~VoxelSurfaceMerger() {
|
||||
TerraSurfaceMerger::~TerraSurfaceMerger() {
|
||||
}
|
||||
|
||||
void VoxelSurfaceMerger::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_region", "side"), &VoxelSurfaceMerger::get_region);
|
||||
ClassDB::bind_method(D_METHOD("set_region", "side", "texture"), &VoxelSurfaceMerger::set_region);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_top", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", VOXEL_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_bottom", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", VOXEL_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_side", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", VOXEL_SIDE_SIDE);
|
||||
void TerraSurfaceMerger::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_region", "side"), &TerraSurfaceMerger::get_region);
|
||||
ClassDB::bind_method(D_METHOD("set_region", "side", "texture"), &TerraSurfaceMerger::set_region);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_top", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", TERRA_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_bottom", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", TERRA_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "region_side", PROPERTY_HINT_RESOURCE_TYPE, "AtlasTexture", 0), "set_region", "get_region", TERRA_SIDE_SIDE);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_texture", "side"), &VoxelSurfaceMerger::get_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_texture", "side", "texture"), &VoxelSurfaceMerger::set_texture);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_top", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", VOXEL_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_bottom", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", VOXEL_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_side", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", VOXEL_SIDE_SIDE);
|
||||
ClassDB::bind_method(D_METHOD("get_texture", "side"), &TerraSurfaceMerger::get_texture);
|
||||
ClassDB::bind_method(D_METHOD("set_texture", "side", "texture"), &TerraSurfaceMerger::set_texture);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_top", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TERRA_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_bottom", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TERRA_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_side", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TERRA_SIDE_SIDE);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_SURFACE_MERGER_H
|
||||
#define VOXEL_SURFACE_MERGER_H
|
||||
#ifndef TERRA_SURFACE_MERGER_H
|
||||
#define TERRA_SURFACE_MERGER_H
|
||||
|
||||
#include "voxel_surface.h"
|
||||
|
||||
@ -35,27 +35,27 @@ SOFTWARE.
|
||||
#define Texture Texture2D
|
||||
#endif
|
||||
|
||||
class VoxelSurfaceMerger : public VoxelSurface {
|
||||
GDCLASS(VoxelSurfaceMerger, VoxelSurface)
|
||||
class TerraSurfaceMerger : public TerraSurface {
|
||||
GDCLASS(TerraSurfaceMerger, TerraSurface)
|
||||
|
||||
public:
|
||||
Ref<AtlasTexture> get_region(const VoxelSurfaceSides side);
|
||||
void set_region(const VoxelSurfaceSides side, const Ref<AtlasTexture> &texture);
|
||||
Ref<AtlasTexture> get_region(const TerraSurfaceSides side);
|
||||
void set_region(const TerraSurfaceSides side, const Ref<AtlasTexture> &texture);
|
||||
|
||||
Ref<Texture> get_texture(const VoxelSurfaceSides side);
|
||||
void set_texture(const VoxelSurfaceSides side, const Ref<Texture> &texture);
|
||||
Ref<Texture> get_texture(const TerraSurfaceSides side);
|
||||
void set_texture(const TerraSurfaceSides side, const Ref<Texture> &texture);
|
||||
|
||||
void refresh_rects();
|
||||
|
||||
VoxelSurfaceMerger();
|
||||
~VoxelSurfaceMerger();
|
||||
TerraSurfaceMerger();
|
||||
~TerraSurfaceMerger();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Ref<AtlasTexture> _regions[VOXEL_SIDES_COUNT];
|
||||
Ref<Texture> _textures[VOXEL_SIDES_COUNT];
|
||||
Ref<AtlasTexture> _regions[TERRA_SIDES_COUNT];
|
||||
Ref<Texture> _textures[TERRA_SIDES_COUNT];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -24,34 +24,34 @@ SOFTWARE.
|
||||
|
||||
#include "voxelman_library_simple.h"
|
||||
|
||||
int VoxelSurfaceSimple::get_atlas_x(const VoxelSurfaceSides side) const {
|
||||
int TerraSurfaceSimple::get_atlas_x(const TerraSurfaceSides side) const {
|
||||
int indx = (side * 2);
|
||||
|
||||
return _atlas_positions[indx];
|
||||
}
|
||||
void VoxelSurfaceSimple::set_atlas_x(const VoxelSurfaceSides side, int value) {
|
||||
void TerraSurfaceSimple::set_atlas_x(const TerraSurfaceSides side, int value) {
|
||||
int indx = (side * 2);
|
||||
|
||||
_atlas_positions[indx] = value;
|
||||
}
|
||||
|
||||
int VoxelSurfaceSimple::get_atlas_y(const VoxelSurfaceSides side) const {
|
||||
int TerraSurfaceSimple::get_atlas_y(const TerraSurfaceSides side) const {
|
||||
int indx = (side * 2) + 1;
|
||||
|
||||
return _atlas_positions[indx];
|
||||
}
|
||||
void VoxelSurfaceSimple::set_atlas_y(const VoxelSurfaceSides side, int value) {
|
||||
void TerraSurfaceSimple::set_atlas_y(const TerraSurfaceSides side, int value) {
|
||||
int indx = (side * 2) + 1;
|
||||
|
||||
_atlas_positions[indx] = value;
|
||||
}
|
||||
|
||||
void VoxelSurfaceSimple::refresh_rects() {
|
||||
VoxelmanLibrarySimple *lib = Object::cast_to<VoxelmanLibrarySimple>(_library);
|
||||
void TerraSurfaceSimple::refresh_rects() {
|
||||
TerramanLibrarySimple *lib = Object::cast_to<TerramanLibrarySimple>(_library);
|
||||
|
||||
ERR_FAIL_COND(lib == NULL);
|
||||
|
||||
for (int i = 0; i < VOXEL_SIDES_COUNT; ++i) {
|
||||
for (int i = 0; i < TERRA_SIDES_COUNT; ++i) {
|
||||
float culomn = 1.0 / static_cast<float>(lib->get_atlas_columns());
|
||||
float row = 1.0 / static_cast<float>(lib->get_atlas_rows());
|
||||
|
||||
@ -67,28 +67,28 @@ void VoxelSurfaceSimple::refresh_rects() {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelSurfaceSimple::VoxelSurfaceSimple() {
|
||||
for (int i = 0; i < VOXEL_SIDES_ARRAY_SIZE; ++i) {
|
||||
TerraSurfaceSimple::TerraSurfaceSimple() {
|
||||
for (int i = 0; i < TERRA_SIDES_ARRAY_SIZE; ++i) {
|
||||
_atlas_positions[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
VoxelSurfaceSimple::~VoxelSurfaceSimple() {
|
||||
TerraSurfaceSimple::~TerraSurfaceSimple() {
|
||||
}
|
||||
|
||||
void VoxelSurfaceSimple::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_x", "side"), &VoxelSurfaceSimple::get_atlas_x);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_x", "side", "value"), &VoxelSurfaceSimple::set_atlas_x);
|
||||
void TerraSurfaceSimple::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_x", "side"), &TerraSurfaceSimple::get_atlas_x);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_x", "side", "value"), &TerraSurfaceSimple::set_atlas_x);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_y", "side"), &VoxelSurfaceSimple::get_atlas_y);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_y", "side", "value"), &VoxelSurfaceSimple::set_atlas_y);
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_y", "side"), &TerraSurfaceSimple::get_atlas_y);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_y", "side", "value"), &TerraSurfaceSimple::set_atlas_y);
|
||||
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "top_atlas_x"), "set_atlas_x", "get_atlas_x", VOXEL_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "top_atlas_y"), "set_atlas_y", "get_atlas_y", VOXEL_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "top_atlas_x"), "set_atlas_x", "get_atlas_x", TERRA_SIDE_TOP);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "top_atlas_y"), "set_atlas_y", "get_atlas_y", TERRA_SIDE_TOP);
|
||||
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "bottom_atlas_x"), "set_atlas_x", "get_atlas_x", VOXEL_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "bottom_atlas_y"), "set_atlas_y", "get_atlas_y", VOXEL_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "bottom_atlas_x"), "set_atlas_x", "get_atlas_x", TERRA_SIDE_BOTTOM);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "bottom_atlas_y"), "set_atlas_y", "get_atlas_y", TERRA_SIDE_BOTTOM);
|
||||
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "side_atlas_x"), "set_atlas_x", "get_atlas_x", VOXEL_SIDE_SIDE);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "side_atlas_y"), "set_atlas_y", "get_atlas_y", VOXEL_SIDE_SIDE);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "side_atlas_x"), "set_atlas_x", "get_atlas_x", TERRA_SIDE_SIDE);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::INT, "side_atlas_y"), "set_atlas_y", "get_atlas_y", TERRA_SIDE_SIDE);
|
||||
}
|
||||
|
@ -20,31 +20,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_SURFACE_SIMPLE_H
|
||||
#define VOXEL_SURFACE_SIMPLE_H
|
||||
#ifndef TERRA_SURFACE_SIMPLE_H
|
||||
#define TERRA_SURFACE_SIMPLE_H
|
||||
|
||||
#include "voxel_surface.h"
|
||||
|
||||
class VoxelSurfaceSimple : public VoxelSurface {
|
||||
GDCLASS(VoxelSurfaceSimple, VoxelSurface)
|
||||
class TerraSurfaceSimple : public TerraSurface {
|
||||
GDCLASS(TerraSurfaceSimple, TerraSurface)
|
||||
|
||||
public:
|
||||
int get_atlas_x(const VoxelSurfaceSides side) const;
|
||||
void set_atlas_x(const VoxelSurfaceSides side, int value);
|
||||
int get_atlas_x(const TerraSurfaceSides side) const;
|
||||
void set_atlas_x(const TerraSurfaceSides side, int value);
|
||||
|
||||
int get_atlas_y(const VoxelSurfaceSides side) const;
|
||||
void set_atlas_y(const VoxelSurfaceSides side, int value);
|
||||
int get_atlas_y(const TerraSurfaceSides side) const;
|
||||
void set_atlas_y(const TerraSurfaceSides side, int value);
|
||||
|
||||
void refresh_rects();
|
||||
|
||||
VoxelSurfaceSimple();
|
||||
~VoxelSurfaceSimple();
|
||||
TerraSurfaceSimple();
|
||||
~TerraSurfaceSimple();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
int _atlas_positions[VOXEL_SIDES_ARRAY_SIZE];
|
||||
int _atlas_positions[TERRA_SIDES_ARRAY_SIZE];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -30,49 +30,49 @@ SOFTWARE.
|
||||
|
||||
#include "../defines.h"
|
||||
|
||||
bool VoxelmanLibrary::get_initialized() const {
|
||||
bool TerramanLibrary::get_initialized() const {
|
||||
return _initialized;
|
||||
}
|
||||
void VoxelmanLibrary::set_initialized(const bool value) {
|
||||
void TerramanLibrary::set_initialized(const bool value) {
|
||||
_initialized = value;
|
||||
}
|
||||
|
||||
//Materials
|
||||
Ref<Material> VoxelmanLibrary::material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _materials.size(), Ref<VoxelSurface>(NULL));
|
||||
Ref<Material> TerramanLibrary::material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _materials.size(), Ref<TerraSurface>(NULL));
|
||||
|
||||
return _materials[index];
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::material_add(const Ref<Material> &value) {
|
||||
void TerramanLibrary::material_add(const Ref<Material> &value) {
|
||||
ERR_FAIL_COND(!value.is_valid());
|
||||
|
||||
_materials.push_back(value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::material_set(const int index, const Ref<Material> &value) {
|
||||
void TerramanLibrary::material_set(const int index, const Ref<Material> &value) {
|
||||
ERR_FAIL_INDEX(index, _materials.size());
|
||||
|
||||
_materials.set(index, value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::material_remove(const int index) {
|
||||
void TerramanLibrary::material_remove(const int index) {
|
||||
_materials.remove(index);
|
||||
}
|
||||
|
||||
int VoxelmanLibrary::material_get_num() const {
|
||||
int TerramanLibrary::material_get_num() const {
|
||||
return _materials.size();
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::materials_clear() {
|
||||
void TerramanLibrary::materials_clear() {
|
||||
_materials.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibrary::materials_get() {
|
||||
Vector<Variant> TerramanLibrary::materials_get() {
|
||||
VARIANT_ARRAY_GET(_materials);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::materials_set(const Vector<Variant> &materials) {
|
||||
void TerramanLibrary::materials_set(const Vector<Variant> &materials) {
|
||||
_materials.clear();
|
||||
|
||||
for (int i = 0; i < materials.size(); i++) {
|
||||
@ -83,41 +83,41 @@ void VoxelmanLibrary::materials_set(const Vector<Variant> &materials) {
|
||||
}
|
||||
|
||||
//Liquid Materials
|
||||
Ref<Material> VoxelmanLibrary::liquid_material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _liquid_materials.size(), Ref<VoxelSurface>(NULL));
|
||||
Ref<Material> TerramanLibrary::liquid_material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _liquid_materials.size(), Ref<TerraSurface>(NULL));
|
||||
|
||||
return _liquid_materials[index];
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::liquid_material_add(const Ref<Material> &value) {
|
||||
void TerramanLibrary::liquid_material_add(const Ref<Material> &value) {
|
||||
ERR_FAIL_COND(!value.is_valid());
|
||||
|
||||
_liquid_materials.push_back(value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::liquid_material_set(const int index, const Ref<Material> &value) {
|
||||
void TerramanLibrary::liquid_material_set(const int index, const Ref<Material> &value) {
|
||||
ERR_FAIL_INDEX(index, _liquid_materials.size());
|
||||
|
||||
_liquid_materials.set(index, value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::liquid_material_remove(const int index) {
|
||||
void TerramanLibrary::liquid_material_remove(const int index) {
|
||||
_liquid_materials.remove(index);
|
||||
}
|
||||
|
||||
int VoxelmanLibrary::liquid_material_get_num() const {
|
||||
int TerramanLibrary::liquid_material_get_num() const {
|
||||
return _liquid_materials.size();
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::liquid_materials_clear() {
|
||||
void TerramanLibrary::liquid_materials_clear() {
|
||||
_liquid_materials.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibrary::liquid_materials_get() {
|
||||
Vector<Variant> TerramanLibrary::liquid_materials_get() {
|
||||
VARIANT_ARRAY_GET(_liquid_materials);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::liquid_materials_set(const Vector<Variant> &materials) {
|
||||
void TerramanLibrary::liquid_materials_set(const Vector<Variant> &materials) {
|
||||
_liquid_materials.clear();
|
||||
|
||||
for (int i = 0; i < materials.size(); i++) {
|
||||
@ -128,188 +128,188 @@ void VoxelmanLibrary::liquid_materials_set(const Vector<Variant> &materials) {
|
||||
}
|
||||
|
||||
//Prop Materials
|
||||
Ref<Material> VoxelmanLibrary::prop_material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _prop_materials.size(), Ref<VoxelSurface>(NULL));
|
||||
Ref<Material> TerramanLibrary::prop_material_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _prop_materials.size(), Ref<TerraSurface>(NULL));
|
||||
|
||||
return _prop_materials[index];
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::prop_material_add(const Ref<Material> &value) {
|
||||
void TerramanLibrary::prop_material_add(const Ref<Material> &value) {
|
||||
ERR_FAIL_COND(!value.is_valid());
|
||||
|
||||
_prop_materials.push_back(value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::prop_material_set(const int index, const Ref<Material> &value) {
|
||||
void TerramanLibrary::prop_material_set(const int index, const Ref<Material> &value) {
|
||||
ERR_FAIL_INDEX(index, _prop_materials.size());
|
||||
|
||||
_prop_materials.set(index, value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::prop_material_remove(const int index) {
|
||||
void TerramanLibrary::prop_material_remove(const int index) {
|
||||
_prop_materials.remove(index);
|
||||
}
|
||||
|
||||
int VoxelmanLibrary::prop_material_get_num() const {
|
||||
int TerramanLibrary::prop_material_get_num() const {
|
||||
return _prop_materials.size();
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::prop_materials_clear() {
|
||||
void TerramanLibrary::prop_materials_clear() {
|
||||
_prop_materials.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibrary::prop_materials_get() {
|
||||
Vector<Variant> TerramanLibrary::prop_materials_get() {
|
||||
VARIANT_ARRAY_GET(_prop_materials);
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::prop_materials_set(const Vector<Variant> &materials) {
|
||||
void TerramanLibrary::prop_materials_set(const Vector<Variant> &materials) {
|
||||
VARIANT_ARRAY_SET(materials, _prop_materials, Material);
|
||||
}
|
||||
|
||||
//Surfaces
|
||||
Ref<VoxelSurface> VoxelmanLibrary::voxel_surface_get(const int index) {
|
||||
return Ref<VoxelSurface>();
|
||||
Ref<TerraSurface> TerramanLibrary::voxel_surface_get(const int index) {
|
||||
return Ref<TerraSurface>();
|
||||
}
|
||||
void VoxelmanLibrary::voxel_surface_add(Ref<VoxelSurface> value) {
|
||||
void TerramanLibrary::voxel_surface_add(Ref<TerraSurface> value) {
|
||||
}
|
||||
void VoxelmanLibrary::voxel_surface_set(int index, Ref<VoxelSurface> value) {
|
||||
void TerramanLibrary::voxel_surface_set(int index, Ref<TerraSurface> value) {
|
||||
}
|
||||
void VoxelmanLibrary::voxel_surface_remove(const int index) {
|
||||
void TerramanLibrary::voxel_surface_remove(const int index) {
|
||||
}
|
||||
int VoxelmanLibrary::voxel_surface_get_num() const {
|
||||
int TerramanLibrary::voxel_surface_get_num() const {
|
||||
return 0;
|
||||
}
|
||||
void VoxelmanLibrary::voxel_surfaces_clear() {
|
||||
void TerramanLibrary::voxel_surfaces_clear() {
|
||||
}
|
||||
|
||||
Ref<PackedScene> VoxelmanLibrary::scene_get(const int id) {
|
||||
Ref<PackedScene> TerramanLibrary::scene_get(const int id) {
|
||||
return Ref<PackedScene>();
|
||||
}
|
||||
void VoxelmanLibrary::scene_add(Ref<PackedScene> value) {
|
||||
void TerramanLibrary::scene_add(Ref<PackedScene> value) {
|
||||
}
|
||||
void VoxelmanLibrary::scene_set(int id, Ref<PackedScene> value) {
|
||||
void TerramanLibrary::scene_set(int id, Ref<PackedScene> value) {
|
||||
}
|
||||
void VoxelmanLibrary::scene_remove(const int id) {
|
||||
void TerramanLibrary::scene_remove(const int id) {
|
||||
}
|
||||
int VoxelmanLibrary::scene_get_num() const {
|
||||
int TerramanLibrary::scene_get_num() const {
|
||||
return 0;
|
||||
}
|
||||
void VoxelmanLibrary::scenes_clear() {
|
||||
void TerramanLibrary::scenes_clear() {
|
||||
}
|
||||
|
||||
#ifdef PROPS_PRESENT
|
||||
Ref<PropData> VoxelmanLibrary::prop_get(const int id) {
|
||||
Ref<PropData> TerramanLibrary::prop_get(const int id) {
|
||||
return Ref<PropData>();
|
||||
}
|
||||
void VoxelmanLibrary::prop_add(Ref<PropData> value) {
|
||||
void TerramanLibrary::prop_add(Ref<PropData> value) {
|
||||
}
|
||||
bool VoxelmanLibrary::prop_has(const Ref<PropData> &value) const {
|
||||
bool TerramanLibrary::prop_has(const Ref<PropData> &value) const {
|
||||
return false;
|
||||
}
|
||||
void VoxelmanLibrary::prop_set(int id, Ref<PropData> value) {
|
||||
void TerramanLibrary::prop_set(int id, Ref<PropData> value) {
|
||||
}
|
||||
void VoxelmanLibrary::prop_remove(const int id) {
|
||||
void TerramanLibrary::prop_remove(const int id) {
|
||||
}
|
||||
int VoxelmanLibrary::prop_get_num() const {
|
||||
int TerramanLibrary::prop_get_num() const {
|
||||
return 0;
|
||||
}
|
||||
void VoxelmanLibrary::props_clear() {
|
||||
void TerramanLibrary::props_clear() {
|
||||
}
|
||||
|
||||
Rect2 VoxelmanLibrary::get_prop_uv_rect(const Ref<Texture> &texture) {
|
||||
Rect2 TerramanLibrary::get_prop_uv_rect(const Ref<Texture> &texture) {
|
||||
return Rect2(0, 0, 1, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
//Rects
|
||||
void VoxelmanLibrary::refresh_rects() {
|
||||
void TerramanLibrary::refresh_rects() {
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::setup_material_albedo(int material_index, Ref<Texture> texture) {
|
||||
void TerramanLibrary::setup_material_albedo(int material_index, Ref<Texture> texture) {
|
||||
if (has_method("_setup_material_albedo"))
|
||||
call("_setup_material_albedo", material_index, texture);
|
||||
}
|
||||
|
||||
VoxelmanLibrary::VoxelmanLibrary() {
|
||||
TerramanLibrary::TerramanLibrary() {
|
||||
_initialized = false;
|
||||
}
|
||||
|
||||
VoxelmanLibrary::~VoxelmanLibrary() {
|
||||
TerramanLibrary::~TerramanLibrary() {
|
||||
_materials.clear();
|
||||
_liquid_materials.clear();
|
||||
_prop_materials.clear();
|
||||
}
|
||||
|
||||
void VoxelmanLibrary::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_initialized"), &VoxelmanLibrary::get_initialized);
|
||||
ClassDB::bind_method(D_METHOD("set_initialized", "value"), &VoxelmanLibrary::set_initialized);
|
||||
void TerramanLibrary::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_initialized"), &TerramanLibrary::get_initialized);
|
||||
ClassDB::bind_method(D_METHOD("set_initialized", "value"), &TerramanLibrary::set_initialized);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "initialized", PROPERTY_HINT_NONE, "", 0), "set_initialized", "get_initialized");
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_setup_material_albedo", PropertyInfo(Variant::INT, "material_index"), PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("material_get", "index"), &VoxelmanLibrary::material_get);
|
||||
ClassDB::bind_method(D_METHOD("material_add", "value"), &VoxelmanLibrary::material_add);
|
||||
ClassDB::bind_method(D_METHOD("material_set", "index", "value"), &VoxelmanLibrary::material_set);
|
||||
ClassDB::bind_method(D_METHOD("material_remove", "index"), &VoxelmanLibrary::material_remove);
|
||||
ClassDB::bind_method(D_METHOD("material_get_num"), &VoxelmanLibrary::material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("materials_clear"), &VoxelmanLibrary::materials_clear);
|
||||
ClassDB::bind_method(D_METHOD("material_get", "index"), &TerramanLibrary::material_get);
|
||||
ClassDB::bind_method(D_METHOD("material_add", "value"), &TerramanLibrary::material_add);
|
||||
ClassDB::bind_method(D_METHOD("material_set", "index", "value"), &TerramanLibrary::material_set);
|
||||
ClassDB::bind_method(D_METHOD("material_remove", "index"), &TerramanLibrary::material_remove);
|
||||
ClassDB::bind_method(D_METHOD("material_get_num"), &TerramanLibrary::material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("materials_clear"), &TerramanLibrary::materials_clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("materials_get"), &VoxelmanLibrary::materials_get);
|
||||
ClassDB::bind_method(D_METHOD("materials_set"), &VoxelmanLibrary::materials_set);
|
||||
ClassDB::bind_method(D_METHOD("materials_get"), &TerramanLibrary::materials_get);
|
||||
ClassDB::bind_method(D_METHOD("materials_set"), &TerramanLibrary::materials_set);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "materials", PROPERTY_HINT_NONE, "17/17:Material", PROPERTY_USAGE_DEFAULT, "Material"), "materials_set", "materials_get");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_get", "index"), &VoxelmanLibrary::liquid_material_get);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_add", "value"), &VoxelmanLibrary::liquid_material_add);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_set", "index", "value"), &VoxelmanLibrary::liquid_material_set);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_remove", "index"), &VoxelmanLibrary::liquid_material_remove);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_get_num"), &VoxelmanLibrary::liquid_material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_clear"), &VoxelmanLibrary::liquid_materials_clear);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_get", "index"), &TerramanLibrary::liquid_material_get);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_add", "value"), &TerramanLibrary::liquid_material_add);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_set", "index", "value"), &TerramanLibrary::liquid_material_set);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_remove", "index"), &TerramanLibrary::liquid_material_remove);
|
||||
ClassDB::bind_method(D_METHOD("liquid_material_get_num"), &TerramanLibrary::liquid_material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_clear"), &TerramanLibrary::liquid_materials_clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_get"), &VoxelmanLibrary::liquid_materials_get);
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_set"), &VoxelmanLibrary::liquid_materials_set);
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_get"), &TerramanLibrary::liquid_materials_get);
|
||||
ClassDB::bind_method(D_METHOD("liquid_materials_set"), &TerramanLibrary::liquid_materials_set);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "liquid_materials", PROPERTY_HINT_NONE, "17/17:Material", PROPERTY_USAGE_DEFAULT, "Material"), "liquid_materials_set", "liquid_materials_get");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_material_get", "index"), &VoxelmanLibrary::prop_material_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_add", "value"), &VoxelmanLibrary::prop_material_add);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_set", "index", "value"), &VoxelmanLibrary::prop_material_set);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_remove", "index"), &VoxelmanLibrary::prop_material_remove);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_get_num"), &VoxelmanLibrary::prop_material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_clear"), &VoxelmanLibrary::prop_materials_clear);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_get", "index"), &TerramanLibrary::prop_material_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_add", "value"), &TerramanLibrary::prop_material_add);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_set", "index", "value"), &TerramanLibrary::prop_material_set);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_remove", "index"), &TerramanLibrary::prop_material_remove);
|
||||
ClassDB::bind_method(D_METHOD("prop_material_get_num"), &TerramanLibrary::prop_material_get_num);
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_clear"), &TerramanLibrary::prop_materials_clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_get"), &VoxelmanLibrary::prop_materials_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_set"), &VoxelmanLibrary::prop_materials_set);
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_get"), &TerramanLibrary::prop_materials_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_materials_set"), &TerramanLibrary::prop_materials_set);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "prop_materials", PROPERTY_HINT_NONE, "17/17:Material", PROPERTY_USAGE_DEFAULT, "Material"), "prop_materials_set", "prop_materials_get");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_get", "index"), &VoxelmanLibrary::voxel_surface_get);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_add", "value"), &VoxelmanLibrary::voxel_surface_add);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_set", "index", "surface"), &VoxelmanLibrary::voxel_surface_set);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_remove", "index"), &VoxelmanLibrary::voxel_surface_remove);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_get_num"), &VoxelmanLibrary::voxel_surface_get_num);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surfaces_clear"), &VoxelmanLibrary::voxel_surfaces_clear);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_get", "index"), &TerramanLibrary::voxel_surface_get);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_add", "value"), &TerramanLibrary::voxel_surface_add);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_set", "index", "surface"), &TerramanLibrary::voxel_surface_set);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_remove", "index"), &TerramanLibrary::voxel_surface_remove);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surface_get_num"), &TerramanLibrary::voxel_surface_get_num);
|
||||
ClassDB::bind_method(D_METHOD("voxel_surfaces_clear"), &TerramanLibrary::voxel_surfaces_clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("scene_get", "index"), &VoxelmanLibrary::scene_get);
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "value"), &VoxelmanLibrary::scene_add);
|
||||
ClassDB::bind_method(D_METHOD("scene_set", "index", "value"), &VoxelmanLibrary::scene_set);
|
||||
ClassDB::bind_method(D_METHOD("scene_remove", "index"), &VoxelmanLibrary::scene_remove);
|
||||
ClassDB::bind_method(D_METHOD("scene_get_num"), &VoxelmanLibrary::scene_get_num);
|
||||
ClassDB::bind_method(D_METHOD("scenes_clear"), &VoxelmanLibrary::scenes_clear);
|
||||
ClassDB::bind_method(D_METHOD("scene_get", "index"), &TerramanLibrary::scene_get);
|
||||
ClassDB::bind_method(D_METHOD("scene_add", "value"), &TerramanLibrary::scene_add);
|
||||
ClassDB::bind_method(D_METHOD("scene_set", "index", "value"), &TerramanLibrary::scene_set);
|
||||
ClassDB::bind_method(D_METHOD("scene_remove", "index"), &TerramanLibrary::scene_remove);
|
||||
ClassDB::bind_method(D_METHOD("scene_get_num"), &TerramanLibrary::scene_get_num);
|
||||
ClassDB::bind_method(D_METHOD("scenes_clear"), &TerramanLibrary::scenes_clear);
|
||||
|
||||
#ifdef PROPS_PRESENT
|
||||
ClassDB::bind_method(D_METHOD("prop_get", "id"), &VoxelmanLibrary::prop_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_add", "value"), &VoxelmanLibrary::prop_add);
|
||||
ClassDB::bind_method(D_METHOD("prop_has", "prop"), &VoxelmanLibrary::prop_has);
|
||||
ClassDB::bind_method(D_METHOD("prop_set", "id", "surface"), &VoxelmanLibrary::prop_set);
|
||||
ClassDB::bind_method(D_METHOD("prop_remove", "id"), &VoxelmanLibrary::prop_remove);
|
||||
ClassDB::bind_method(D_METHOD("prop_get_num"), &VoxelmanLibrary::prop_get_num);
|
||||
ClassDB::bind_method(D_METHOD("props_clear"), &VoxelmanLibrary::props_clear);
|
||||
ClassDB::bind_method(D_METHOD("prop_get", "id"), &TerramanLibrary::prop_get);
|
||||
ClassDB::bind_method(D_METHOD("prop_add", "value"), &TerramanLibrary::prop_add);
|
||||
ClassDB::bind_method(D_METHOD("prop_has", "prop"), &TerramanLibrary::prop_has);
|
||||
ClassDB::bind_method(D_METHOD("prop_set", "id", "surface"), &TerramanLibrary::prop_set);
|
||||
ClassDB::bind_method(D_METHOD("prop_remove", "id"), &TerramanLibrary::prop_remove);
|
||||
ClassDB::bind_method(D_METHOD("prop_get_num"), &TerramanLibrary::prop_get_num);
|
||||
ClassDB::bind_method(D_METHOD("props_clear"), &TerramanLibrary::props_clear);
|
||||
#endif
|
||||
|
||||
ClassDB::bind_method(D_METHOD("refresh_rects"), &VoxelmanLibrary::refresh_rects);
|
||||
ClassDB::bind_method(D_METHOD("refresh_rects"), &TerramanLibrary::refresh_rects);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("setup_material_albedo", "material_index", "texture"), &VoxelmanLibrary::setup_material_albedo);
|
||||
ClassDB::bind_method(D_METHOD("setup_material_albedo", "material_index", "texture"), &TerramanLibrary::setup_material_albedo);
|
||||
|
||||
BIND_CONSTANT(MATERIAL_INDEX_VOXELS);
|
||||
BIND_CONSTANT(MATERIAL_INDEX_TERRAS);
|
||||
BIND_CONSTANT(MATERIAL_INDEX_LIQUID);
|
||||
BIND_CONSTANT(MATERIAL_INDEX_PROP);
|
||||
}
|
||||
|
@ -43,19 +43,19 @@ SOFTWARE.
|
||||
#define Texture Texture2D
|
||||
#endif
|
||||
|
||||
class VoxelSurface;
|
||||
class VoxelMesher;
|
||||
class TerraSurface;
|
||||
class TerraMesher;
|
||||
class PackedScene;
|
||||
#ifdef PROPS_PRESENT
|
||||
class PropData;
|
||||
#endif
|
||||
|
||||
class VoxelmanLibrary : public Resource {
|
||||
GDCLASS(VoxelmanLibrary, Resource)
|
||||
class TerramanLibrary : public Resource {
|
||||
GDCLASS(TerramanLibrary, Resource)
|
||||
|
||||
public:
|
||||
enum {
|
||||
MATERIAL_INDEX_VOXELS = 0,
|
||||
MATERIAL_INDEX_TERRAS = 0,
|
||||
MATERIAL_INDEX_LIQUID = 1,
|
||||
MATERIAL_INDEX_PROP = 2,
|
||||
};
|
||||
@ -94,9 +94,9 @@ public:
|
||||
Vector<Variant> prop_materials_get();
|
||||
void prop_materials_set(const Vector<Variant> &materials);
|
||||
|
||||
virtual Ref<VoxelSurface> voxel_surface_get(const int index);
|
||||
virtual void voxel_surface_add(Ref<VoxelSurface> value);
|
||||
virtual void voxel_surface_set(const int index, Ref<VoxelSurface> value);
|
||||
virtual Ref<TerraSurface> voxel_surface_get(const int index);
|
||||
virtual void voxel_surface_add(Ref<TerraSurface> value);
|
||||
virtual void voxel_surface_set(const int index, Ref<TerraSurface> value);
|
||||
virtual void voxel_surface_remove(const int index);
|
||||
virtual int voxel_surface_get_num() const;
|
||||
virtual void voxel_surfaces_clear();
|
||||
@ -124,8 +124,8 @@ public:
|
||||
|
||||
void setup_material_albedo(int material_index, Ref<Texture> texture);
|
||||
|
||||
VoxelmanLibrary();
|
||||
~VoxelmanLibrary();
|
||||
TerramanLibrary();
|
||||
~TerramanLibrary();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -137,4 +137,4 @@ private:
|
||||
Vector<Ref<Material> > _prop_materials;
|
||||
};
|
||||
|
||||
#endif // VOXEL_LIBRARY_H
|
||||
#endif // TERRA_LIBRARY_H
|
||||
|
@ -37,63 +37,63 @@ SOFTWARE.
|
||||
|
||||
#include "../defines.h"
|
||||
|
||||
int VoxelmanLibraryMerger::get_texture_flags() const {
|
||||
int TerramanLibraryMerger::get_texture_flags() const {
|
||||
return _packer->get_texture_flags();
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_texture_flags(const int flags) {
|
||||
void TerramanLibraryMerger::set_texture_flags(const int flags) {
|
||||
_packer->set_texture_flags(flags);
|
||||
_prop_packer->set_texture_flags(flags);
|
||||
}
|
||||
|
||||
int VoxelmanLibraryMerger::get_max_atlas_size() const {
|
||||
int TerramanLibraryMerger::get_max_atlas_size() const {
|
||||
return _packer->get_max_atlas_size();
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_max_atlas_size(const int size) {
|
||||
void TerramanLibraryMerger::set_max_atlas_size(const int size) {
|
||||
_packer->set_max_atlas_size(size);
|
||||
_prop_packer->set_max_atlas_size(size);
|
||||
}
|
||||
|
||||
bool VoxelmanLibraryMerger::get_keep_original_atlases() const {
|
||||
bool TerramanLibraryMerger::get_keep_original_atlases() const {
|
||||
return _packer->get_keep_original_atlases();
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_keep_original_atlases(const bool value) {
|
||||
void TerramanLibraryMerger::set_keep_original_atlases(const bool value) {
|
||||
_packer->set_keep_original_atlases(value);
|
||||
_prop_packer->set_keep_original_atlases(value);
|
||||
}
|
||||
|
||||
Color VoxelmanLibraryMerger::get_background_color() const {
|
||||
Color TerramanLibraryMerger::get_background_color() const {
|
||||
return _packer->get_background_color();
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_background_color(const Color &color) {
|
||||
void TerramanLibraryMerger::set_background_color(const Color &color) {
|
||||
_packer->set_background_color(color);
|
||||
_prop_packer->set_background_color(color);
|
||||
}
|
||||
|
||||
int VoxelmanLibraryMerger::get_margin() const {
|
||||
int TerramanLibraryMerger::get_margin() const {
|
||||
return _packer->get_margin();
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_margin(const int margin) {
|
||||
void TerramanLibraryMerger::set_margin(const int margin) {
|
||||
_packer->set_margin(margin);
|
||||
_prop_packer->set_margin(margin);
|
||||
}
|
||||
|
||||
//Surfaces
|
||||
Ref<VoxelSurface> VoxelmanLibraryMerger::voxel_surface_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _voxel_surfaces.size(), Ref<VoxelSurface>(NULL));
|
||||
Ref<TerraSurface> TerramanLibraryMerger::voxel_surface_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _voxel_surfaces.size(), Ref<TerraSurface>(NULL));
|
||||
|
||||
return _voxel_surfaces[index];
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::voxel_surface_add(Ref<VoxelSurface> value) {
|
||||
void TerramanLibraryMerger::voxel_surface_add(Ref<TerraSurface> value) {
|
||||
ERR_FAIL_COND(!value.is_valid());
|
||||
|
||||
value->set_library(Ref<VoxelmanLibraryMerger>(this));
|
||||
value->set_library(Ref<TerramanLibraryMerger>(this));
|
||||
value->set_id(_voxel_surfaces.size());
|
||||
|
||||
_voxel_surfaces.push_back(value);
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::voxel_surface_set(const int index, Ref<VoxelSurface> value) {
|
||||
void TerramanLibraryMerger::voxel_surface_set(const int index, Ref<TerraSurface> value) {
|
||||
ERR_FAIL_COND(index < 0);
|
||||
|
||||
if (_voxel_surfaces.size() < index) {
|
||||
@ -101,29 +101,29 @@ void VoxelmanLibraryMerger::voxel_surface_set(const int index, Ref<VoxelSurface>
|
||||
}
|
||||
|
||||
if (_voxel_surfaces[index].is_valid()) {
|
||||
_voxel_surfaces.get(index)->set_library(Ref<VoxelmanLibraryMerger>(NULL));
|
||||
_voxel_surfaces.get(index)->set_library(Ref<TerramanLibraryMerger>(NULL));
|
||||
}
|
||||
|
||||
if (value.is_valid()) {
|
||||
value->set_library(Ref<VoxelmanLibraryMerger>(this));
|
||||
value->set_library(Ref<TerramanLibraryMerger>(this));
|
||||
|
||||
_voxel_surfaces.set(index, value);
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::voxel_surface_remove(const int index) {
|
||||
void TerramanLibraryMerger::voxel_surface_remove(const int index) {
|
||||
_voxel_surfaces.remove(index);
|
||||
}
|
||||
|
||||
int VoxelmanLibraryMerger::voxel_surface_get_num() const {
|
||||
int TerramanLibraryMerger::voxel_surface_get_num() const {
|
||||
return _voxel_surfaces.size();
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::voxel_surfaces_clear() {
|
||||
void TerramanLibraryMerger::voxel_surfaces_clear() {
|
||||
_packer->clear();
|
||||
|
||||
for (int i = 0; i < _voxel_surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceMerger> surface = _voxel_surfaces[i];
|
||||
Ref<TerraSurfaceMerger> surface = _voxel_surfaces[i];
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->set_library(NULL);
|
||||
@ -133,15 +133,15 @@ void VoxelmanLibraryMerger::voxel_surfaces_clear() {
|
||||
_voxel_surfaces.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibraryMerger::get_voxel_surfaces() {
|
||||
Vector<Variant> TerramanLibraryMerger::get_voxel_surfaces() {
|
||||
VARIANT_ARRAY_GET(_voxel_surfaces);
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::set_voxel_surfaces(const Vector<Variant> &surfaces) {
|
||||
void TerramanLibraryMerger::set_voxel_surfaces(const Vector<Variant> &surfaces) {
|
||||
_voxel_surfaces.clear();
|
||||
|
||||
for (int i = 0; i < surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceMerger> surface = Ref<VoxelSurfaceMerger>(surfaces[i]);
|
||||
Ref<TerraSurfaceMerger> surface = Ref<TerraSurfaceMerger>(surfaces[i]);
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->set_library(this);
|
||||
@ -152,43 +152,43 @@ void VoxelmanLibraryMerger::set_voxel_surfaces(const Vector<Variant> &surfaces)
|
||||
}
|
||||
|
||||
#ifdef PROPS_PRESENT
|
||||
Ref<PropData> VoxelmanLibraryMerger::get_prop(const int index) {
|
||||
Ref<PropData> TerramanLibraryMerger::get_prop(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _props.size(), Ref<PropData>());
|
||||
|
||||
return _props[index];
|
||||
}
|
||||
void VoxelmanLibraryMerger::add_prop(Ref<PropData> value) {
|
||||
void TerramanLibraryMerger::add_prop(Ref<PropData> value) {
|
||||
_props.push_back(value);
|
||||
}
|
||||
bool VoxelmanLibraryMerger::has_prop(const Ref<PropData> &value) const {
|
||||
bool TerramanLibraryMerger::has_prop(const Ref<PropData> &value) const {
|
||||
return _props.find(value) != -1;
|
||||
}
|
||||
void VoxelmanLibraryMerger::set_prop(const int index, const Ref<PropData> &value) {
|
||||
void TerramanLibraryMerger::set_prop(const int index, const Ref<PropData> &value) {
|
||||
ERR_FAIL_INDEX(index, _props.size());
|
||||
|
||||
_props.write[index] = value;
|
||||
}
|
||||
void VoxelmanLibraryMerger::remove_prop(const int index) {
|
||||
void TerramanLibraryMerger::remove_prop(const int index) {
|
||||
ERR_FAIL_INDEX(index, _props.size());
|
||||
|
||||
_props.remove(index);
|
||||
}
|
||||
int VoxelmanLibraryMerger::get_num_props() const {
|
||||
int TerramanLibraryMerger::get_num_props() const {
|
||||
return _props.size();
|
||||
}
|
||||
void VoxelmanLibraryMerger::clear_props() {
|
||||
void TerramanLibraryMerger::clear_props() {
|
||||
_props.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibraryMerger::get_props() {
|
||||
Vector<Variant> TerramanLibraryMerger::get_props() {
|
||||
VARIANT_ARRAY_GET(_props);
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::set_props(const Vector<Variant> &props) {
|
||||
void TerramanLibraryMerger::set_props(const Vector<Variant> &props) {
|
||||
VARIANT_ARRAY_SET(props, _props, PropData);
|
||||
}
|
||||
|
||||
Rect2 VoxelmanLibraryMerger::get_prop_uv_rect(const Ref<Texture> &texture) {
|
||||
Rect2 TerramanLibraryMerger::get_prop_uv_rect(const Ref<Texture> &texture) {
|
||||
if (!texture.is_valid()) {
|
||||
return Rect2(0, 0, 1, 1);
|
||||
}
|
||||
@ -222,28 +222,28 @@ Rect2 VoxelmanLibraryMerger::get_prop_uv_rect(const Ref<Texture> &texture) {
|
||||
return region;
|
||||
}
|
||||
|
||||
Ref<TexturePacker> VoxelmanLibraryMerger::get_prop_packer() {
|
||||
Ref<TexturePacker> TerramanLibraryMerger::get_prop_packer() {
|
||||
return _prop_packer;
|
||||
}
|
||||
#endif
|
||||
|
||||
void VoxelmanLibraryMerger::refresh_rects() {
|
||||
void TerramanLibraryMerger::refresh_rects() {
|
||||
bool texture_added = false;
|
||||
for (int i = 0; i < _voxel_surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceMerger> surface = Ref<VoxelSurfaceMerger>(_voxel_surfaces[i]);
|
||||
Ref<TerraSurfaceMerger> surface = Ref<TerraSurfaceMerger>(_voxel_surfaces[i]);
|
||||
|
||||
if (surface.is_valid()) {
|
||||
for (int j = 0; j < VoxelSurface::VOXEL_SIDES_COUNT; ++j) {
|
||||
Ref<Texture> tex = surface->get_texture(static_cast<VoxelSurface::VoxelSurfaceSides>(j));
|
||||
for (int j = 0; j < TerraSurface::TERRA_SIDES_COUNT; ++j) {
|
||||
Ref<Texture> tex = surface->get_texture(static_cast<TerraSurface::TerraSurfaceSides>(j));
|
||||
|
||||
if (!tex.is_valid())
|
||||
continue;
|
||||
|
||||
if (!_packer->contains_texture(tex)) {
|
||||
texture_added = true;
|
||||
surface->set_region(static_cast<VoxelSurface::VoxelSurfaceSides>(j), _packer->add_texture(tex));
|
||||
surface->set_region(static_cast<TerraSurface::TerraSurfaceSides>(j), _packer->add_texture(tex));
|
||||
} else {
|
||||
surface->set_region(static_cast<VoxelSurface::VoxelSurfaceSides>(j), _packer->get_texture(tex));
|
||||
surface->set_region(static_cast<TerraSurface::TerraSurfaceSides>(j), _packer->get_texture(tex));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -256,7 +256,7 @@ void VoxelmanLibraryMerger::refresh_rects() {
|
||||
|
||||
Ref<Texture> tex = _packer->get_generated_texture(0);
|
||||
|
||||
setup_material_albedo(MATERIAL_INDEX_VOXELS, tex);
|
||||
setup_material_albedo(MATERIAL_INDEX_TERRAS, tex);
|
||||
setup_material_albedo(MATERIAL_INDEX_LIQUID, tex);
|
||||
}
|
||||
|
||||
@ -285,7 +285,7 @@ void VoxelmanLibraryMerger::refresh_rects() {
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < _voxel_surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceMerger> surface = _voxel_surfaces[i];
|
||||
Ref<TerraSurfaceMerger> surface = _voxel_surfaces[i];
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->refresh_rects();
|
||||
@ -295,13 +295,13 @@ void VoxelmanLibraryMerger::refresh_rects() {
|
||||
set_initialized(true);
|
||||
}
|
||||
|
||||
void VoxelmanLibraryMerger::_setup_material_albedo(const int material_index, const Ref<Texture> &texture) {
|
||||
void TerramanLibraryMerger::_setup_material_albedo(const int material_index, const Ref<Texture> &texture) {
|
||||
Ref<SpatialMaterial> mat;
|
||||
|
||||
int count = 0;
|
||||
|
||||
switch (material_index) {
|
||||
case MATERIAL_INDEX_VOXELS:
|
||||
case MATERIAL_INDEX_TERRAS:
|
||||
count = material_get_num();
|
||||
break;
|
||||
case MATERIAL_INDEX_LIQUID:
|
||||
@ -315,7 +315,7 @@ void VoxelmanLibraryMerger::_setup_material_albedo(const int material_index, con
|
||||
for (int i = 0; i < count; ++i) {
|
||||
|
||||
switch (material_index) {
|
||||
case MATERIAL_INDEX_VOXELS:
|
||||
case MATERIAL_INDEX_TERRAS:
|
||||
mat = material_get(i);
|
||||
break;
|
||||
case MATERIAL_INDEX_LIQUID:
|
||||
@ -336,7 +336,7 @@ void VoxelmanLibraryMerger::_setup_material_albedo(const int material_index, con
|
||||
Ref<ShaderMaterial> shmat;
|
||||
|
||||
switch (material_index) {
|
||||
case MATERIAL_INDEX_VOXELS:
|
||||
case MATERIAL_INDEX_TERRAS:
|
||||
shmat = material_get(i);
|
||||
break;
|
||||
case MATERIAL_INDEX_LIQUID:
|
||||
@ -353,7 +353,7 @@ void VoxelmanLibraryMerger::_setup_material_albedo(const int material_index, con
|
||||
}
|
||||
}
|
||||
|
||||
VoxelmanLibraryMerger::VoxelmanLibraryMerger() {
|
||||
TerramanLibraryMerger::TerramanLibraryMerger() {
|
||||
_packer.instance();
|
||||
|
||||
#if GODOT4
|
||||
@ -379,12 +379,12 @@ VoxelmanLibraryMerger::VoxelmanLibraryMerger() {
|
||||
_prop_packer->set_margin(0);
|
||||
}
|
||||
|
||||
VoxelmanLibraryMerger::~VoxelmanLibraryMerger() {
|
||||
TerramanLibraryMerger::~TerramanLibraryMerger() {
|
||||
for (int i = 0; i < _voxel_surfaces.size(); ++i) {
|
||||
Ref<VoxelSurface> surface = _voxel_surfaces[i];
|
||||
Ref<TerraSurface> surface = _voxel_surfaces[i];
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->set_library(Ref<VoxelmanLibraryMerger>());
|
||||
surface->set_library(Ref<TerramanLibraryMerger>());
|
||||
}
|
||||
}
|
||||
|
||||
@ -398,7 +398,7 @@ VoxelmanLibraryMerger::~VoxelmanLibraryMerger() {
|
||||
}
|
||||
|
||||
#ifdef PROPS_PRESENT
|
||||
bool VoxelmanLibraryMerger::process_prop_textures(Ref<PropData> prop) {
|
||||
bool TerramanLibraryMerger::process_prop_textures(Ref<PropData> prop) {
|
||||
if (!prop.is_valid()) {
|
||||
return false;
|
||||
}
|
||||
@ -432,40 +432,40 @@ bool VoxelmanLibraryMerger::process_prop_textures(Ref<PropData> prop) {
|
||||
}
|
||||
#endif
|
||||
|
||||
void VoxelmanLibraryMerger::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_texture_flags"), &VoxelmanLibraryMerger::get_texture_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_texture_flags", "flags"), &VoxelmanLibraryMerger::set_texture_flags);
|
||||
void TerramanLibraryMerger::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_texture_flags"), &TerramanLibraryMerger::get_texture_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_texture_flags", "flags"), &TerramanLibraryMerger::set_texture_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_flags", PROPERTY_HINT_FLAGS, "Mipmaps,Repeat,Filter,Anisotropic Linear,Convert to Linear,Mirrored Repeat,Video Surface"), "set_texture_flags", "get_texture_flags");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_max_atlas_size"), &VoxelmanLibraryMerger::get_max_atlas_size);
|
||||
ClassDB::bind_method(D_METHOD("set_max_atlas_size", "size"), &VoxelmanLibraryMerger::set_max_atlas_size);
|
||||
ClassDB::bind_method(D_METHOD("get_max_atlas_size"), &TerramanLibraryMerger::get_max_atlas_size);
|
||||
ClassDB::bind_method(D_METHOD("set_max_atlas_size", "size"), &TerramanLibraryMerger::set_max_atlas_size);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_atlas_size"), "set_max_atlas_size", "get_max_atlas_size");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_keep_original_atlases"), &VoxelmanLibraryMerger::get_keep_original_atlases);
|
||||
ClassDB::bind_method(D_METHOD("set_keep_original_atlases", "value"), &VoxelmanLibraryMerger::set_keep_original_atlases);
|
||||
ClassDB::bind_method(D_METHOD("get_keep_original_atlases"), &TerramanLibraryMerger::get_keep_original_atlases);
|
||||
ClassDB::bind_method(D_METHOD("set_keep_original_atlases", "value"), &TerramanLibraryMerger::set_keep_original_atlases);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "keep_original_atlases"), "set_keep_original_atlases", "get_keep_original_atlases");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_background_color"), &VoxelmanLibraryMerger::get_background_color);
|
||||
ClassDB::bind_method(D_METHOD("set_background_color", "color"), &VoxelmanLibraryMerger::set_background_color);
|
||||
ClassDB::bind_method(D_METHOD("get_background_color"), &TerramanLibraryMerger::get_background_color);
|
||||
ClassDB::bind_method(D_METHOD("set_background_color", "color"), &TerramanLibraryMerger::set_background_color);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "background_color"), "set_background_color", "get_background_color");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_margin"), &VoxelmanLibraryMerger::get_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_margin", "size"), &VoxelmanLibraryMerger::set_margin);
|
||||
ClassDB::bind_method(D_METHOD("get_margin"), &TerramanLibraryMerger::get_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_margin", "size"), &TerramanLibraryMerger::set_margin);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "margin"), "set_margin", "get_margin");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_surfaces"), &VoxelmanLibraryMerger::get_voxel_surfaces);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_surfaces"), &VoxelmanLibraryMerger::set_voxel_surfaces);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "voxel_surfaces", PROPERTY_HINT_NONE, "17/17:VoxelSurfaceMerger", PROPERTY_USAGE_DEFAULT, "VoxelSurfaceMerger"), "set_voxel_surfaces", "get_voxel_surfaces");
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_surfaces"), &TerramanLibraryMerger::get_voxel_surfaces);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_surfaces"), &TerramanLibraryMerger::set_voxel_surfaces);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "voxel_surfaces", PROPERTY_HINT_NONE, "17/17:TerraSurfaceMerger", PROPERTY_USAGE_DEFAULT, "TerraSurfaceMerger"), "set_voxel_surfaces", "get_voxel_surfaces");
|
||||
|
||||
#ifdef PROPS_PRESENT
|
||||
ClassDB::bind_method(D_METHOD("get_props"), &VoxelmanLibraryMerger::get_props);
|
||||
ClassDB::bind_method(D_METHOD("set_props"), &VoxelmanLibraryMerger::set_props);
|
||||
ClassDB::bind_method(D_METHOD("get_props"), &TerramanLibraryMerger::get_props);
|
||||
ClassDB::bind_method(D_METHOD("set_props"), &TerramanLibraryMerger::set_props);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "props", PROPERTY_HINT_NONE, "17/17:PropData", PROPERTY_USAGE_DEFAULT, "PropData"), "set_props", "get_props");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_prop_uv_rect", "texture"), &VoxelmanLibraryMerger::get_prop_uv_rect);
|
||||
ClassDB::bind_method(D_METHOD("get_prop_uv_rect", "texture"), &TerramanLibraryMerger::get_prop_uv_rect);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_prop_packer"), &VoxelmanLibraryMerger::get_prop_packer);
|
||||
ClassDB::bind_method(D_METHOD("get_prop_packer"), &TerramanLibraryMerger::get_prop_packer);
|
||||
#endif
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_setup_material_albedo", "material_index", "texture"), &VoxelmanLibraryMerger::_setup_material_albedo);
|
||||
ClassDB::bind_method(D_METHOD("_setup_material_albedo", "material_index", "texture"), &TerramanLibraryMerger::_setup_material_albedo);
|
||||
}
|
||||
|
@ -40,12 +40,12 @@ SOFTWARE.
|
||||
#include "../data/voxel_light.h"
|
||||
#include "voxel_surface_merger.h"
|
||||
|
||||
class VoxelSurfaceSimple;
|
||||
class VoxelMesher;
|
||||
class TerraSurfaceSimple;
|
||||
class TerraMesher;
|
||||
class PackedScene;
|
||||
|
||||
class VoxelmanLibraryMerger : public VoxelmanLibrary {
|
||||
GDCLASS(VoxelmanLibraryMerger, VoxelmanLibrary)
|
||||
class TerramanLibraryMerger : public TerramanLibrary {
|
||||
GDCLASS(TerramanLibraryMerger, TerramanLibrary)
|
||||
|
||||
public:
|
||||
int get_texture_flags() const;
|
||||
@ -63,9 +63,9 @@ public:
|
||||
int get_margin() const;
|
||||
void set_margin(const int margin);
|
||||
|
||||
Ref<VoxelSurface> voxel_surface_get(const int index);
|
||||
void voxel_surface_add(Ref<VoxelSurface> value);
|
||||
void voxel_surface_set(const int index, Ref<VoxelSurface> value);
|
||||
Ref<TerraSurface> voxel_surface_get(const int index);
|
||||
void voxel_surface_add(Ref<TerraSurface> value);
|
||||
void voxel_surface_set(const int index, Ref<TerraSurface> value);
|
||||
void voxel_surface_remove(const int index);
|
||||
int voxel_surface_get_num() const;
|
||||
void voxel_surfaces_clear();
|
||||
@ -94,8 +94,8 @@ public:
|
||||
|
||||
void _setup_material_albedo(const int material_index, const Ref<Texture> &texture);
|
||||
|
||||
VoxelmanLibraryMerger();
|
||||
~VoxelmanLibraryMerger();
|
||||
TerramanLibraryMerger();
|
||||
~TerramanLibraryMerger();
|
||||
|
||||
protected:
|
||||
#ifdef PROPS_PRESENT
|
||||
@ -105,7 +105,7 @@ protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Vector<Ref<VoxelSurfaceMerger> > _voxel_surfaces;
|
||||
Vector<Ref<TerraSurfaceMerger> > _voxel_surfaces;
|
||||
#ifdef PROPS_PRESENT
|
||||
Vector<Ref<PropData> > _props;
|
||||
#endif
|
||||
|
@ -24,41 +24,41 @@ SOFTWARE.
|
||||
|
||||
#include "../defines.h"
|
||||
|
||||
int VoxelmanLibrarySimple::get_atlas_columns() const {
|
||||
int TerramanLibrarySimple::get_atlas_columns() const {
|
||||
return _atlas_columns;
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::set_atlas_columns(int s) {
|
||||
void TerramanLibrarySimple::set_atlas_columns(int s) {
|
||||
ERR_FAIL_COND(s < 0);
|
||||
_atlas_columns = s;
|
||||
}
|
||||
|
||||
int VoxelmanLibrarySimple::get_atlas_rows() const {
|
||||
int TerramanLibrarySimple::get_atlas_rows() const {
|
||||
return _atlas_rows;
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::set_atlas_rows(int s) {
|
||||
void TerramanLibrarySimple::set_atlas_rows(int s) {
|
||||
ERR_FAIL_COND(s < 0);
|
||||
_atlas_rows = s;
|
||||
}
|
||||
|
||||
//Surfaces
|
||||
Ref<VoxelSurface> VoxelmanLibrarySimple::voxel_surface_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _voxel_surfaces.size(), Ref<VoxelSurface>(NULL));
|
||||
Ref<TerraSurface> TerramanLibrarySimple::voxel_surface_get(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _voxel_surfaces.size(), Ref<TerraSurface>(NULL));
|
||||
|
||||
return _voxel_surfaces[index];
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::voxel_surface_add(Ref<VoxelSurface> value) {
|
||||
void TerramanLibrarySimple::voxel_surface_add(Ref<TerraSurface> value) {
|
||||
ERR_FAIL_COND(!value.is_valid());
|
||||
|
||||
value->set_library(Ref<VoxelmanLibrarySimple>(this));
|
||||
value->set_library(Ref<TerramanLibrarySimple>(this));
|
||||
value->set_id(_voxel_surfaces.size());
|
||||
|
||||
_voxel_surfaces.push_back(value);
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::voxel_surface_set(const int index, Ref<VoxelSurface> value) {
|
||||
void TerramanLibrarySimple::voxel_surface_set(const int index, Ref<TerraSurface> value) {
|
||||
ERR_FAIL_COND(index < 0);
|
||||
|
||||
if (_voxel_surfaces.size() < index) {
|
||||
@ -66,37 +66,37 @@ void VoxelmanLibrarySimple::voxel_surface_set(const int index, Ref<VoxelSurface>
|
||||
}
|
||||
|
||||
if (_voxel_surfaces[index].is_valid()) {
|
||||
_voxel_surfaces.get(index)->set_library(Ref<VoxelmanLibrarySimple>(NULL));
|
||||
_voxel_surfaces.get(index)->set_library(Ref<TerramanLibrarySimple>(NULL));
|
||||
}
|
||||
|
||||
if (value.is_valid()) {
|
||||
value->set_library(Ref<VoxelmanLibrarySimple>(this));
|
||||
value->set_library(Ref<TerramanLibrarySimple>(this));
|
||||
|
||||
_voxel_surfaces.set(index, value);
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::voxel_surface_remove(const int index) {
|
||||
void TerramanLibrarySimple::voxel_surface_remove(const int index) {
|
||||
_voxel_surfaces.remove(index);
|
||||
}
|
||||
|
||||
int VoxelmanLibrarySimple::voxel_surface_get_num() const {
|
||||
int TerramanLibrarySimple::voxel_surface_get_num() const {
|
||||
return _voxel_surfaces.size();
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::voxel_surfaces_clear() {
|
||||
void TerramanLibrarySimple::voxel_surfaces_clear() {
|
||||
_voxel_surfaces.clear();
|
||||
}
|
||||
|
||||
Vector<Variant> VoxelmanLibrarySimple::get_voxel_surfaces() {
|
||||
Vector<Variant> TerramanLibrarySimple::get_voxel_surfaces() {
|
||||
VARIANT_ARRAY_GET(_voxel_surfaces);
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::set_voxel_surfaces(const Vector<Variant> &surfaces) {
|
||||
void TerramanLibrarySimple::set_voxel_surfaces(const Vector<Variant> &surfaces) {
|
||||
_voxel_surfaces.clear();
|
||||
|
||||
for (int i = 0; i < surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceSimple> surface = Ref<VoxelSurfaceSimple>(surfaces[i]);
|
||||
Ref<TerraSurfaceSimple> surface = Ref<TerraSurfaceSimple>(surfaces[i]);
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->set_library(this);
|
||||
@ -109,9 +109,9 @@ void VoxelmanLibrarySimple::set_voxel_surfaces(const Vector<Variant> &surfaces)
|
||||
set_initialized(true);
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::refresh_rects() {
|
||||
void TerramanLibrarySimple::refresh_rects() {
|
||||
for (int i = 0; i < _voxel_surfaces.size(); i++) {
|
||||
Ref<VoxelSurfaceSimple> surface = Ref<VoxelSurfaceSimple>(_voxel_surfaces[i]);
|
||||
Ref<TerraSurfaceSimple> surface = Ref<TerraSurfaceSimple>(_voxel_surfaces[i]);
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->refresh_rects();
|
||||
@ -119,33 +119,33 @@ void VoxelmanLibrarySimple::refresh_rects() {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelmanLibrarySimple::VoxelmanLibrarySimple() {
|
||||
TerramanLibrarySimple::TerramanLibrarySimple() {
|
||||
_atlas_rows = 8;
|
||||
_atlas_columns = 8;
|
||||
}
|
||||
|
||||
VoxelmanLibrarySimple::~VoxelmanLibrarySimple() {
|
||||
TerramanLibrarySimple::~TerramanLibrarySimple() {
|
||||
for (int i = 0; i < _voxel_surfaces.size(); ++i) {
|
||||
Ref<VoxelSurface> surface = _voxel_surfaces[i];
|
||||
Ref<TerraSurface> surface = _voxel_surfaces[i];
|
||||
|
||||
if (surface.is_valid()) {
|
||||
surface->set_library(Ref<VoxelmanLibrarySimple>());
|
||||
surface->set_library(Ref<TerramanLibrarySimple>());
|
||||
}
|
||||
}
|
||||
|
||||
_voxel_surfaces.clear();
|
||||
}
|
||||
|
||||
void VoxelmanLibrarySimple::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_columns"), &VoxelmanLibrarySimple::get_atlas_columns);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_columns", "value"), &VoxelmanLibrarySimple::set_atlas_columns);
|
||||
void TerramanLibrarySimple::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_columns"), &TerramanLibrarySimple::get_atlas_columns);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_columns", "value"), &TerramanLibrarySimple::set_atlas_columns);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "atlas_columns"), "set_atlas_columns", "get_atlas_columns");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_rows"), &VoxelmanLibrarySimple::get_atlas_rows);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_rows", "value"), &VoxelmanLibrarySimple::set_atlas_rows);
|
||||
ClassDB::bind_method(D_METHOD("get_atlas_rows"), &TerramanLibrarySimple::get_atlas_rows);
|
||||
ClassDB::bind_method(D_METHOD("set_atlas_rows", "value"), &TerramanLibrarySimple::set_atlas_rows);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "atlas_rows"), "set_atlas_rows", "get_atlas_rows");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_surfaces"), &VoxelmanLibrarySimple::get_voxel_surfaces);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_surfaces"), &VoxelmanLibrarySimple::set_voxel_surfaces);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "voxel_surfaces", PROPERTY_HINT_NONE, "17/17:VoxelSurfaceSimple", PROPERTY_USAGE_DEFAULT, "VoxelSurfaceSimple"), "set_voxel_surfaces", "get_voxel_surfaces");
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_surfaces"), &TerramanLibrarySimple::get_voxel_surfaces);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_surfaces"), &TerramanLibrarySimple::set_voxel_surfaces);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "voxel_surfaces", PROPERTY_HINT_NONE, "17/17:TerraSurfaceSimple", PROPERTY_USAGE_DEFAULT, "TerraSurfaceSimple"), "set_voxel_surfaces", "get_voxel_surfaces");
|
||||
}
|
||||
|
@ -38,11 +38,11 @@ SOFTWARE.
|
||||
#include "../data/voxel_light.h"
|
||||
#include "voxel_surface_simple.h"
|
||||
|
||||
class VoxelSurfaceSimple;
|
||||
class VoxelMesher;
|
||||
class TerraSurfaceSimple;
|
||||
class TerraMesher;
|
||||
|
||||
class VoxelmanLibrarySimple : public VoxelmanLibrary {
|
||||
GDCLASS(VoxelmanLibrarySimple, VoxelmanLibrary)
|
||||
class TerramanLibrarySimple : public TerramanLibrary {
|
||||
GDCLASS(TerramanLibrarySimple, TerramanLibrary)
|
||||
|
||||
public:
|
||||
int get_atlas_columns() const;
|
||||
@ -51,9 +51,9 @@ public:
|
||||
int get_atlas_rows() const;
|
||||
void set_atlas_rows(int s);
|
||||
|
||||
Ref<VoxelSurface> voxel_surface_get(const int index);
|
||||
void voxel_surface_add(Ref<VoxelSurface> value);
|
||||
void voxel_surface_set(const int index, Ref<VoxelSurface> value);
|
||||
Ref<TerraSurface> voxel_surface_get(const int index);
|
||||
void voxel_surface_add(Ref<TerraSurface> value);
|
||||
void voxel_surface_set(const int index, Ref<TerraSurface> value);
|
||||
void voxel_surface_remove(const int index);
|
||||
int voxel_surface_get_num() const;
|
||||
void voxel_surfaces_clear();
|
||||
@ -63,18 +63,18 @@ public:
|
||||
|
||||
void refresh_rects();
|
||||
|
||||
VoxelmanLibrarySimple();
|
||||
~VoxelmanLibrarySimple();
|
||||
TerramanLibrarySimple();
|
||||
~TerramanLibrarySimple();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Vector<Ref<VoxelSurfaceSimple> > _voxel_surfaces;
|
||||
Vector<Ref<TerraSurfaceSimple> > _voxel_surfaces;
|
||||
|
||||
//atlas
|
||||
int _atlas_columns;
|
||||
int _atlas_rows;
|
||||
};
|
||||
|
||||
#endif // VOXEL_LIBRARY_H
|
||||
#endif // TERRA_LIBRARY_H
|
||||
|
@ -24,20 +24,20 @@ SOFTWARE.
|
||||
|
||||
#include "../../world/default/voxel_chunk_default.h"
|
||||
|
||||
bool VoxelMesherBlocky::get_always_add_colors() const {
|
||||
bool TerraMesherBlocky::get_always_add_colors() const {
|
||||
return _always_add_colors;
|
||||
}
|
||||
void VoxelMesherBlocky::set_always_add_colors(const bool value) {
|
||||
void TerraMesherBlocky::set_always_add_colors(const bool value) {
|
||||
_always_add_colors = value;
|
||||
}
|
||||
|
||||
void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
Ref<VoxelChunkDefault> chunk = p_chunk;
|
||||
void TerraMesherBlocky::_add_chunk(Ref<TerraChunk> p_chunk) {
|
||||
Ref<TerraChunkDefault> chunk = p_chunk;
|
||||
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
//if ((get_build_flags() & VoxelChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
// if (!chunk->get_channel(VoxelChunkDefault::DEFAULT_CHANNEL_AO))
|
||||
//if ((get_build_flags() & TerraChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
// if (!chunk->get_channel(TerraChunkDefault::DEFAULT_CHANNEL_AO))
|
||||
// chunk->generate_ao();
|
||||
|
||||
int x_size = chunk->get_size_x();
|
||||
@ -59,25 +59,25 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
|
||||
Color base_light(_base_light_value, _base_light_value, _base_light_value);
|
||||
Color light(1, 1, 1);
|
||||
bool use_lighting = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0;
|
||||
bool use_ao = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_AO) != 0;
|
||||
bool use_rao = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_RAO) != 0;
|
||||
bool use_lighting = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0;
|
||||
bool use_ao = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_AO) != 0;
|
||||
bool use_rao = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_RAO) != 0;
|
||||
|
||||
if (use_lighting) {
|
||||
channel_color_r = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
channel_color_g = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
channel_color_b = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
channel_color_r = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
channel_color_g = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
channel_color_b = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
|
||||
if (use_ao)
|
||||
channel_ao = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
channel_ao = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
|
||||
if (use_rao)
|
||||
channel_rao = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
channel_rao = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
}
|
||||
|
||||
Vector<uint8_t> liquids;
|
||||
for (int i = 0; i < _library->voxel_surface_get_num(); ++i) {
|
||||
Ref<VoxelSurface> surface = _library->voxel_surface_get(i);
|
||||
Ref<TerraSurface> surface = _library->voxel_surface_get(i);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -106,7 +106,7 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
if (liquids.find(type) != -1)
|
||||
continue;
|
||||
|
||||
Ref<VoxelSurface> surface = _library->voxel_surface_get(type - 1);
|
||||
Ref<TerraSurface> surface = _library->voxel_surface_get(type - 1);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -162,10 +162,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -223,10 +223,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -283,10 +283,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -344,10 +344,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -404,10 +404,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -465,10 +465,10 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()),
|
||||
surface->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1), x % get_texture_scale(), z % get_texture_scale(), get_texture_scale())
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -493,17 +493,17 @@ void VoxelMesherBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelMesherBlocky::VoxelMesherBlocky() {
|
||||
TerraMesherBlocky::TerraMesherBlocky() {
|
||||
_always_add_colors = false;
|
||||
}
|
||||
|
||||
VoxelMesherBlocky::~VoxelMesherBlocky() {
|
||||
TerraMesherBlocky::~TerraMesherBlocky() {
|
||||
}
|
||||
|
||||
void VoxelMesherBlocky::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &VoxelMesherBlocky::_add_chunk);
|
||||
void TerraMesherBlocky::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &TerraMesherBlocky::_add_chunk);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_always_add_colors"), &VoxelMesherBlocky::get_always_add_colors);
|
||||
ClassDB::bind_method(D_METHOD("set_always_add_colors", "value"), &VoxelMesherBlocky::set_always_add_colors);
|
||||
ClassDB::bind_method(D_METHOD("get_always_add_colors"), &TerraMesherBlocky::get_always_add_colors);
|
||||
ClassDB::bind_method(D_METHOD("set_always_add_colors", "value"), &TerraMesherBlocky::set_always_add_colors);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "always_add_colors"), "set_always_add_colors", "get_always_add_colors");
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_MESHER_BLOCKY_H
|
||||
#define VOXEL_MESHER_BLOCKY_H
|
||||
#ifndef TERRA_MESHER_BLOCKY_H
|
||||
#define TERRA_MESHER_BLOCKY_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -36,17 +36,17 @@ SOFTWARE.
|
||||
|
||||
#include "../default/voxel_mesher_default.h"
|
||||
|
||||
class VoxelMesherBlocky : public VoxelMesherDefault {
|
||||
GDCLASS(VoxelMesherBlocky, VoxelMesherDefault);
|
||||
class TerraMesherBlocky : public TerraMesherDefault {
|
||||
GDCLASS(TerraMesherBlocky, TerraMesherDefault);
|
||||
|
||||
public:
|
||||
bool get_always_add_colors() const;
|
||||
void set_always_add_colors(const bool value);
|
||||
|
||||
void _add_chunk(Ref<VoxelChunk> p_chunk);
|
||||
void _add_chunk(Ref<TerraChunk> p_chunk);
|
||||
|
||||
VoxelMesherBlocky();
|
||||
~VoxelMesherBlocky();
|
||||
TerraMesherBlocky();
|
||||
~TerraMesherBlocky();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -24,12 +24,12 @@ SOFTWARE.
|
||||
|
||||
#include "../../world/default/voxel_chunk_default.h"
|
||||
|
||||
void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
Ref<VoxelChunkDefault> chunk = p_chunk;
|
||||
void TerraMesherLiquidBlocky::_add_chunk(Ref<TerraChunk> p_chunk) {
|
||||
Ref<TerraChunkDefault> chunk = p_chunk;
|
||||
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
//if ((get_build_flags() & VoxelChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
//if ((get_build_flags() & TerraChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
// chunk->generate_ao();
|
||||
|
||||
int x_size = chunk->get_size_x();
|
||||
@ -38,7 +38,7 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
|
||||
float voxel_scale = get_voxel_scale();
|
||||
|
||||
uint8_t *channel_type = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
uint8_t *channel_type = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
|
||||
if (!channel_type)
|
||||
return;
|
||||
@ -51,25 +51,25 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
|
||||
Color base_light(_base_light_value, _base_light_value, _base_light_value);
|
||||
Color light;
|
||||
bool use_lighting = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0;
|
||||
bool use_ao = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_AO) != 0;
|
||||
bool use_rao = (get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_RAO) != 0;
|
||||
bool use_lighting = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0;
|
||||
bool use_ao = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_AO) != 0;
|
||||
bool use_rao = (get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_RAO) != 0;
|
||||
|
||||
if (use_lighting) {
|
||||
channel_color_r = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
channel_color_g = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
channel_color_b = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
channel_color_r = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
channel_color_g = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
channel_color_b = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
|
||||
if (use_ao)
|
||||
channel_ao = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
channel_ao = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
|
||||
if (use_rao)
|
||||
channel_rao = chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
channel_rao = chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
}
|
||||
|
||||
Vector<uint8_t> liquids;
|
||||
for (int i = 0; i < _library->voxel_surface_get_num(); ++i) {
|
||||
Ref<VoxelSurface> surface = _library->voxel_surface_get(i);
|
||||
Ref<TerraSurface> surface = _library->voxel_surface_get(i);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -98,7 +98,7 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
if (liquids.find(type) == -1)
|
||||
continue;
|
||||
|
||||
Ref<VoxelSurface> surface = _library->voxel_surface_get(type - 1);
|
||||
Ref<TerraSurface> surface = _library->voxel_surface_get(type - 1);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -148,10 +148,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -209,10 +209,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -269,10 +269,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_TOP, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_TOP, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_TOP, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_TOP, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_TOP, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_TOP, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_TOP, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_TOP, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -330,10 +330,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_BOTTOM, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_BOTTOM, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_BOTTOM, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_BOTTOM, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_BOTTOM, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_BOTTOM, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_BOTTOM, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_BOTTOM, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -390,10 +390,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 0);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -451,10 +451,10 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
add_indices(vc + 3);
|
||||
|
||||
Vector2 uvs[] = {
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(VoxelSurface::VOXEL_SIDE_SIDE, Vector2(1, 1))
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 1)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(0, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 0)),
|
||||
surface->transform_uv(TerraSurface::TERRA_SIDE_SIDE, Vector2(1, 1))
|
||||
};
|
||||
|
||||
Vector3 verts[] = {
|
||||
@ -479,12 +479,12 @@ void VoxelMesherLiquidBlocky::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelMesherLiquidBlocky::VoxelMesherLiquidBlocky() {
|
||||
TerraMesherLiquidBlocky::TerraMesherLiquidBlocky() {
|
||||
}
|
||||
|
||||
VoxelMesherLiquidBlocky::~VoxelMesherLiquidBlocky() {
|
||||
TerraMesherLiquidBlocky::~TerraMesherLiquidBlocky() {
|
||||
}
|
||||
|
||||
void VoxelMesherLiquidBlocky::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &VoxelMesherLiquidBlocky::_add_chunk);
|
||||
void TerraMesherLiquidBlocky::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &TerraMesherLiquidBlocky::_add_chunk);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_MESHER_LIQUID_BLOCKY_H
|
||||
#define VOXEL_MESHER_LIQUID_BLOCKY_H
|
||||
#ifndef TERRA_MESHER_LIQUID_BLOCKY_H
|
||||
#define TERRA_MESHER_LIQUID_BLOCKY_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -36,14 +36,14 @@ SOFTWARE.
|
||||
|
||||
#include "../default/voxel_mesher_default.h"
|
||||
|
||||
class VoxelMesherLiquidBlocky : public VoxelMesherDefault {
|
||||
GDCLASS(VoxelMesherLiquidBlocky, VoxelMesherDefault);
|
||||
class TerraMesherLiquidBlocky : public TerraMesherDefault {
|
||||
GDCLASS(TerraMesherLiquidBlocky, TerraMesherDefault);
|
||||
|
||||
public:
|
||||
void _add_chunk(Ref<VoxelChunk> p_chunk);
|
||||
void _add_chunk(Ref<TerraChunk> p_chunk);
|
||||
|
||||
VoxelMesherLiquidBlocky();
|
||||
~VoxelMesherLiquidBlocky();
|
||||
TerraMesherLiquidBlocky();
|
||||
~TerraMesherLiquidBlocky();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef SUB_VOXEL_POINTS_H
|
||||
#define SUB_VOXEL_POINTS_H
|
||||
#ifndef SUB_TERRA_POINTS_H
|
||||
#define SUB_TERRA_POINTS_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -33,11 +33,11 @@ SOFTWARE.
|
||||
#include "core/vector.h"
|
||||
#endif
|
||||
|
||||
class VoxelChunk;
|
||||
class SubVoxelFacePointsHelper;
|
||||
class TerraChunk;
|
||||
class SubTerraFacePointsHelper;
|
||||
|
||||
class VoxelCubePoints : public Reference {
|
||||
GDCLASS(VoxelCubePoints, Reference);
|
||||
class TerraCubePoints : public Reference {
|
||||
GDCLASS(TerraCubePoints, Reference);
|
||||
|
||||
public:
|
||||
enum Points {
|
||||
@ -54,55 +54,55 @@ public:
|
||||
POINT_COUNT = 8,
|
||||
};
|
||||
|
||||
enum VoxelFaces {
|
||||
VOXEL_FACE_FRONT = 0,
|
||||
VOXEL_FACE_RIGHT = 1,
|
||||
VOXEL_FACE_BACK = 2,
|
||||
VOXEL_FACE_LEFT = 3,
|
||||
VOXEL_FACE_TOP = 4,
|
||||
VOXEL_FACE_BOTTOM = 5,
|
||||
VOXEL_FACE_COUNT = 6,
|
||||
enum TerraFaces {
|
||||
TERRA_FACE_FRONT = 0,
|
||||
TERRA_FACE_RIGHT = 1,
|
||||
TERRA_FACE_BACK = 2,
|
||||
TERRA_FACE_LEFT = 3,
|
||||
TERRA_FACE_TOP = 4,
|
||||
TERRA_FACE_BOTTOM = 5,
|
||||
TERRA_FACE_COUNT = 6,
|
||||
};
|
||||
|
||||
enum VoxelNeighbours {
|
||||
VOXEL_NEIGHBOUR_NONE = 0,
|
||||
enum TerraNeighbours {
|
||||
TERRA_NEIGHBOUR_NONE = 0,
|
||||
|
||||
VOXEL_NEIGHBOUR_LEFT = 1 << 0,
|
||||
VOXEL_NEIGHBOUR_RIGHT = 1 << 1,
|
||||
VOXEL_NEIGHBOUR_FRONT = 1 << 2,
|
||||
VOXEL_NEIGHBOUR_BACK = 1 << 3,
|
||||
VOXEL_NEIGHBOUR_TOP = 1 << 4,
|
||||
VOXEL_NEIGHBOUR_BOTTOM = 1 << 5,
|
||||
TERRA_NEIGHBOUR_LEFT = 1 << 0,
|
||||
TERRA_NEIGHBOUR_RIGHT = 1 << 1,
|
||||
TERRA_NEIGHBOUR_FRONT = 1 << 2,
|
||||
TERRA_NEIGHBOUR_BACK = 1 << 3,
|
||||
TERRA_NEIGHBOUR_TOP = 1 << 4,
|
||||
TERRA_NEIGHBOUR_BOTTOM = 1 << 5,
|
||||
|
||||
VOXEL_NEIGHBOUR_LEFT_FRONT = 1 << 6,
|
||||
VOXEL_NEIGHBOUR_LEFT_BACK = 1 << 7,
|
||||
VOXEL_NEIGHBOUR_RIGHT_FRONT = 1 << 8,
|
||||
VOXEL_NEIGHBOUR_RIGHT_BACK = 1 << 9,
|
||||
TERRA_NEIGHBOUR_LEFT_FRONT = 1 << 6,
|
||||
TERRA_NEIGHBOUR_LEFT_BACK = 1 << 7,
|
||||
TERRA_NEIGHBOUR_RIGHT_FRONT = 1 << 8,
|
||||
TERRA_NEIGHBOUR_RIGHT_BACK = 1 << 9,
|
||||
|
||||
VOXEL_NEIGHBOUR_TOP_LEFT = 1 << 10,
|
||||
VOXEL_NEIGHBOUR_TOP_RIGHT = 1 << 11,
|
||||
VOXEL_NEIGHBOUR_TOP_FRONT = 1 << 12,
|
||||
VOXEL_NEIGHBOUR_TOP_BACK = 1 << 13,
|
||||
TERRA_NEIGHBOUR_TOP_LEFT = 1 << 10,
|
||||
TERRA_NEIGHBOUR_TOP_RIGHT = 1 << 11,
|
||||
TERRA_NEIGHBOUR_TOP_FRONT = 1 << 12,
|
||||
TERRA_NEIGHBOUR_TOP_BACK = 1 << 13,
|
||||
|
||||
VOXEL_NEIGHBOUR_BOTTOM_LEFT = 1 << 14,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_RIGHT = 1 << 15,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_FRONT = 1 << 16,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_BACK = 1 << 17,
|
||||
TERRA_NEIGHBOUR_BOTTOM_LEFT = 1 << 14,
|
||||
TERRA_NEIGHBOUR_BOTTOM_RIGHT = 1 << 15,
|
||||
TERRA_NEIGHBOUR_BOTTOM_FRONT = 1 << 16,
|
||||
TERRA_NEIGHBOUR_BOTTOM_BACK = 1 << 17,
|
||||
|
||||
VOXEL_NEIGHBOUR_BOTTOM_LEFT_FRONT = 1 << 18,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_LEFT_BACK = 1 << 19,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_RIGHT_FRONT = 1 << 20,
|
||||
VOXEL_NEIGHBOUR_BOTTOM_RIGHT_BACK = 1 << 21,
|
||||
TERRA_NEIGHBOUR_BOTTOM_LEFT_FRONT = 1 << 18,
|
||||
TERRA_NEIGHBOUR_BOTTOM_LEFT_BACK = 1 << 19,
|
||||
TERRA_NEIGHBOUR_BOTTOM_RIGHT_FRONT = 1 << 20,
|
||||
TERRA_NEIGHBOUR_BOTTOM_RIGHT_BACK = 1 << 21,
|
||||
|
||||
VOXEL_NEIGHBOUR_TOP_LEFT_FRONT = 1 << 22,
|
||||
VOXEL_NEIGHBOUR_TOP_LEFT_BACK = 1 << 23,
|
||||
VOXEL_NEIGHBOUR_TOP_RIGHT_FRONT = 1 << 24,
|
||||
VOXEL_NEIGHBOUR_TOP_RIGHT_BACK = 1 << 25,
|
||||
TERRA_NEIGHBOUR_TOP_LEFT_FRONT = 1 << 22,
|
||||
TERRA_NEIGHBOUR_TOP_LEFT_BACK = 1 << 23,
|
||||
TERRA_NEIGHBOUR_TOP_RIGHT_FRONT = 1 << 24,
|
||||
TERRA_NEIGHBOUR_TOP_RIGHT_BACK = 1 << 25,
|
||||
|
||||
VOXEL_FULL_NEIGHBOURS_CROSS = VOXEL_NEIGHBOUR_LEFT | VOXEL_NEIGHBOUR_RIGHT | VOXEL_NEIGHBOUR_BACK | VOXEL_NEIGHBOUR_FRONT | VOXEL_NEIGHBOUR_TOP | VOXEL_NEIGHBOUR_BOTTOM, // | VOXEL_NEIGHBOUR_LEFT_BACK | VOXEL_NEIGHBOUR_LEFT_FRONT | VOXEL_NEIGHBOUR_RIGHT_BACK | VOXEL_NEIGHBOUR_RIGHT_FRONT;
|
||||
VOXEL_FULL_SIDE_NEIGHBOURS = VOXEL_NEIGHBOUR_LEFT | VOXEL_NEIGHBOUR_RIGHT | VOXEL_NEIGHBOUR_BACK | VOXEL_NEIGHBOUR_FRONT,
|
||||
VOXEL_FULL_SIDE_NEIGHBOURS_TOP = VOXEL_NEIGHBOUR_LEFT | VOXEL_NEIGHBOUR_RIGHT | VOXEL_NEIGHBOUR_BACK | VOXEL_NEIGHBOUR_FRONT | VOXEL_NEIGHBOUR_TOP,
|
||||
VOXEL_FULL_SIDE_NEIGHBOURS_DOWN = VOXEL_NEIGHBOUR_LEFT | VOXEL_NEIGHBOUR_RIGHT | VOXEL_NEIGHBOUR_BACK | VOXEL_NEIGHBOUR_FRONT | VOXEL_NEIGHBOUR_BOTTOM,
|
||||
TERRA_FULL_NEIGHBOURS_CROSS = TERRA_NEIGHBOUR_LEFT | TERRA_NEIGHBOUR_RIGHT | TERRA_NEIGHBOUR_BACK | TERRA_NEIGHBOUR_FRONT | TERRA_NEIGHBOUR_TOP | TERRA_NEIGHBOUR_BOTTOM, // | TERRA_NEIGHBOUR_LEFT_BACK | TERRA_NEIGHBOUR_LEFT_FRONT | TERRA_NEIGHBOUR_RIGHT_BACK | TERRA_NEIGHBOUR_RIGHT_FRONT;
|
||||
TERRA_FULL_SIDE_NEIGHBOURS = TERRA_NEIGHBOUR_LEFT | TERRA_NEIGHBOUR_RIGHT | TERRA_NEIGHBOUR_BACK | TERRA_NEIGHBOUR_FRONT,
|
||||
TERRA_FULL_SIDE_NEIGHBOURS_TOP = TERRA_NEIGHBOUR_LEFT | TERRA_NEIGHBOUR_RIGHT | TERRA_NEIGHBOUR_BACK | TERRA_NEIGHBOUR_FRONT | TERRA_NEIGHBOUR_TOP,
|
||||
TERRA_FULL_SIDE_NEIGHBOURS_DOWN = TERRA_NEIGHBOUR_LEFT | TERRA_NEIGHBOUR_RIGHT | TERRA_NEIGHBOUR_BACK | TERRA_NEIGHBOUR_FRONT | TERRA_NEIGHBOUR_BOTTOM,
|
||||
};
|
||||
|
||||
int get_x();
|
||||
@ -125,8 +125,8 @@ public:
|
||||
|
||||
void refresh_points();
|
||||
void recalculate_point(int point);
|
||||
void refresh_neighbours(Ref<VoxelChunk> chunk);
|
||||
void setup(Ref<VoxelChunk> chunk, int x, int y, int z, int size = 1);
|
||||
void refresh_neighbours(Ref<TerraChunk> chunk);
|
||||
void setup(Ref<TerraChunk> chunk, int x, int y, int z, int size = 1);
|
||||
|
||||
void reset();
|
||||
|
||||
@ -165,8 +165,8 @@ public:
|
||||
bool has_points();
|
||||
int get_opposite_face(int face);
|
||||
|
||||
VoxelCubePoints();
|
||||
~VoxelCubePoints();
|
||||
TerraCubePoints();
|
||||
~TerraCubePoints();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -196,8 +196,8 @@ private:
|
||||
int _z;
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelCubePoints::Points);
|
||||
VARIANT_ENUM_CAST(VoxelCubePoints::VoxelFaces);
|
||||
VARIANT_ENUM_CAST(VoxelCubePoints::VoxelNeighbours);
|
||||
VARIANT_ENUM_CAST(TerraCubePoints::Points);
|
||||
VARIANT_ENUM_CAST(TerraCubePoints::TerraFaces);
|
||||
VARIANT_ENUM_CAST(TerraCubePoints::TerraNeighbours);
|
||||
|
||||
#endif
|
||||
|
@ -28,8 +28,8 @@ SOFTWARE.
|
||||
|
||||
#include visual_server_h
|
||||
|
||||
void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
Ref<VoxelChunkDefault> chunk = p_chunk;
|
||||
void TerraMesherCubic::_add_chunk(Ref<TerraChunk> p_chunk) {
|
||||
Ref<TerraChunkDefault> chunk = p_chunk;
|
||||
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
@ -37,7 +37,7 @@ void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
return;
|
||||
}
|
||||
|
||||
//if (chunk->get_channel(VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO)) {
|
||||
//if (chunk->get_channel(TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO)) {
|
||||
// chunk->generate_ao();
|
||||
//}
|
||||
|
||||
@ -48,7 +48,7 @@ void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
float voxel_size = 1;
|
||||
float voxel_scale = get_voxel_scale();
|
||||
|
||||
Ref<VoxelCubePoints> cube_points;
|
||||
Ref<TerraCubePoints> cube_points;
|
||||
cube_points.instance();
|
||||
cube_points->set_channel_index_type(_channel_index_type);
|
||||
cube_points->set_channel_index_isolevel(_channel_index_isolevel);
|
||||
@ -64,13 +64,13 @@ void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
if (!cube_points->has_points())
|
||||
continue;
|
||||
|
||||
for (int face = 0; face < VoxelCubePoints::VOXEL_FACE_COUNT; ++face) {
|
||||
for (int face = 0; face < TerraCubePoints::TERRA_FACE_COUNT; ++face) {
|
||||
if (!cube_points->is_face_visible(face))
|
||||
continue;
|
||||
|
||||
uint8_t type = cube_points->get_face_type(face) - 1;
|
||||
|
||||
Ref<VoxelSurface> surface = _library->voxel_surface_get(type);
|
||||
Ref<TerraSurface> surface = _library->voxel_surface_get(type);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -119,14 +119,14 @@ void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
|
||||
Vector2 uv = cube_points->get_point_uv_direction(face, i) + Vector2(0.5, 0.5);
|
||||
|
||||
VoxelSurface::VoxelSurfaceSides side = VoxelSurface::VOXEL_SIDE_SIDE;
|
||||
TerraSurface::TerraSurfaceSides side = TerraSurface::TERRA_SIDE_SIDE;
|
||||
|
||||
switch (face) {
|
||||
case VoxelCubePoints::VOXEL_FACE_TOP:
|
||||
side = VoxelSurface::VOXEL_SIDE_TOP;
|
||||
case TerraCubePoints::TERRA_FACE_TOP:
|
||||
side = TerraSurface::TERRA_SIDE_TOP;
|
||||
break;
|
||||
case VoxelCubePoints::VOXEL_FACE_BOTTOM:
|
||||
side = VoxelSurface::VOXEL_SIDE_BOTTOM;
|
||||
case TerraCubePoints::TERRA_FACE_BOTTOM:
|
||||
side = TerraSurface::TERRA_SIDE_BOTTOM;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -143,15 +143,15 @@ void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelMesherCubic::VoxelMesherCubic() {
|
||||
TerraMesherCubic::TerraMesherCubic() {
|
||||
_format = VisualServer::ARRAY_FORMAT_NORMAL | VisualServer::ARRAY_FORMAT_COLOR | VisualServer::ARRAY_FORMAT_TEX_UV;
|
||||
|
||||
_texture_scale = 1;
|
||||
}
|
||||
|
||||
VoxelMesherCubic::~VoxelMesherCubic() {
|
||||
TerraMesherCubic::~TerraMesherCubic() {
|
||||
}
|
||||
|
||||
void VoxelMesherCubic::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &VoxelMesherCubic::_add_chunk);
|
||||
void TerraMesherCubic::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &TerraMesherCubic::_add_chunk);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_MESHER_CUBIC_H
|
||||
#define VOXEL_MESHER_CUBIC_H
|
||||
#ifndef TERRA_MESHER_CUBIC_H
|
||||
#define TERRA_MESHER_CUBIC_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -38,14 +38,14 @@ SOFTWARE.
|
||||
|
||||
#include "voxel_cube_points.h"
|
||||
|
||||
class VoxelMesherCubic : public VoxelMesherDefault {
|
||||
GDCLASS(VoxelMesherCubic, VoxelMesherDefault);
|
||||
class TerraMesherCubic : public TerraMesherDefault {
|
||||
GDCLASS(TerraMesherCubic, TerraMesherDefault);
|
||||
|
||||
public:
|
||||
void _add_chunk(Ref<VoxelChunk> p_chunk);
|
||||
void _add_chunk(Ref<TerraChunk> p_chunk);
|
||||
|
||||
VoxelMesherCubic();
|
||||
~VoxelMesherCubic();
|
||||
TerraMesherCubic();
|
||||
~TerraMesherCubic();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -29,23 +29,23 @@ SOFTWARE.
|
||||
#include visual_server_h
|
||||
#include mesh_instance_h
|
||||
|
||||
_FORCE_INLINE_ int VoxelMesherDefault::get_build_flags() const {
|
||||
_FORCE_INLINE_ int TerraMesherDefault::get_build_flags() const {
|
||||
return _build_flags;
|
||||
}
|
||||
_FORCE_INLINE_ void VoxelMesherDefault::set_build_flags(const int flags) {
|
||||
_FORCE_INLINE_ void TerraMesherDefault::set_build_flags(const int flags) {
|
||||
_build_flags = flags;
|
||||
|
||||
if ((_build_flags & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
if ((_build_flags & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
_format |= VisualServer::ARRAY_FORMAT_COLOR;
|
||||
} else {
|
||||
_format ^= VisualServer::ARRAY_FORMAT_COLOR;
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesherDefault::_bake_colors(Ref<VoxelChunk> chunk) {
|
||||
void TerraMesherDefault::_bake_colors(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
//if ((get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0)
|
||||
//if ((get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0)
|
||||
// return;
|
||||
|
||||
if (_vertices.size() == 0)
|
||||
@ -68,12 +68,12 @@ void VoxelMesherDefault::_bake_colors(Ref<VoxelChunk> chunk) {
|
||||
|
||||
if (chunk->validate_data_position(x, y, z)) {
|
||||
Color light = Color(
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
|
||||
float ao = (chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * _ao_strength;
|
||||
float rao = chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
float ao = (chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * _ao_strength;
|
||||
float rao = chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
|
||||
ao += rao;
|
||||
|
||||
@ -101,10 +101,10 @@ void VoxelMesherDefault::_bake_colors(Ref<VoxelChunk> chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesherDefault::_bake_liquid_colors(Ref<VoxelChunk> chunk) {
|
||||
void TerraMesherDefault::_bake_liquid_colors(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
if ((get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0)
|
||||
if ((get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0)
|
||||
return;
|
||||
|
||||
if (_vertices.size() == 0)
|
||||
@ -127,12 +127,12 @@ void VoxelMesherDefault::_bake_liquid_colors(Ref<VoxelChunk> chunk) {
|
||||
|
||||
if (chunk->validate_data_position(x, y, z)) {
|
||||
Color light = Color(
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
|
||||
float ao = (chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * _ao_strength;
|
||||
float rao = chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
float ao = (chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * _ao_strength;
|
||||
float rao = chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
|
||||
ao += rao;
|
||||
|
||||
@ -160,20 +160,20 @@ void VoxelMesherDefault::_bake_liquid_colors(Ref<VoxelChunk> chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelMesherDefault::VoxelMesherDefault() {
|
||||
_build_flags = VoxelChunkDefault::BUILD_FLAG_CREATE_COLLIDER | VoxelChunkDefault::BUILD_FLAG_CREATE_LODS;
|
||||
TerraMesherDefault::TerraMesherDefault() {
|
||||
_build_flags = TerraChunkDefault::BUILD_FLAG_CREATE_COLLIDER | TerraChunkDefault::BUILD_FLAG_CREATE_LODS;
|
||||
|
||||
_format = VisualServer::ARRAY_FORMAT_NORMAL | VisualServer::ARRAY_FORMAT_TEX_UV;
|
||||
}
|
||||
|
||||
VoxelMesherDefault::~VoxelMesherDefault() {
|
||||
TerraMesherDefault::~TerraMesherDefault() {
|
||||
}
|
||||
|
||||
void VoxelMesherDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_bake_colors", "chunk"), &VoxelMesherDefault::_bake_colors);
|
||||
ClassDB::bind_method(D_METHOD("_bake_liquid_colors", "chunk"), &VoxelMesherDefault::_bake_liquid_colors);
|
||||
void TerraMesherDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_bake_colors", "chunk"), &TerraMesherDefault::_bake_colors);
|
||||
ClassDB::bind_method(D_METHOD("_bake_liquid_colors", "chunk"), &TerraMesherDefault::_bake_liquid_colors);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &VoxelMesherDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &VoxelMesherDefault::set_build_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, VoxelChunkDefault::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &TerraMesherDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &TerraMesherDefault::set_build_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, TerraChunkDefault::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_MESHER_DEFAULT_H
|
||||
#define VOXEL_MESHER_DEFAULT_H
|
||||
#ifndef TERRA_MESHER_DEFAULT_H
|
||||
#define TERRA_MESHER_DEFAULT_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -36,19 +36,19 @@ SOFTWARE.
|
||||
|
||||
#include "../voxel_mesher.h"
|
||||
|
||||
class VoxelMesherDefault : public VoxelMesher {
|
||||
GDCLASS(VoxelMesherDefault, VoxelMesher);
|
||||
class TerraMesherDefault : public TerraMesher {
|
||||
GDCLASS(TerraMesherDefault, TerraMesher);
|
||||
|
||||
public:
|
||||
int get_build_flags() const;
|
||||
void set_build_flags(const int flags);
|
||||
|
||||
VoxelMesherDefault();
|
||||
~VoxelMesherDefault();
|
||||
TerraMesherDefault();
|
||||
~TerraMesherDefault();
|
||||
|
||||
protected:
|
||||
virtual void _bake_colors(Ref<VoxelChunk> p_chunk);
|
||||
virtual void _bake_liquid_colors(Ref<VoxelChunk> p_chunk);
|
||||
virtual void _bake_colors(Ref<TerraChunk> p_chunk);
|
||||
virtual void _bake_liquid_colors(Ref<TerraChunk> p_chunk);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
// not claim that the entire implementation of the MarchingCubes Algorithm is your
|
||||
// own if you use the data in this file or any transformation of it.
|
||||
//
|
||||
// The format of the data in this file is described in the dissertation "Voxel-
|
||||
// The format of the data in this file is described in the dissertation "Terra-
|
||||
// Based Terrain for Real-Time Virtual Simulations", available at the web page
|
||||
// given above. References to sections and figures below pertain to that paper.
|
||||
//
|
||||
|
@ -23,7 +23,7 @@
|
||||
// not claim that the entire implementation of the MarchingCubes Algorithm is your
|
||||
// own if you use the data in this file or any transformation of it.
|
||||
//
|
||||
// The format of the data in this file is described in the dissertation "Voxel-
|
||||
// The format of the data in this file is described in the dissertation "Terra-
|
||||
// Based Terrain for Real-Time Virtual Simulations", available at the web page
|
||||
// given above. References to sections and figures below pertain to that paper.
|
||||
//
|
||||
|
@ -47,7 +47,7 @@ SOFTWARE.
|
||||
typedef class RenderingServer VisualServer;
|
||||
#endif
|
||||
|
||||
void VoxelMesherMarchingCubes::get_voxel_type_array(int *arr, Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
void TerraMesherMarchingCubes::get_voxel_type_array(int *arr, Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
uint8_t *channel_type = chunk->channel_get(_channel_index_type);
|
||||
|
||||
if (channel_type == NULL) {
|
||||
@ -71,36 +71,36 @@ void VoxelMesherMarchingCubes::get_voxel_type_array(int *arr, Ref<VoxelChunk> ch
|
||||
arr[6] = channel_type[chunk->get_index(x + size, y, z + size)];
|
||||
arr[7] = channel_type[chunk->get_index(x + size, y + size, z + size)];
|
||||
}
|
||||
int VoxelMesherMarchingCubes::get_case_code_from_arr(const int *data) {
|
||||
int TerraMesherMarchingCubes::get_case_code_from_arr(const int *data) {
|
||||
int case_code = 0;
|
||||
|
||||
if (data[0] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_000;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_000;
|
||||
|
||||
if (data[1] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_010;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_010;
|
||||
|
||||
if (data[2] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_001;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_001;
|
||||
|
||||
if (data[3] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_011;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_011;
|
||||
|
||||
if (data[4] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_100;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_100;
|
||||
|
||||
if (data[5] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_110;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_110;
|
||||
|
||||
if (data[6] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_101;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_101;
|
||||
|
||||
if (data[7] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_111;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_111;
|
||||
|
||||
return case_code;
|
||||
}
|
||||
int VoxelMesherMarchingCubes::get_case_code(Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
int TerraMesherMarchingCubes::get_case_code(Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
uint8_t *channel_type = chunk->channel_get(_channel_index_type);
|
||||
|
||||
if (channel_type == NULL) {
|
||||
@ -110,33 +110,33 @@ int VoxelMesherMarchingCubes::get_case_code(Ref<VoxelChunk> chunk, const int x,
|
||||
int case_code = 0;
|
||||
|
||||
if (channel_type[chunk->get_index(x, y, z)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_000;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_000;
|
||||
|
||||
if (channel_type[chunk->get_index(x, y + size, z)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_010;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_010;
|
||||
|
||||
if (channel_type[chunk->get_index(x, y, z + size)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_001;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_001;
|
||||
|
||||
if (channel_type[chunk->get_index(x, y + size, z + size)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_011;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_011;
|
||||
|
||||
if (channel_type[chunk->get_index(x + size, y, z)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_100;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_100;
|
||||
|
||||
if (channel_type[chunk->get_index(x + size, y + size, z)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_110;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_110;
|
||||
|
||||
if (channel_type[chunk->get_index(x + size, y, z + size)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_101;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_101;
|
||||
|
||||
if (channel_type[chunk->get_index(x + size, y + size, z + size)] != 0)
|
||||
case_code = case_code | VOXEL_ENTRY_MASK_111;
|
||||
case_code = case_code | TERRA_ENTRY_MASK_111;
|
||||
|
||||
return case_code;
|
||||
}
|
||||
|
||||
int VoxelMesherMarchingCubes::get_voxel_type(Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
int TerraMesherMarchingCubes::get_voxel_type(Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size) {
|
||||
uint8_t *channel_type = chunk->channel_get(_channel_index_type);
|
||||
|
||||
if (channel_type == NULL) {
|
||||
@ -185,12 +185,12 @@ int VoxelMesherMarchingCubes::get_voxel_type(Ref<VoxelChunk> chunk, const int x,
|
||||
return type;
|
||||
}
|
||||
|
||||
void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
Ref<VoxelChunkDefault> chunk = p_chunk;
|
||||
void TerraMesherMarchingCubes::_add_chunk(Ref<TerraChunk> p_chunk) {
|
||||
Ref<TerraChunkDefault> chunk = p_chunk;
|
||||
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
Ref<VoxelJob> job = chunk->job_get_current();
|
||||
Ref<TerraJob> job = chunk->job_get_current();
|
||||
|
||||
//if (!job->has_meta("ao_done")) {
|
||||
// job->set_meta("ao_done", true);
|
||||
@ -315,8 +315,8 @@ void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
Ref<VoxelSurface> surface1 = _library->voxel_surface_get(type_id1 - 1);
|
||||
Ref<VoxelSurface> surface2 = _library->voxel_surface_get(type_id2 - 1);
|
||||
Ref<TerraSurface> surface1 = _library->voxel_surface_get(type_id1 - 1);
|
||||
Ref<TerraSurface> surface2 = _library->voxel_surface_get(type_id2 - 1);
|
||||
|
||||
for (int i = 0; i < vertex_count; ++i) {
|
||||
int fv = get_regular_vertex_data_first_vertex(case_code, i);
|
||||
@ -415,8 +415,8 @@ void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
uv.x += umargin.position.x;
|
||||
uv.y += umargin.position.y;
|
||||
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
} else if ((bz + 0.0001 > bx) && (bz + 0.0001 > by)) {
|
||||
Vector2 uv(s.z, t.z);
|
||||
Rect2 umargin = get_uv_margin();
|
||||
@ -426,8 +426,8 @@ void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
uv.x += umargin.position.x;
|
||||
uv.y += umargin.position.y;
|
||||
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(TerraSurface::TERRA_SIDE_SIDE, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
} else {
|
||||
Vector2 uv(s.y, t.y);
|
||||
Rect2 umargin = get_uv_margin();
|
||||
@ -437,8 +437,8 @@ void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
uv.x += umargin.position.x;
|
||||
uv.y += umargin.position.y;
|
||||
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_TOP, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(VoxelSurface::VOXEL_SIDE_TOP, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uvs.set(cvi, surface1->transform_uv_scaled(TerraSurface::TERRA_SIDE_TOP, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
temp_uv2s.set(cvi, surface2->transform_uv_scaled(TerraSurface::TERRA_SIDE_TOP, uv, x % get_texture_scale(), z % get_texture_scale(), get_texture_scale()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -479,64 +479,64 @@ void VoxelMesherMarchingCubes::_add_chunk(Ref<VoxelChunk> p_chunk) {
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 VoxelMesherMarchingCubes::corner_id_to_vertex(int corner_id) const {
|
||||
Vector3 TerraMesherMarchingCubes::corner_id_to_vertex(int corner_id) const {
|
||||
ERR_FAIL_COND_V(corner_id < 0 || corner_id > 8, Vector3());
|
||||
|
||||
return marching_cube_vertices[corner_id];
|
||||
}
|
||||
|
||||
int VoxelMesherMarchingCubes::get_regular_cell_class(int index) const {
|
||||
int TerraMesherMarchingCubes::get_regular_cell_class(int index) const {
|
||||
return static_cast<int>(regularCellClass[index]);
|
||||
}
|
||||
|
||||
Ref<MarchingCubesCellData> VoxelMesherMarchingCubes::get_regular_cell_data(int index) const {
|
||||
Ref<MarchingCubesCellData> TerraMesherMarchingCubes::get_regular_cell_data(int index) const {
|
||||
return _regular_cell_datas[index];
|
||||
}
|
||||
|
||||
int VoxelMesherMarchingCubes::get_regular_vertex_data(int index1, int index2) const {
|
||||
int TerraMesherMarchingCubes::get_regular_vertex_data(int index1, int index2) const {
|
||||
//return static_cast<int>(regularVertexData[index1][index2]);
|
||||
return regularVertexData[index1][index2];
|
||||
}
|
||||
|
||||
//void VoxelMesherMarchingCubes::set_regular_vertex_data(int index1, int index2, int value) {
|
||||
//void TerraMesherMarchingCubes::set_regular_vertex_data(int index1, int index2, int value) {
|
||||
// ERR_FAIL_INDEX(index1, 256);
|
||||
// ERR_FAIL_INDEX(index2, 13);
|
||||
|
||||
// regularVertexData[index1][index2] = value;
|
||||
//}
|
||||
|
||||
int VoxelMesherMarchingCubes::get_regular_vertex_data_first_vertex(int index1, int index2) const {
|
||||
int TerraMesherMarchingCubes::get_regular_vertex_data_first_vertex(int index1, int index2) const {
|
||||
int vert1 = regularVertexData[index1][index2] & 0x000F;
|
||||
|
||||
return vert1;
|
||||
}
|
||||
|
||||
int VoxelMesherMarchingCubes::get_regular_vertex_data_second_vertex(int index1, int index2) const {
|
||||
int TerraMesherMarchingCubes::get_regular_vertex_data_second_vertex(int index1, int index2) const {
|
||||
int vert2 = (regularVertexData[index1][index2] & 0x00F0) >> 4;
|
||||
|
||||
return vert2;
|
||||
}
|
||||
|
||||
Vector3 VoxelMesherMarchingCubes::get_regular_vertex_first_position(int index1, int index2) const {
|
||||
Vector3 TerraMesherMarchingCubes::get_regular_vertex_first_position(int index1, int index2) const {
|
||||
int vert = regularVertexData[index1][index2] & 0x000F;
|
||||
|
||||
return marching_cube_vertices[vert];
|
||||
}
|
||||
|
||||
Vector3 VoxelMesherMarchingCubes::get_regular_vertex_second_position(int index1, int index2) const {
|
||||
Vector3 TerraMesherMarchingCubes::get_regular_vertex_second_position(int index1, int index2) const {
|
||||
int vert = (regularVertexData[index1][index2] & 0x00F0) >> 4;
|
||||
|
||||
return marching_cube_vertices[vert];
|
||||
}
|
||||
|
||||
Vector3 VoxelMesherMarchingCubes::get_regular_vertex_direction(int index1, int index2) const {
|
||||
Vector3 TerraMesherMarchingCubes::get_regular_vertex_direction(int index1, int index2) const {
|
||||
int vert1 = regularVertexData[index1][index2] & 0x000F;
|
||||
int vert2 = (regularVertexData[index1][index2] & 0x00F0) >> 4;
|
||||
|
||||
return marching_cube_vertices[vert2] - marching_cube_vertices[vert1];
|
||||
}
|
||||
|
||||
VoxelMesherMarchingCubes::VoxelMesherMarchingCubes() {
|
||||
TerraMesherMarchingCubes::TerraMesherMarchingCubes() {
|
||||
_format = VisualServer::ARRAY_FORMAT_NORMAL | VisualServer::ARRAY_FORMAT_COLOR | VisualServer::ARRAY_FORMAT_TEX_UV | VisualServer::ARRAY_FORMAT_TEX_UV2;
|
||||
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
@ -544,45 +544,45 @@ VoxelMesherMarchingCubes::VoxelMesherMarchingCubes() {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelMesherMarchingCubes::~VoxelMesherMarchingCubes() {
|
||||
TerraMesherMarchingCubes::~TerraMesherMarchingCubes() {
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
_regular_cell_datas[i].unref();
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesherMarchingCubes::_bind_methods() {
|
||||
void TerraMesherMarchingCubes::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "chunk"), &VoxelMesherMarchingCubes::_add_chunk);
|
||||
ClassDB::bind_method(D_METHOD("_add_chunk", "chunk"), &TerraMesherMarchingCubes::_add_chunk);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("corner_id_to_vertex", "index1"), &VoxelMesherMarchingCubes::corner_id_to_vertex);
|
||||
ClassDB::bind_method(D_METHOD("corner_id_to_vertex", "index1"), &TerraMesherMarchingCubes::corner_id_to_vertex);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_regular_cell_class", "index"), &VoxelMesherMarchingCubes::get_regular_cell_class);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_cell_data", "index"), &VoxelMesherMarchingCubes::get_regular_cell_data);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_data);
|
||||
// ClassDB::bind_method(D_METHOD("set_regular_vertex_data", "index1", "index2", "value"), &VoxelMesherMarchingCubes::set_regular_vertex_data);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data_first_vertex", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_data_first_vertex);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data_second_vertex", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_data_second_vertex);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_first_position", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_first_position);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_second_position", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_second_position);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_direction", "index1", "index2"), &VoxelMesherMarchingCubes::get_regular_vertex_direction);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_cell_class", "index"), &TerraMesherMarchingCubes::get_regular_cell_class);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_cell_data", "index"), &TerraMesherMarchingCubes::get_regular_cell_data);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_data);
|
||||
// ClassDB::bind_method(D_METHOD("set_regular_vertex_data", "index1", "index2", "value"), &TerraMesherMarchingCubes::set_regular_vertex_data);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data_first_vertex", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_data_first_vertex);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_data_second_vertex", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_data_second_vertex);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_first_position", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_first_position);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_second_position", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_second_position);
|
||||
ClassDB::bind_method(D_METHOD("get_regular_vertex_direction", "index1", "index2"), &TerraMesherMarchingCubes::get_regular_vertex_direction);
|
||||
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_000);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_100);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_010);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_110);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_001);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_101);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_011);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_INDEX_111);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_000);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_100);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_010);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_110);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_001);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_101);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_011);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_INDEX_111);
|
||||
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRIES_SIZE);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRIES_SIZE);
|
||||
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_000);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_100);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_010);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_110);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_001);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_101);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_011);
|
||||
BIND_ENUM_CONSTANT(VOXEL_ENTRY_MASK_111);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_000);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_100);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_010);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_110);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_001);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_101);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_011);
|
||||
BIND_ENUM_CONSTANT(TERRA_ENTRY_MASK_111);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_MESHER_MARCHING_CUBES_H
|
||||
#define VOXEL_MESHER_MARCHING_CUBES_H
|
||||
#ifndef TERRA_MESHER_MARCHING_CUBES_H
|
||||
#define TERRA_MESHER_MARCHING_CUBES_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -39,45 +39,45 @@ SOFTWARE.
|
||||
|
||||
using namespace MarchingCubes;
|
||||
|
||||
class VoxelMesherMarchingCubes : public VoxelMesherDefault {
|
||||
GDCLASS(VoxelMesherMarchingCubes, VoxelMesherDefault)
|
||||
class TerraMesherMarchingCubes : public TerraMesherDefault {
|
||||
GDCLASS(TerraMesherMarchingCubes, TerraMesherDefault)
|
||||
|
||||
public:
|
||||
static const String BINDING_STRING_VOXEL_ENTRY_INDICES;
|
||||
static const String BINDING_STRING_VOXEL_ENTRY_MASK;
|
||||
static const String BINDING_STRING_TERRA_ENTRY_INDICES;
|
||||
static const String BINDING_STRING_TERRA_ENTRY_MASK;
|
||||
|
||||
enum VoxelEntryIndices {
|
||||
VOXEL_ENTRY_INDEX_000 = 0,
|
||||
VOXEL_ENTRY_INDEX_100 = 1,
|
||||
VOXEL_ENTRY_INDEX_001 = 2,
|
||||
VOXEL_ENTRY_INDEX_101 = 3,
|
||||
enum TerraEntryIndices {
|
||||
TERRA_ENTRY_INDEX_000 = 0,
|
||||
TERRA_ENTRY_INDEX_100 = 1,
|
||||
TERRA_ENTRY_INDEX_001 = 2,
|
||||
TERRA_ENTRY_INDEX_101 = 3,
|
||||
|
||||
VOXEL_ENTRY_INDEX_010 = 4,
|
||||
VOXEL_ENTRY_INDEX_110 = 5,
|
||||
VOXEL_ENTRY_INDEX_011 = 6,
|
||||
VOXEL_ENTRY_INDEX_111 = 7,
|
||||
TERRA_ENTRY_INDEX_010 = 4,
|
||||
TERRA_ENTRY_INDEX_110 = 5,
|
||||
TERRA_ENTRY_INDEX_011 = 6,
|
||||
TERRA_ENTRY_INDEX_111 = 7,
|
||||
|
||||
VOXEL_ENTRIES_SIZE = 8,
|
||||
TERRA_ENTRIES_SIZE = 8,
|
||||
};
|
||||
|
||||
enum VoxelEntryMask {
|
||||
VOXEL_ENTRY_MASK_000 = 1 << 0,
|
||||
VOXEL_ENTRY_MASK_100 = 1 << 1,
|
||||
VOXEL_ENTRY_MASK_001 = 1 << 2,
|
||||
VOXEL_ENTRY_MASK_101 = 1 << 3,
|
||||
enum TerraEntryMask {
|
||||
TERRA_ENTRY_MASK_000 = 1 << 0,
|
||||
TERRA_ENTRY_MASK_100 = 1 << 1,
|
||||
TERRA_ENTRY_MASK_001 = 1 << 2,
|
||||
TERRA_ENTRY_MASK_101 = 1 << 3,
|
||||
|
||||
VOXEL_ENTRY_MASK_010 = 1 << 4,
|
||||
VOXEL_ENTRY_MASK_110 = 1 << 5,
|
||||
VOXEL_ENTRY_MASK_011 = 1 << 6,
|
||||
VOXEL_ENTRY_MASK_111 = 1 << 7,
|
||||
TERRA_ENTRY_MASK_010 = 1 << 4,
|
||||
TERRA_ENTRY_MASK_110 = 1 << 5,
|
||||
TERRA_ENTRY_MASK_011 = 1 << 6,
|
||||
TERRA_ENTRY_MASK_111 = 1 << 7,
|
||||
};
|
||||
|
||||
//arr should have a size of 8
|
||||
void get_voxel_type_array(int *arr, Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
void get_voxel_type_array(int *arr, Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
int get_case_code_from_arr(const int *data);
|
||||
int get_case_code(Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
int get_voxel_type(Ref<VoxelChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
void _add_chunk(Ref<VoxelChunk> p_chunk);
|
||||
int get_case_code(Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
int get_voxel_type(Ref<TerraChunk> chunk, const int x, const int y, const int z, const int size = 1);
|
||||
void _add_chunk(Ref<TerraChunk> p_chunk);
|
||||
|
||||
Vector3 corner_id_to_vertex(int corner_id) const;
|
||||
|
||||
@ -92,8 +92,8 @@ public:
|
||||
Vector3 get_regular_vertex_second_position(int index1, int index2) const;
|
||||
Vector3 get_regular_vertex_direction(int index1, int index2) const;
|
||||
|
||||
VoxelMesherMarchingCubes();
|
||||
~VoxelMesherMarchingCubes();
|
||||
TerraMesherMarchingCubes();
|
||||
~TerraMesherMarchingCubes();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -101,7 +101,7 @@ protected:
|
||||
Ref<MarchingCubesCellData> _regular_cell_datas[16];
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelMesherMarchingCubes::VoxelEntryIndices);
|
||||
VARIANT_ENUM_CAST(VoxelMesherMarchingCubes::VoxelEntryMask);
|
||||
VARIANT_ENUM_CAST(TerraMesherMarchingCubes::TerraEntryIndices);
|
||||
VARIANT_ENUM_CAST(TerraMesherMarchingCubes::TerraEntryMask);
|
||||
|
||||
#endif // VOXEL_MESHER_SMOOTH_H
|
||||
#endif // TERRA_MESHER_SMOOTH_H
|
||||
|
@ -29,7 +29,7 @@ SOFTWARE.
|
||||
#include "../world/default/voxel_chunk_default.h"
|
||||
#include "../world/voxel_chunk.h"
|
||||
|
||||
bool VoxelMesher::Vertex::operator==(const Vertex &p_vertex) const {
|
||||
bool TerraMesher::Vertex::operator==(const Vertex &p_vertex) const {
|
||||
|
||||
if (vertex != p_vertex.vertex)
|
||||
return false;
|
||||
@ -65,7 +65,7 @@ bool VoxelMesher::Vertex::operator==(const Vertex &p_vertex) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t VoxelMesher::VertexHasher::hash(const Vertex &p_vtx) {
|
||||
uint32_t TerraMesher::VertexHasher::hash(const Vertex &p_vtx) {
|
||||
|
||||
uint32_t h = hash_djb2_buffer((const uint8_t *)&p_vtx.vertex, sizeof(real_t) * 3);
|
||||
h = hash_djb2_buffer((const uint8_t *)&p_vtx.normal, sizeof(real_t) * 3, h);
|
||||
@ -79,84 +79,84 @@ uint32_t VoxelMesher::VertexHasher::hash(const Vertex &p_vtx) {
|
||||
return h;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_channel_index_type() const {
|
||||
int TerraMesher::get_channel_index_type() const {
|
||||
return _channel_index_type;
|
||||
}
|
||||
void VoxelMesher::set_channel_index_type(const int value) {
|
||||
void TerraMesher::set_channel_index_type(const int value) {
|
||||
_channel_index_type = value;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_channel_index_isolevel() const {
|
||||
int TerraMesher::get_channel_index_isolevel() const {
|
||||
return _channel_index_isolevel;
|
||||
}
|
||||
void VoxelMesher::set_channel_index_isolevel(const int value) {
|
||||
void TerraMesher::set_channel_index_isolevel(const int value) {
|
||||
_channel_index_isolevel = value;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_mesher_index() const {
|
||||
int TerraMesher::get_mesher_index() const {
|
||||
return _mesher_index;
|
||||
}
|
||||
void VoxelMesher::set_mesher_index(const int value) {
|
||||
void TerraMesher::set_mesher_index(const int value) {
|
||||
_mesher_index = value;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_format() const {
|
||||
int TerraMesher::get_format() const {
|
||||
return _format;
|
||||
}
|
||||
void VoxelMesher::set_format(const int value) {
|
||||
void TerraMesher::set_format(const int value) {
|
||||
_format = value;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_texture_scale() const {
|
||||
int TerraMesher::get_texture_scale() const {
|
||||
return _texture_scale;
|
||||
}
|
||||
void VoxelMesher::set_texture_scale(const int value) {
|
||||
void TerraMesher::set_texture_scale(const int value) {
|
||||
_texture_scale = value;
|
||||
}
|
||||
|
||||
Ref<VoxelmanLibrary> VoxelMesher::get_library() {
|
||||
Ref<TerramanLibrary> TerraMesher::get_library() {
|
||||
return _library;
|
||||
}
|
||||
void VoxelMesher::set_library(const Ref<VoxelmanLibrary> &library) {
|
||||
void TerraMesher::set_library(const Ref<TerramanLibrary> &library) {
|
||||
_library = library;
|
||||
}
|
||||
|
||||
Ref<Material> VoxelMesher::get_material() {
|
||||
Ref<Material> TerraMesher::get_material() {
|
||||
return _material;
|
||||
}
|
||||
void VoxelMesher::set_material(const Ref<Material> &material) {
|
||||
void TerraMesher::set_material(const Ref<Material> &material) {
|
||||
_material = material;
|
||||
}
|
||||
|
||||
float VoxelMesher::get_ao_strength() const {
|
||||
float TerraMesher::get_ao_strength() const {
|
||||
return _ao_strength;
|
||||
}
|
||||
void VoxelMesher::set_ao_strength(float value) {
|
||||
void TerraMesher::set_ao_strength(float value) {
|
||||
_ao_strength = value;
|
||||
}
|
||||
|
||||
float VoxelMesher::get_base_light_value() const {
|
||||
float TerraMesher::get_base_light_value() const {
|
||||
return _base_light_value;
|
||||
}
|
||||
void VoxelMesher::set_base_light_value(float value) {
|
||||
void TerraMesher::set_base_light_value(float value) {
|
||||
_base_light_value = value;
|
||||
}
|
||||
|
||||
float VoxelMesher::get_voxel_scale() const {
|
||||
float TerraMesher::get_voxel_scale() const {
|
||||
return _voxel_scale;
|
||||
}
|
||||
void VoxelMesher::set_voxel_scale(const float voxel_scale) {
|
||||
void TerraMesher::set_voxel_scale(const float voxel_scale) {
|
||||
_voxel_scale = voxel_scale;
|
||||
}
|
||||
|
||||
Rect2 VoxelMesher::get_uv_margin() const {
|
||||
Rect2 TerraMesher::get_uv_margin() const {
|
||||
return _uv_margin;
|
||||
}
|
||||
void VoxelMesher::set_uv_margin(const Rect2 margin) {
|
||||
void TerraMesher::set_uv_margin(const Rect2 margin) {
|
||||
_uv_margin = margin;
|
||||
}
|
||||
|
||||
Array VoxelMesher::build_mesh() {
|
||||
Array TerraMesher::build_mesh() {
|
||||
Array a;
|
||||
a.resize(VisualServer::ARRAY_MAX);
|
||||
|
||||
@ -276,7 +276,7 @@ Array VoxelMesher::build_mesh() {
|
||||
return a;
|
||||
}
|
||||
|
||||
void VoxelMesher::build_mesh_into(RID mesh) {
|
||||
void TerraMesher::build_mesh_into(RID mesh) {
|
||||
ERR_FAIL_COND(mesh == RID());
|
||||
|
||||
VS::get_singleton()->mesh_clear(mesh);
|
||||
@ -294,7 +294,7 @@ void VoxelMesher::build_mesh_into(RID mesh) {
|
||||
VS::get_singleton()->mesh_surface_set_material(mesh, 0, _library->material_get(0)->get_rid());
|
||||
}
|
||||
|
||||
void VoxelMesher::generate_normals(bool p_flip) {
|
||||
void TerraMesher::generate_normals(bool p_flip) {
|
||||
|
||||
_format = _format | VisualServer::ARRAY_FORMAT_NORMAL;
|
||||
|
||||
@ -327,7 +327,7 @@ void VoxelMesher::generate_normals(bool p_flip) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::remove_doubles() {
|
||||
void TerraMesher::remove_doubles() {
|
||||
if (_vertices.size() == 0)
|
||||
return;
|
||||
|
||||
@ -373,7 +373,7 @@ void VoxelMesher::remove_doubles() {
|
||||
}
|
||||
|
||||
//lot faster that normal remove_doubles, but false positives can happen curtesy of hash collisions
|
||||
void VoxelMesher::remove_doubles_hashed() {
|
||||
void TerraMesher::remove_doubles_hashed() {
|
||||
if (_vertices.size() == 0)
|
||||
return;
|
||||
|
||||
@ -425,7 +425,7 @@ void VoxelMesher::remove_doubles_hashed() {
|
||||
//print_error("after " + String::num(_vertices.size()) + " " + String::num(duration.count()));
|
||||
}
|
||||
|
||||
void VoxelMesher::reset() {
|
||||
void TerraMesher::reset() {
|
||||
_vertices.resize(0);
|
||||
_indices.resize(0);
|
||||
|
||||
@ -438,7 +438,7 @@ void VoxelMesher::reset() {
|
||||
_last_tangent = Plane();
|
||||
}
|
||||
|
||||
void VoxelMesher::add_chunk(Ref<VoxelChunk> chunk) {
|
||||
void TerraMesher::add_chunk(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!has_method("_add_chunk"));
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
@ -446,13 +446,13 @@ void VoxelMesher::add_chunk(Ref<VoxelChunk> chunk) {
|
||||
}
|
||||
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
void VoxelMesher::add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position, const Vector3 rotation, const Vector3 scale, const Rect2 uv_rect) {
|
||||
void TerraMesher::add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position, const Vector3 rotation, const Vector3 scale, const Rect2 uv_rect) {
|
||||
Transform transform = Transform(Basis(rotation).scaled(scale), position);
|
||||
|
||||
add_mesh_data_resource_transform(mesh, transform, uv_rect);
|
||||
}
|
||||
|
||||
void VoxelMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, const Transform transform, const Rect2 uv_rect) {
|
||||
void TerraMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, const Transform transform, const Rect2 uv_rect) {
|
||||
if (mesh->get_array().size() == 0)
|
||||
return;
|
||||
|
||||
@ -496,7 +496,7 @@ void VoxelMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, c
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform transform, const PoolColorArray &colors, const Rect2 uv_rect) {
|
||||
void TerraMesher::add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform transform, const PoolColorArray &colors, const Rect2 uv_rect) {
|
||||
if (mesh->get_array().size() == 0)
|
||||
return;
|
||||
|
||||
@ -540,10 +540,10 @@ void VoxelMesher::add_mesh_data_resource_transform_colored(Ref<MeshDataResource>
|
||||
}
|
||||
#endif
|
||||
|
||||
void VoxelMesher::add_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
void TerraMesher::add_mesher(const Ref<TerraMesher> &mesher) {
|
||||
call("_add_mesher", mesher);
|
||||
}
|
||||
void VoxelMesher::_add_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
void TerraMesher::_add_mesher(const Ref<TerraMesher> &mesher) {
|
||||
int orig_size = _vertices.size();
|
||||
|
||||
_vertices.append_array(mesher->_vertices);
|
||||
@ -561,21 +561,21 @@ void VoxelMesher::_add_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::bake_colors(Ref<VoxelChunk> chunk) {
|
||||
void TerraMesher::bake_colors(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
if (has_method("_bake_colors"))
|
||||
call("_bake_colors", chunk);
|
||||
}
|
||||
|
||||
void VoxelMesher::bake_liquid_colors(Ref<VoxelChunk> chunk) {
|
||||
void TerraMesher::bake_liquid_colors(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
if (has_method("_bake_liquid_colors"))
|
||||
call("_bake_liquid_colors", chunk);
|
||||
}
|
||||
|
||||
PoolVector<Vector3> VoxelMesher::build_collider() const {
|
||||
PoolVector<Vector3> TerraMesher::build_collider() const {
|
||||
PoolVector<Vector3> face_points;
|
||||
|
||||
if (_vertices.size() == 0)
|
||||
@ -607,7 +607,7 @@ PoolVector<Vector3> VoxelMesher::build_collider() const {
|
||||
return face_points;
|
||||
}
|
||||
|
||||
void VoxelMesher::bake_lights(MeshInstance *node, Vector<Ref<VoxelLight> > &lights) {
|
||||
void TerraMesher::bake_lights(MeshInstance *node, Vector<Ref<TerraLight> > &lights) {
|
||||
ERR_FAIL_COND(node == NULL);
|
||||
|
||||
Color darkColor(0, 0, 0, 1);
|
||||
@ -624,7 +624,7 @@ void VoxelMesher::bake_lights(MeshInstance *node, Vector<Ref<VoxelLight> > &ligh
|
||||
|
||||
//calculate the lights value
|
||||
for (int i = 0; i < lights.size(); ++i) {
|
||||
Ref<VoxelLight> light = lights.get(i);
|
||||
Ref<TerraLight> light = lights.get(i);
|
||||
|
||||
Vector3 lightDir = light->get_world_position() - vertex;
|
||||
|
||||
@ -694,7 +694,7 @@ void VoxelMesher::bake_lights(MeshInstance *node, Vector<Ref<VoxelLight> > &ligh
|
||||
// }
|
||||
}
|
||||
|
||||
PoolVector<Vector3> VoxelMesher::get_vertices() const {
|
||||
PoolVector<Vector3> TerraMesher::get_vertices() const {
|
||||
PoolVector<Vector3> arr;
|
||||
|
||||
arr.resize(_vertices.size());
|
||||
@ -705,7 +705,7 @@ PoolVector<Vector3> VoxelMesher::get_vertices() const {
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_vertices(const PoolVector<Vector3> &values) {
|
||||
void TerraMesher::set_vertices(const PoolVector<Vector3> &values) {
|
||||
ERR_FAIL_COND(values.size() != _vertices.size());
|
||||
|
||||
for (int i = 0; i < _vertices.size(); ++i) {
|
||||
@ -717,11 +717,11 @@ void VoxelMesher::set_vertices(const PoolVector<Vector3> &values) {
|
||||
}
|
||||
}
|
||||
|
||||
int VoxelMesher::get_vertex_count() const {
|
||||
int TerraMesher::get_vertex_count() const {
|
||||
return _vertices.size();
|
||||
}
|
||||
|
||||
void VoxelMesher::add_vertex(const Vector3 &vertex) {
|
||||
void TerraMesher::add_vertex(const Vector3 &vertex) {
|
||||
Vertex vtx;
|
||||
vtx.vertex = vertex;
|
||||
vtx.color = _last_color;
|
||||
@ -737,15 +737,15 @@ void VoxelMesher::add_vertex(const Vector3 &vertex) {
|
||||
_vertices.push_back(vtx);
|
||||
}
|
||||
|
||||
Vector3 VoxelMesher::get_vertex(const int idx) const {
|
||||
Vector3 TerraMesher::get_vertex(const int idx) const {
|
||||
return _vertices.get(idx).vertex;
|
||||
}
|
||||
|
||||
void VoxelMesher::remove_vertex(const int idx) {
|
||||
void TerraMesher::remove_vertex(const int idx) {
|
||||
_vertices.remove(idx);
|
||||
}
|
||||
|
||||
PoolVector<Vector3> VoxelMesher::get_normals() const {
|
||||
PoolVector<Vector3> TerraMesher::get_normals() const {
|
||||
PoolVector<Vector3> arr;
|
||||
|
||||
arr.resize(_vertices.size());
|
||||
@ -756,7 +756,7 @@ PoolVector<Vector3> VoxelMesher::get_normals() const {
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_normals(const PoolVector<Vector3> &values) {
|
||||
void TerraMesher::set_normals(const PoolVector<Vector3> &values) {
|
||||
ERR_FAIL_COND(values.size() != _vertices.size());
|
||||
|
||||
for (int i = 0; i < _vertices.size(); ++i) {
|
||||
@ -768,15 +768,15 @@ void VoxelMesher::set_normals(const PoolVector<Vector3> &values) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::add_normal(const Vector3 &normal) {
|
||||
void TerraMesher::add_normal(const Vector3 &normal) {
|
||||
_last_normal = normal;
|
||||
}
|
||||
|
||||
Vector3 VoxelMesher::get_normal(int idx) const {
|
||||
Vector3 TerraMesher::get_normal(int idx) const {
|
||||
return _vertices.get(idx).normal;
|
||||
}
|
||||
|
||||
PoolVector<Color> VoxelMesher::get_colors() const {
|
||||
PoolVector<Color> TerraMesher::get_colors() const {
|
||||
PoolVector<Color> arr;
|
||||
|
||||
arr.resize(_vertices.size());
|
||||
@ -787,7 +787,7 @@ PoolVector<Color> VoxelMesher::get_colors() const {
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_colors(const PoolVector<Color> &values) {
|
||||
void TerraMesher::set_colors(const PoolVector<Color> &values) {
|
||||
ERR_FAIL_COND(values.size() != _vertices.size());
|
||||
|
||||
for (int i = 0; i < _vertices.size(); ++i) {
|
||||
@ -799,15 +799,15 @@ void VoxelMesher::set_colors(const PoolVector<Color> &values) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::add_color(const Color &color) {
|
||||
void TerraMesher::add_color(const Color &color) {
|
||||
_last_color = color;
|
||||
}
|
||||
|
||||
Color VoxelMesher::get_color(const int idx) const {
|
||||
Color TerraMesher::get_color(const int idx) const {
|
||||
return _vertices.get(idx).color;
|
||||
}
|
||||
|
||||
PoolVector<Vector2> VoxelMesher::get_uvs() const {
|
||||
PoolVector<Vector2> TerraMesher::get_uvs() const {
|
||||
PoolVector<Vector2> arr;
|
||||
|
||||
arr.resize(_vertices.size());
|
||||
@ -818,7 +818,7 @@ PoolVector<Vector2> VoxelMesher::get_uvs() const {
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_uvs(const PoolVector<Vector2> &values) {
|
||||
void TerraMesher::set_uvs(const PoolVector<Vector2> &values) {
|
||||
ERR_FAIL_COND(values.size() != _vertices.size());
|
||||
|
||||
for (int i = 0; i < _vertices.size(); ++i) {
|
||||
@ -830,15 +830,15 @@ void VoxelMesher::set_uvs(const PoolVector<Vector2> &values) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::add_uv(const Vector2 &uv) {
|
||||
void TerraMesher::add_uv(const Vector2 &uv) {
|
||||
_last_uv = uv;
|
||||
}
|
||||
|
||||
Vector2 VoxelMesher::get_uv(const int idx) const {
|
||||
Vector2 TerraMesher::get_uv(const int idx) const {
|
||||
return _vertices.get(idx).uv;
|
||||
}
|
||||
|
||||
PoolVector<Vector2> VoxelMesher::get_uv2s() const {
|
||||
PoolVector<Vector2> TerraMesher::get_uv2s() const {
|
||||
PoolVector<Vector2> arr;
|
||||
|
||||
arr.resize(_vertices.size());
|
||||
@ -849,7 +849,7 @@ PoolVector<Vector2> VoxelMesher::get_uv2s() const {
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_uv2s(const PoolVector<Vector2> &values) {
|
||||
void TerraMesher::set_uv2s(const PoolVector<Vector2> &values) {
|
||||
ERR_FAIL_COND(values.size() != _vertices.size());
|
||||
|
||||
for (int i = 0; i < _vertices.size(); ++i) {
|
||||
@ -861,39 +861,39 @@ void VoxelMesher::set_uv2s(const PoolVector<Vector2> &values) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::add_uv2(const Vector2 &uv) {
|
||||
void TerraMesher::add_uv2(const Vector2 &uv) {
|
||||
_last_uv2 = uv;
|
||||
}
|
||||
|
||||
Vector2 VoxelMesher::get_uv2(const int idx) const {
|
||||
Vector2 TerraMesher::get_uv2(const int idx) const {
|
||||
return _vertices.get(idx).uv2;
|
||||
}
|
||||
|
||||
PoolVector<int> VoxelMesher::get_indices() const {
|
||||
PoolVector<int> TerraMesher::get_indices() const {
|
||||
return _indices;
|
||||
}
|
||||
|
||||
void VoxelMesher::set_indices(const PoolVector<int> &values) {
|
||||
void TerraMesher::set_indices(const PoolVector<int> &values) {
|
||||
_indices = values;
|
||||
}
|
||||
|
||||
int VoxelMesher::get_indices_count() const {
|
||||
int TerraMesher::get_indices_count() const {
|
||||
return _indices.size();
|
||||
}
|
||||
|
||||
void VoxelMesher::add_indices(const int index) {
|
||||
void TerraMesher::add_indices(const int index) {
|
||||
_indices.push_back(index);
|
||||
}
|
||||
|
||||
int VoxelMesher::get_index(const int idx) const {
|
||||
int TerraMesher::get_index(const int idx) const {
|
||||
return _indices.get(idx);
|
||||
}
|
||||
|
||||
void VoxelMesher::remove_index(const int idx) {
|
||||
void TerraMesher::remove_index(const int idx) {
|
||||
_indices.remove(idx);
|
||||
}
|
||||
|
||||
VoxelMesher::VoxelMesher(const Ref<VoxelmanLibrary> &library) {
|
||||
TerraMesher::TerraMesher(const Ref<TerramanLibrary> &library) {
|
||||
_library = library;
|
||||
|
||||
_mesher_index = 0;
|
||||
@ -908,7 +908,7 @@ VoxelMesher::VoxelMesher(const Ref<VoxelmanLibrary> &library) {
|
||||
_texture_scale = 1;
|
||||
}
|
||||
|
||||
VoxelMesher::VoxelMesher() {
|
||||
TerraMesher::TerraMesher() {
|
||||
_mesher_index = 0;
|
||||
_voxel_scale = 1;
|
||||
_ao_strength = 0.25;
|
||||
@ -920,120 +920,120 @@ VoxelMesher::VoxelMesher() {
|
||||
_texture_scale = 1;
|
||||
}
|
||||
|
||||
VoxelMesher::~VoxelMesher() {
|
||||
TerraMesher::~TerraMesher() {
|
||||
if (_library.is_valid()) {
|
||||
_library.unref();
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelMesher::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_add_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
|
||||
BIND_VMETHOD(MethodInfo("_bake_colors", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
|
||||
BIND_VMETHOD(MethodInfo("_bake_liquid_colors", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
|
||||
void TerraMesher::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_add_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerraChunk")));
|
||||
BIND_VMETHOD(MethodInfo("_bake_colors", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerraChunk")));
|
||||
BIND_VMETHOD(MethodInfo("_bake_liquid_colors", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerraChunk")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_channel_index_type"), &VoxelMesher::get_channel_index_type);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_index_type", "value"), &VoxelMesher::set_channel_index_type);
|
||||
ClassDB::bind_method(D_METHOD("get_channel_index_type"), &TerraMesher::get_channel_index_type);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_index_type", "value"), &TerraMesher::set_channel_index_type);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "channel_index_type"), "set_channel_index_type", "get_channel_index_type");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_channel_index_isolevel"), &VoxelMesher::get_channel_index_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_index_isolevel", "value"), &VoxelMesher::set_channel_index_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("get_channel_index_isolevel"), &TerraMesher::get_channel_index_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_index_isolevel", "value"), &TerraMesher::set_channel_index_isolevel);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "channel_index_isolevel"), "set_channel_index_isolevel", "get_channel_index_isolevel");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_index"), &VoxelMesher::get_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher_index", "value"), &VoxelMesher::set_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_index"), &TerraMesher::get_mesher_index);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher_index", "value"), &TerraMesher::set_mesher_index);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "mesher_index"), "set_mesher_index", "get_mesher_index");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_format"), &VoxelMesher::get_format);
|
||||
ClassDB::bind_method(D_METHOD("set_format", "value"), &VoxelMesher::set_format);
|
||||
ClassDB::bind_method(D_METHOD("get_format"), &TerraMesher::get_format);
|
||||
ClassDB::bind_method(D_METHOD("set_format", "value"), &TerraMesher::set_format);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "format"), "set_format", "get_format");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_texture_scale"), &VoxelMesher::get_texture_scale);
|
||||
ClassDB::bind_method(D_METHOD("set_texture_scale", "value"), &VoxelMesher::set_texture_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_texture_scale"), &TerraMesher::get_texture_scale);
|
||||
ClassDB::bind_method(D_METHOD("set_texture_scale", "value"), &TerraMesher::set_texture_scale);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_scale"), "set_texture_scale", "get_texture_scale");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_library"), &VoxelMesher::get_library);
|
||||
ClassDB::bind_method(D_METHOD("set_library", "value"), &VoxelMesher::set_library);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "VoxelmanLibrary"), "set_library", "get_library");
|
||||
ClassDB::bind_method(D_METHOD("get_library"), &TerraMesher::get_library);
|
||||
ClassDB::bind_method(D_METHOD("set_library", "value"), &TerraMesher::set_library);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "library", PROPERTY_HINT_RESOURCE_TYPE, "TerramanLibrary"), "set_library", "get_library");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_material"), &VoxelMesher::get_material);
|
||||
ClassDB::bind_method(D_METHOD("set_material", "value"), &VoxelMesher::set_material);
|
||||
ClassDB::bind_method(D_METHOD("get_material"), &TerraMesher::get_material);
|
||||
ClassDB::bind_method(D_METHOD("set_material", "value"), &TerraMesher::set_material);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "Material"), "set_material", "get_material");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_scale"), &VoxelMesher::get_voxel_scale);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_scale", "value"), &VoxelMesher::set_voxel_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_scale"), &TerraMesher::get_voxel_scale);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_scale", "value"), &TerraMesher::set_voxel_scale);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "voxel_scale"), "set_voxel_scale", "get_voxel_scale");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_ao_strength"), &VoxelMesher::get_ao_strength);
|
||||
ClassDB::bind_method(D_METHOD("set_ao_strength", "value"), &VoxelMesher::set_ao_strength);
|
||||
ClassDB::bind_method(D_METHOD("get_ao_strength"), &TerraMesher::get_ao_strength);
|
||||
ClassDB::bind_method(D_METHOD("set_ao_strength", "value"), &TerraMesher::set_ao_strength);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ao_strength"), "set_ao_strength", "get_ao_strength");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_base_light_value"), &VoxelMesher::get_base_light_value);
|
||||
ClassDB::bind_method(D_METHOD("set_base_light_value", "value"), &VoxelMesher::set_base_light_value);
|
||||
ClassDB::bind_method(D_METHOD("get_base_light_value"), &TerraMesher::get_base_light_value);
|
||||
ClassDB::bind_method(D_METHOD("set_base_light_value", "value"), &TerraMesher::set_base_light_value);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "base_light_value"), "set_base_light_value", "get_base_light_value");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_uv_margin"), &VoxelMesher::get_uv_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_uv_margin", "value"), &VoxelMesher::set_uv_margin);
|
||||
ClassDB::bind_method(D_METHOD("get_uv_margin"), &TerraMesher::get_uv_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_uv_margin", "value"), &TerraMesher::set_uv_margin);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::RECT2, "uv_margin"), "set_uv_margin", "get_uv_margin");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("add_chunk", "chunk"), &VoxelMesher::add_chunk);
|
||||
ClassDB::bind_method(D_METHOD("add_chunk", "chunk"), &TerraMesher::add_chunk);
|
||||
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource", "mesh", "position", "rotation", "scale", "uv_rect"), &VoxelMesher::add_mesh_data_resource, DEFVAL(Rect2(0, 0, 1, 1)), DEFVAL(Vector3(1.0, 1.0, 1.0)), DEFVAL(Vector3()), DEFVAL(Vector3()));
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform", "mesh", "transform", "uv_rect"), &VoxelMesher::add_mesh_data_resource_transform, DEFVAL(Rect2(0, 0, 1, 1)));
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform_colored", "mesh", "transform", "colors", "uv_rect"), &VoxelMesher::add_mesh_data_resource_transform_colored, DEFVAL(Rect2(0, 0, 1, 1)));
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource", "mesh", "position", "rotation", "scale", "uv_rect"), &TerraMesher::add_mesh_data_resource, DEFVAL(Rect2(0, 0, 1, 1)), DEFVAL(Vector3(1.0, 1.0, 1.0)), DEFVAL(Vector3()), DEFVAL(Vector3()));
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform", "mesh", "transform", "uv_rect"), &TerraMesher::add_mesh_data_resource_transform, DEFVAL(Rect2(0, 0, 1, 1)));
|
||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform_colored", "mesh", "transform", "colors", "uv_rect"), &TerraMesher::add_mesh_data_resource_transform_colored, DEFVAL(Rect2(0, 0, 1, 1)));
|
||||
#endif
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_add_mesher", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "VoxelMesher")));
|
||||
ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &VoxelMesher::add_mesher);
|
||||
ClassDB::bind_method(D_METHOD("_add_mesher", "mesher"), &VoxelMesher::_add_mesher);
|
||||
BIND_VMETHOD(MethodInfo("_add_mesher", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "TerraMesher")));
|
||||
ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &TerraMesher::add_mesher);
|
||||
ClassDB::bind_method(D_METHOD("_add_mesher", "mesher"), &TerraMesher::_add_mesher);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("bake_colors", "chunk"), &VoxelMesher::bake_colors);
|
||||
ClassDB::bind_method(D_METHOD("bake_liquid_colors", "chunk"), &VoxelMesher::bake_liquid_colors);
|
||||
ClassDB::bind_method(D_METHOD("bake_colors", "chunk"), &TerraMesher::bake_colors);
|
||||
ClassDB::bind_method(D_METHOD("bake_liquid_colors", "chunk"), &TerraMesher::bake_liquid_colors);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_vertices"), &VoxelMesher::get_vertices);
|
||||
ClassDB::bind_method(D_METHOD("set_vertices", "values"), &VoxelMesher::set_vertices);
|
||||
ClassDB::bind_method(D_METHOD("get_vertex_count"), &VoxelMesher::get_vertex_count);
|
||||
ClassDB::bind_method(D_METHOD("get_vertex", "idx"), &VoxelMesher::get_vertex);
|
||||
ClassDB::bind_method(D_METHOD("remove_vertex", "idx"), &VoxelMesher::remove_vertex);
|
||||
ClassDB::bind_method(D_METHOD("add_vertex", "vertex"), &VoxelMesher::add_vertex);
|
||||
ClassDB::bind_method(D_METHOD("get_vertices"), &TerraMesher::get_vertices);
|
||||
ClassDB::bind_method(D_METHOD("set_vertices", "values"), &TerraMesher::set_vertices);
|
||||
ClassDB::bind_method(D_METHOD("get_vertex_count"), &TerraMesher::get_vertex_count);
|
||||
ClassDB::bind_method(D_METHOD("get_vertex", "idx"), &TerraMesher::get_vertex);
|
||||
ClassDB::bind_method(D_METHOD("remove_vertex", "idx"), &TerraMesher::remove_vertex);
|
||||
ClassDB::bind_method(D_METHOD("add_vertex", "vertex"), &TerraMesher::add_vertex);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_normals"), &VoxelMesher::get_normals);
|
||||
ClassDB::bind_method(D_METHOD("set_normals", "values"), &VoxelMesher::set_normals);
|
||||
ClassDB::bind_method(D_METHOD("get_normal", "idx"), &VoxelMesher::get_normal);
|
||||
ClassDB::bind_method(D_METHOD("add_normal", "normal"), &VoxelMesher::add_normal);
|
||||
ClassDB::bind_method(D_METHOD("get_normals"), &TerraMesher::get_normals);
|
||||
ClassDB::bind_method(D_METHOD("set_normals", "values"), &TerraMesher::set_normals);
|
||||
ClassDB::bind_method(D_METHOD("get_normal", "idx"), &TerraMesher::get_normal);
|
||||
ClassDB::bind_method(D_METHOD("add_normal", "normal"), &TerraMesher::add_normal);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_colors"), &VoxelMesher::get_colors);
|
||||
ClassDB::bind_method(D_METHOD("set_colors", "values"), &VoxelMesher::set_colors);
|
||||
ClassDB::bind_method(D_METHOD("get_color", "idx"), &VoxelMesher::get_color);
|
||||
ClassDB::bind_method(D_METHOD("add_color", "color"), &VoxelMesher::add_color);
|
||||
ClassDB::bind_method(D_METHOD("get_colors"), &TerraMesher::get_colors);
|
||||
ClassDB::bind_method(D_METHOD("set_colors", "values"), &TerraMesher::set_colors);
|
||||
ClassDB::bind_method(D_METHOD("get_color", "idx"), &TerraMesher::get_color);
|
||||
ClassDB::bind_method(D_METHOD("add_color", "color"), &TerraMesher::add_color);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_uvs"), &VoxelMesher::get_uvs);
|
||||
ClassDB::bind_method(D_METHOD("set_uvs", "values"), &VoxelMesher::set_uvs);
|
||||
ClassDB::bind_method(D_METHOD("get_uv", "idx"), &VoxelMesher::get_uv);
|
||||
ClassDB::bind_method(D_METHOD("add_uv", "uv"), &VoxelMesher::add_uv);
|
||||
ClassDB::bind_method(D_METHOD("get_uvs"), &TerraMesher::get_uvs);
|
||||
ClassDB::bind_method(D_METHOD("set_uvs", "values"), &TerraMesher::set_uvs);
|
||||
ClassDB::bind_method(D_METHOD("get_uv", "idx"), &TerraMesher::get_uv);
|
||||
ClassDB::bind_method(D_METHOD("add_uv", "uv"), &TerraMesher::add_uv);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_uv2s"), &VoxelMesher::get_uv2s);
|
||||
ClassDB::bind_method(D_METHOD("set_uv2s", "values"), &VoxelMesher::set_uv2s);
|
||||
ClassDB::bind_method(D_METHOD("get_uv2", "idx"), &VoxelMesher::get_uv2);
|
||||
ClassDB::bind_method(D_METHOD("add_uv2", "uv"), &VoxelMesher::add_uv2);
|
||||
ClassDB::bind_method(D_METHOD("get_uv2s"), &TerraMesher::get_uv2s);
|
||||
ClassDB::bind_method(D_METHOD("set_uv2s", "values"), &TerraMesher::set_uv2s);
|
||||
ClassDB::bind_method(D_METHOD("get_uv2", "idx"), &TerraMesher::get_uv2);
|
||||
ClassDB::bind_method(D_METHOD("add_uv2", "uv"), &TerraMesher::add_uv2);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_indices"), &VoxelMesher::get_indices);
|
||||
ClassDB::bind_method(D_METHOD("set_indices", "values"), &VoxelMesher::set_indices);
|
||||
ClassDB::bind_method(D_METHOD("get_indices_count"), &VoxelMesher::get_indices_count);
|
||||
ClassDB::bind_method(D_METHOD("get_index", "idx"), &VoxelMesher::get_index);
|
||||
ClassDB::bind_method(D_METHOD("remove_index", "idx"), &VoxelMesher::remove_index);
|
||||
ClassDB::bind_method(D_METHOD("add_indices", "indice"), &VoxelMesher::add_indices);
|
||||
ClassDB::bind_method(D_METHOD("get_indices"), &TerraMesher::get_indices);
|
||||
ClassDB::bind_method(D_METHOD("set_indices", "values"), &TerraMesher::set_indices);
|
||||
ClassDB::bind_method(D_METHOD("get_indices_count"), &TerraMesher::get_indices_count);
|
||||
ClassDB::bind_method(D_METHOD("get_index", "idx"), &TerraMesher::get_index);
|
||||
ClassDB::bind_method(D_METHOD("remove_index", "idx"), &TerraMesher::remove_index);
|
||||
ClassDB::bind_method(D_METHOD("add_indices", "indice"), &TerraMesher::add_indices);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("reset"), &VoxelMesher::reset);
|
||||
ClassDB::bind_method(D_METHOD("reset"), &TerraMesher::reset);
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("calculate_vertex_ambient_occlusion", "meshinstance_path", "radius", "intensity", "sampleCount"), &VoxelMesher::calculate_vertex_ambient_occlusion_path);
|
||||
//ClassDB::bind_method(D_METHOD("calculate_vertex_ambient_occlusion", "meshinstance_path", "radius", "intensity", "sampleCount"), &TerraMesher::calculate_vertex_ambient_occlusion_path);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("build_mesh"), &VoxelMesher::build_mesh);
|
||||
ClassDB::bind_method(D_METHOD("build_mesh_into", "mesh_rid"), &VoxelMesher::build_mesh_into);
|
||||
ClassDB::bind_method(D_METHOD("build_collider"), &VoxelMesher::build_collider);
|
||||
ClassDB::bind_method(D_METHOD("build_mesh"), &TerraMesher::build_mesh);
|
||||
ClassDB::bind_method(D_METHOD("build_mesh_into", "mesh_rid"), &TerraMesher::build_mesh_into);
|
||||
ClassDB::bind_method(D_METHOD("build_collider"), &TerraMesher::build_collider);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("generate_normals", "flip"), &VoxelMesher::generate_normals, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("generate_normals", "flip"), &TerraMesher::generate_normals, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("remove_doubles"), &VoxelMesher::remove_doubles);
|
||||
ClassDB::bind_method(D_METHOD("remove_doubles_hashed"), &VoxelMesher::remove_doubles_hashed);
|
||||
ClassDB::bind_method(D_METHOD("remove_doubles"), &TerraMesher::remove_doubles);
|
||||
ClassDB::bind_method(D_METHOD("remove_doubles_hashed"), &TerraMesher::remove_doubles_hashed);
|
||||
}
|
||||
|
@ -20,19 +20,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_TOOLS_H
|
||||
#define VOXEL_TOOLS_H
|
||||
#ifndef TERRA_TOOLS_H
|
||||
#define TERRA_TOOLS_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
#if VERSION_MAJOR > 3
|
||||
#include "core/math/color.h"
|
||||
#include "core/object/reference.h"
|
||||
#include "core/templates/vector.h"
|
||||
#include "core/math/color.h"
|
||||
#else
|
||||
#include "core/color.h"
|
||||
#include "core/reference.h"
|
||||
#include "core/vector.h"
|
||||
#include "core/color.h"
|
||||
#endif
|
||||
|
||||
#include "../defines.h"
|
||||
@ -55,16 +55,16 @@ include_pool_vector
|
||||
|
||||
#include "../library/voxelman_library.h"
|
||||
|
||||
const double PI_2 = 3.141592653589793238463 / 2;
|
||||
const double PI = 3.141592653589793238463;
|
||||
class TerramanLibrary;
|
||||
class TerraChunk;
|
||||
|
||||
class VoxelmanLibrary;
|
||||
class VoxelChunk;
|
||||
|
||||
class VoxelMesher : public Reference {
|
||||
GDCLASS(VoxelMesher, Reference);
|
||||
class TerraMesher : public Reference {
|
||||
GDCLASS(TerraMesher, Reference);
|
||||
|
||||
public:
|
||||
const double PI_2 = 3.141592653589793238463 / 2;
|
||||
const double PI = 3.141592653589793238463;
|
||||
|
||||
struct Vertex {
|
||||
|
||||
Vector3 vertex;
|
||||
@ -110,8 +110,8 @@ public:
|
||||
int get_texture_scale() const;
|
||||
void set_texture_scale(const int value);
|
||||
|
||||
Ref<VoxelmanLibrary> get_library();
|
||||
void set_library(const Ref<VoxelmanLibrary> &library);
|
||||
Ref<TerramanLibrary> get_library();
|
||||
void set_library(const Ref<TerramanLibrary> &library);
|
||||
|
||||
Ref<Material> get_material();
|
||||
void set_material(const Ref<Material> &material);
|
||||
@ -130,7 +130,7 @@ public:
|
||||
|
||||
void reset();
|
||||
|
||||
void add_chunk(Ref<VoxelChunk> chunk);
|
||||
void add_chunk(Ref<TerraChunk> chunk);
|
||||
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
void add_mesh_data_resource(Ref<MeshDataResource> 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));
|
||||
@ -138,15 +138,15 @@ public:
|
||||
void add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform transform, const PoolColorArray &colors, const Rect2 uv_rect = Rect2(0, 0, 1, 1));
|
||||
#endif
|
||||
|
||||
void add_mesher(const Ref<VoxelMesher> &mesher);
|
||||
void _add_mesher(const Ref<VoxelMesher> &mesher);
|
||||
void add_mesher(const Ref<TerraMesher> &mesher);
|
||||
void _add_mesher(const Ref<TerraMesher> &mesher);
|
||||
|
||||
void bake_colors(Ref<VoxelChunk> chunk);
|
||||
void bake_liquid_colors(Ref<VoxelChunk> chunk);
|
||||
void bake_colors(Ref<TerraChunk> chunk);
|
||||
void bake_liquid_colors(Ref<TerraChunk> chunk);
|
||||
|
||||
PoolVector<Vector3> build_collider() const;
|
||||
|
||||
void bake_lights(MeshInstance *node, Vector<Ref<VoxelLight> > &lights);
|
||||
void bake_lights(MeshInstance *node, Vector<Ref<TerraLight> > &lights);
|
||||
|
||||
Array build_mesh();
|
||||
void build_mesh_into(RID mesh);
|
||||
@ -189,9 +189,9 @@ public:
|
||||
void remove_index(const int idx);
|
||||
void add_indices(const int index);
|
||||
|
||||
VoxelMesher(const Ref<VoxelmanLibrary> &library);
|
||||
VoxelMesher();
|
||||
~VoxelMesher();
|
||||
TerraMesher(const Ref<TerramanLibrary> &library);
|
||||
TerraMesher();
|
||||
~TerraMesher();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -216,7 +216,7 @@ protected:
|
||||
Vector<float> _last_weights;
|
||||
Plane _last_tangent;
|
||||
|
||||
Ref<VoxelmanLibrary> _library;
|
||||
Ref<TerramanLibrary> _library;
|
||||
Ref<Material> _material;
|
||||
|
||||
float _voxel_scale;
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include "voxelman_light.h"
|
||||
|
||||
VoxelmanLight::VoxelmanLight() {
|
||||
TerramanLight::TerramanLight() {
|
||||
}
|
||||
VoxelmanLight::~VoxelmanLight() {
|
||||
TerramanLight::~TerramanLight() {
|
||||
}
|
||||
|
||||
void VoxelmanLight::_bind_methods() {
|
||||
void TerramanLight::_bind_methods() {
|
||||
}
|
||||
|
@ -35,15 +35,15 @@ SOFTWARE.
|
||||
|
||||
#include "core/math/vector3.h"
|
||||
|
||||
class VoxelmanLight : public Spatial {
|
||||
GDCLASS(VoxelmanLight, Spatial);
|
||||
class TerramanLight : public Spatial {
|
||||
GDCLASS(TerramanLight, Spatial);
|
||||
OBJ_CATEGORY("Props");
|
||||
|
||||
public:
|
||||
//make it turn into a normal light if voxelman isn't present?
|
||||
|
||||
VoxelmanLight();
|
||||
~VoxelmanLight();
|
||||
TerramanLight();
|
||||
~TerramanLight();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -22,7 +22,7 @@ SOFTWARE.
|
||||
|
||||
#include "register_types.h"
|
||||
|
||||
/*
|
||||
|
||||
#include "library/voxel_surface.h"
|
||||
#include "library/voxel_surface_simple.h"
|
||||
|
||||
@ -77,67 +77,65 @@ SOFTWARE.
|
||||
#include "world/jobs/voxel_light_job.h"
|
||||
#include "world/jobs/voxel_prop_job.h"
|
||||
#include "world/jobs/voxel_terrarin_job.h"
|
||||
*/
|
||||
|
||||
|
||||
void register_terraman_types() {
|
||||
/*
|
||||
ClassDB::register_class<VoxelMesher>();
|
||||
ClassDB::register_class<VoxelMesherDefault>();
|
||||
ClassDB::register_class<TerraMesher>();
|
||||
ClassDB::register_class<TerraMesherDefault>();
|
||||
|
||||
ClassDB::register_class<VoxelMesherMarchingCubes>();
|
||||
ClassDB::register_class<TerraMesherMarchingCubes>();
|
||||
ClassDB::register_class<MarchingCubesCellData>();
|
||||
|
||||
ClassDB::register_class<VoxelSurface>();
|
||||
ClassDB::register_class<VoxelSurfaceSimple>();
|
||||
ClassDB::register_class<TerraSurface>();
|
||||
ClassDB::register_class<TerraSurfaceSimple>();
|
||||
|
||||
ClassDB::register_class<VoxelmanLibrary>();
|
||||
ClassDB::register_class<VoxelmanLibrarySimple>();
|
||||
ClassDB::register_class<TerramanLibrary>();
|
||||
ClassDB::register_class<TerramanLibrarySimple>();
|
||||
|
||||
#ifdef TEXTURE_PACKER_PRESENT
|
||||
ClassDB::register_class<VoxelSurfaceMerger>();
|
||||
ClassDB::register_class<VoxelmanLibraryMerger>();
|
||||
ClassDB::register_class<TerraSurfaceMerger>();
|
||||
ClassDB::register_class<TerramanLibraryMerger>();
|
||||
#endif
|
||||
|
||||
ClassDB::register_class<VoxelLight>();
|
||||
ClassDB::register_class<VoxelmanLight>();
|
||||
ClassDB::register_class<TerraLight>();
|
||||
ClassDB::register_class<TerramanLight>();
|
||||
|
||||
ClassDB::register_class<VoxelWorld>();
|
||||
ClassDB::register_class<VoxelChunk>();
|
||||
ClassDB::register_class<VoxelStructure>();
|
||||
ClassDB::register_class<BlockVoxelStructure>();
|
||||
ClassDB::register_class<TerraWorld>();
|
||||
ClassDB::register_class<TerraChunk>();
|
||||
ClassDB::register_class<TerraStructure>();
|
||||
ClassDB::register_class<BlockTerraStructure>();
|
||||
ClassDB::register_class<EnvironmentData>();
|
||||
|
||||
ClassDB::register_class<VoxelChunkDefault>();
|
||||
ClassDB::register_class<VoxelWorldDefault>();
|
||||
ClassDB::register_class<TerraChunkDefault>();
|
||||
ClassDB::register_class<TerraWorldDefault>();
|
||||
|
||||
ClassDB::register_class<VoxelMesherCubic>();
|
||||
ClassDB::register_class<VoxelCubePoints>();
|
||||
ClassDB::register_class<TerraMesherCubic>();
|
||||
ClassDB::register_class<TerraCubePoints>();
|
||||
|
||||
ClassDB::register_class<VoxelMesherBlocky>();
|
||||
ClassDB::register_class<VoxelWorldBlocky>();
|
||||
ClassDB::register_class<VoxelChunkBlocky>();
|
||||
ClassDB::register_class<VoxelMesherLiquidBlocky>();
|
||||
ClassDB::register_class<TerraMesherBlocky>();
|
||||
ClassDB::register_class<TerraWorldBlocky>();
|
||||
ClassDB::register_class<TerraChunkBlocky>();
|
||||
ClassDB::register_class<TerraMesherLiquidBlocky>();
|
||||
|
||||
ClassDB::register_class<VoxelWorldMarchingCubes>();
|
||||
ClassDB::register_class<VoxelChunkMarchingCubes>();
|
||||
ClassDB::register_class<TerraWorldMarchingCubes>();
|
||||
ClassDB::register_class<TerraChunkMarchingCubes>();
|
||||
|
||||
ClassDB::register_class<VoxelWorldCubic>();
|
||||
ClassDB::register_class<VoxelChunkCubic>();
|
||||
ClassDB::register_class<TerraWorldCubic>();
|
||||
ClassDB::register_class<TerraChunkCubic>();
|
||||
|
||||
ClassDB::register_class<VoxelmanLevelGenerator>();
|
||||
ClassDB::register_class<VoxelmanLevelGeneratorFlat>();
|
||||
ClassDB::register_class<TerramanLevelGenerator>();
|
||||
ClassDB::register_class<TerramanLevelGeneratorFlat>();
|
||||
|
||||
ClassDB::register_class<WorldArea>();
|
||||
ClassDB::register_class<TerraWorldArea>();
|
||||
|
||||
ClassDB::register_class<VoxelJob>();
|
||||
ClassDB::register_class<VoxelTerrarinJob>();
|
||||
ClassDB::register_class<VoxelLightJob>();
|
||||
ClassDB::register_class<VoxelPropJob>();
|
||||
ClassDB::register_class<TerraJob>();
|
||||
ClassDB::register_class<TerraTerrarinJob>();
|
||||
ClassDB::register_class<TerraLightJob>();
|
||||
ClassDB::register_class<TerraPropJob>();
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
EditorPlugins::add_by_type<VoxelWorldEditorPlugin>();
|
||||
EditorPlugins::add_by_type<TerraWorldEditorPlugin>();
|
||||
#endif
|
||||
*/
|
||||
}
|
||||
|
||||
void unregister_terraman_types() {
|
||||
|
@ -22,21 +22,21 @@ SOFTWARE.
|
||||
|
||||
#include "block_voxel_structure.h"
|
||||
|
||||
int BlockVoxelStructure::get_channel_type() const {
|
||||
int BlockTerraStructure::get_channel_type() const {
|
||||
return _channel_type;
|
||||
}
|
||||
void BlockVoxelStructure::set_channel_type(const int value) {
|
||||
void BlockTerraStructure::set_channel_type(const int value) {
|
||||
_channel_type = value;
|
||||
}
|
||||
|
||||
int BlockVoxelStructure::get_channel_isolevel() const {
|
||||
int BlockTerraStructure::get_channel_isolevel() const {
|
||||
return _channel_isolevel;
|
||||
}
|
||||
void BlockVoxelStructure::set_channel_isolevel(const int value) {
|
||||
void BlockTerraStructure::set_channel_isolevel(const int value) {
|
||||
_channel_isolevel = value;
|
||||
}
|
||||
|
||||
int BlockVoxelStructure::get_voxel_type(int p_x, int p_y, int p_z) const {
|
||||
int BlockTerraStructure::get_voxel_type(int p_x, int p_y, int p_z) const {
|
||||
DataEntry p;
|
||||
|
||||
for (int i = 0; i < _data.size(); ++i) {
|
||||
@ -49,7 +49,7 @@ int BlockVoxelStructure::get_voxel_type(int p_x, int p_y, int p_z) const {
|
||||
|
||||
return 0;
|
||||
}
|
||||
int BlockVoxelStructure::get_voxel_isolevel(int p_x, int p_y, int p_z) const {
|
||||
int BlockTerraStructure::get_voxel_isolevel(int p_x, int p_y, int p_z) const {
|
||||
DataEntry p;
|
||||
|
||||
for (int i = 0; i < _data.size(); ++i) {
|
||||
@ -63,7 +63,7 @@ int BlockVoxelStructure::get_voxel_isolevel(int p_x, int p_y, int p_z) const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BlockVoxelStructure::set_voxel(int p_x, int p_y, int p_z, int p_type, int p_isolevel) {
|
||||
void BlockTerraStructure::set_voxel(int p_x, int p_y, int p_z, int p_type, int p_isolevel) {
|
||||
DataEntry p;
|
||||
p.x = p_x;
|
||||
p.y = p_y;
|
||||
@ -74,36 +74,36 @@ void BlockVoxelStructure::set_voxel(int p_x, int p_y, int p_z, int p_type, int p
|
||||
_data.push_back(p);
|
||||
}
|
||||
|
||||
void BlockVoxelStructure::_write_to_chunk(Ref<VoxelChunk> chunk) {
|
||||
//Ref<VoxelChunk> c = Object::cast_to<VoxelChunk>(chunk);
|
||||
void BlockTerraStructure::_write_to_chunk(Ref<TerraChunk> chunk) {
|
||||
//Ref<TerraChunk> c = Object::cast_to<TerraChunk>(chunk);
|
||||
}
|
||||
|
||||
void BlockVoxelStructure::clear() {
|
||||
void BlockTerraStructure::clear() {
|
||||
_data.clear();
|
||||
}
|
||||
|
||||
BlockVoxelStructure::BlockVoxelStructure() {
|
||||
BlockTerraStructure::BlockTerraStructure() {
|
||||
_channel_type = 0;
|
||||
_channel_isolevel = 0;
|
||||
}
|
||||
|
||||
BlockVoxelStructure::~BlockVoxelStructure() {
|
||||
BlockTerraStructure::~BlockTerraStructure() {
|
||||
_data.clear();
|
||||
}
|
||||
|
||||
void BlockVoxelStructure::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_channel_type"), &BlockVoxelStructure::get_channel_type);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_type", "value"), &BlockVoxelStructure::set_channel_type);
|
||||
void BlockTerraStructure::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_channel_type"), &BlockTerraStructure::get_channel_type);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_type", "value"), &BlockTerraStructure::set_channel_type);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "channel_type"), "set_channel_type", "get_channel_type");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_channel_isolevel"), &BlockVoxelStructure::get_channel_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_isolevel", "value"), &BlockVoxelStructure::set_channel_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("get_channel_isolevel"), &BlockTerraStructure::get_channel_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("set_channel_isolevel", "value"), &BlockTerraStructure::set_channel_isolevel);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "channel_isolevel"), "set_channel_isolevel", "get_channel_isolevel");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_type", "x", "y", "z"), &BlockVoxelStructure::get_voxel_type);
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_isolevel", "x", "y", "z"), &BlockVoxelStructure::get_voxel_isolevel);
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_type", "x", "y", "z"), &BlockTerraStructure::get_voxel_type);
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_isolevel", "x", "y", "z"), &BlockTerraStructure::get_voxel_isolevel);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_voxel", "x", "y", "z", "type", "isolevel"), &BlockVoxelStructure::set_voxel);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel", "x", "y", "z", "type", "isolevel"), &BlockTerraStructure::set_voxel);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_write_to_chunk", "chunk"), &BlockVoxelStructure::_write_to_chunk);
|
||||
ClassDB::bind_method(D_METHOD("_write_to_chunk", "chunk"), &BlockTerraStructure::_write_to_chunk);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef BLOCK_VOXEL_STRUCTURE_H
|
||||
#define BLOCK_VOXEL_STRUCTURE_H
|
||||
#ifndef BLOCK_TERRA_STRUCTURE_H
|
||||
#define BLOCK_TERRA_STRUCTURE_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -41,8 +41,8 @@ include_pool_vector
|
||||
#include "voxel_chunk.h"
|
||||
;
|
||||
|
||||
class BlockVoxelStructure : public VoxelStructure {
|
||||
GDCLASS(BlockVoxelStructure, VoxelStructure);
|
||||
class BlockTerraStructure : public TerraStructure {
|
||||
GDCLASS(BlockTerraStructure, TerraStructure);
|
||||
|
||||
public:
|
||||
int get_channel_type() const;
|
||||
@ -56,12 +56,12 @@ public:
|
||||
|
||||
void set_voxel(int p_x, int p_y, int p_z, int p_type, int p_isolevel);
|
||||
|
||||
void _write_to_chunk(Ref<VoxelChunk> chunk);
|
||||
void _write_to_chunk(Ref<TerraChunk> chunk);
|
||||
|
||||
void clear();
|
||||
|
||||
BlockVoxelStructure();
|
||||
~BlockVoxelStructure();
|
||||
BlockTerraStructure();
|
||||
~BlockTerraStructure();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -24,19 +24,19 @@ SOFTWARE.
|
||||
|
||||
#include "../../defines.h"
|
||||
|
||||
VoxelChunkBlocky::VoxelChunkBlocky() {
|
||||
TerraChunkBlocky::TerraChunkBlocky() {
|
||||
}
|
||||
|
||||
VoxelChunkBlocky::~VoxelChunkBlocky() {
|
||||
TerraChunkBlocky::~TerraChunkBlocky() {
|
||||
}
|
||||
|
||||
void VoxelChunkBlocky::_setup_channels() {
|
||||
void TerraChunkBlocky::_setup_channels() {
|
||||
channel_set_count(MAX_DEFAULT_CHANNELS);
|
||||
}
|
||||
|
||||
void VoxelChunkBlocky::_bind_methods() {
|
||||
void TerraChunkBlocky::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "channel_set_compressed", "channel_get_compressed", 0);
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &VoxelChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &VoxelChunk::set_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &TerraChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &TerraChunk::set_channel_compressed);
|
||||
}
|
||||
|
@ -20,17 +20,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_BLOCKY_H
|
||||
#define VOXEL_CHUNK_BLOCKY_H
|
||||
#ifndef TERRA_CHUNK_BLOCKY_H
|
||||
#define TERRA_CHUNK_BLOCKY_H
|
||||
|
||||
#include "../default/voxel_chunk_default.h"
|
||||
|
||||
class VoxelChunkBlocky : public VoxelChunkDefault {
|
||||
GDCLASS(VoxelChunkBlocky, VoxelChunkDefault);
|
||||
class TerraChunkBlocky : public TerraChunkDefault {
|
||||
GDCLASS(TerraChunkBlocky, TerraChunkDefault);
|
||||
|
||||
public:
|
||||
VoxelChunkBlocky();
|
||||
~VoxelChunkBlocky();
|
||||
TerraChunkBlocky();
|
||||
~TerraChunkBlocky();
|
||||
|
||||
protected:
|
||||
virtual void _setup_channels();
|
||||
|
@ -30,41 +30,41 @@ SOFTWARE.
|
||||
#include "../jobs/voxel_prop_job.h"
|
||||
#include "../jobs/voxel_terrarin_job.h"
|
||||
|
||||
Ref<VoxelChunk> VoxelWorldBlocky::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||
Ref<TerraChunk> TerraWorldBlocky::_create_chunk(int x, int y, int z, Ref<TerraChunk> chunk) {
|
||||
|
||||
if (!chunk.is_valid()) {
|
||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkBlocky));
|
||||
chunk = Ref<TerraChunk>(memnew(TerraChunkBlocky));
|
||||
}
|
||||
|
||||
if (chunk->job_get_count() == 0) {
|
||||
Ref<VoxelTerrarinJob> tj;
|
||||
Ref<TerraTerrarinJob> tj;
|
||||
tj.instance();
|
||||
|
||||
Ref<VoxelLightJob> lj;
|
||||
Ref<TerraLightJob> lj;
|
||||
lj.instance();
|
||||
|
||||
Ref<VoxelPropJob> pj;
|
||||
Ref<TerraPropJob> pj;
|
||||
pj.instance();
|
||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky)));
|
||||
pj->set_prop_mesher(Ref<TerraMesher>(memnew(TerraMesherBlocky)));
|
||||
|
||||
tj->add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky())));
|
||||
tj->add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidBlocky())));
|
||||
tj->add_mesher(Ref<TerraMesher>(memnew(TerraMesherBlocky())));
|
||||
tj->add_liquid_mesher(Ref<TerraMesher>(memnew(TerraMesherLiquidBlocky())));
|
||||
|
||||
chunk->job_add(lj);
|
||||
chunk->job_add(tj);
|
||||
chunk->job_add(pj);
|
||||
}
|
||||
|
||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||
return TerraWorld::_create_chunk(x, y, z, chunk);
|
||||
}
|
||||
|
||||
VoxelWorldBlocky::VoxelWorldBlocky() {
|
||||
TerraWorldBlocky::TerraWorldBlocky() {
|
||||
set_data_margin_start(1);
|
||||
set_data_margin_end(1);
|
||||
}
|
||||
|
||||
VoxelWorldBlocky ::~VoxelWorldBlocky() {
|
||||
TerraWorldBlocky ::~TerraWorldBlocky() {
|
||||
}
|
||||
|
||||
void VoxelWorldBlocky::_bind_methods() {
|
||||
void TerraWorldBlocky::_bind_methods() {
|
||||
}
|
@ -20,20 +20,20 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_BLOCKY_H
|
||||
#define VOXEL_WORLD_BLOCKY_H
|
||||
#ifndef TERRA_WORLD_BLOCKY_H
|
||||
#define TERRA_WORLD_BLOCKY_H
|
||||
|
||||
#include "../default/voxel_world_default.h"
|
||||
|
||||
class VoxelWorldBlocky : public VoxelWorldDefault {
|
||||
GDCLASS(VoxelWorldBlocky, VoxelWorldDefault);
|
||||
class TerraWorldBlocky : public TerraWorldDefault {
|
||||
GDCLASS(TerraWorldBlocky, TerraWorldDefault);
|
||||
|
||||
public:
|
||||
VoxelWorldBlocky();
|
||||
~VoxelWorldBlocky();
|
||||
TerraWorldBlocky();
|
||||
~TerraWorldBlocky();
|
||||
|
||||
protected:
|
||||
Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
Ref<TerraChunk> _create_chunk(int x, int y, int z, Ref<TerraChunk> p_chunk);
|
||||
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
@ -24,20 +24,20 @@ SOFTWARE.
|
||||
|
||||
#include "../../defines.h"
|
||||
|
||||
VoxelChunkCubic::VoxelChunkCubic() {
|
||||
TerraChunkCubic::TerraChunkCubic() {
|
||||
}
|
||||
|
||||
VoxelChunkCubic::~VoxelChunkCubic() {
|
||||
TerraChunkCubic::~TerraChunkCubic() {
|
||||
}
|
||||
|
||||
void VoxelChunkCubic::_setup_channels() {
|
||||
void TerraChunkCubic::_setup_channels() {
|
||||
channel_set_count(MAX_DEFAULT_CHANNELS);
|
||||
}
|
||||
|
||||
void VoxelChunkCubic::_bind_methods() {
|
||||
void TerraChunkCubic::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "channel_set_compressed", "channel_get_compressed", 0);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "channel_set_compressed", "channel_get_compressed", 1);
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &VoxelChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &VoxelChunk::set_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &TerraChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &TerraChunk::set_channel_compressed);
|
||||
}
|
||||
|
@ -20,17 +20,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_CUBIC_H
|
||||
#define VOXEL_CHUNK_CUBIC_H
|
||||
#ifndef TERRA_CHUNK_CUBIC_H
|
||||
#define TERRA_CHUNK_CUBIC_H
|
||||
|
||||
#include "../default/voxel_chunk_default.h"
|
||||
|
||||
class VoxelChunkCubic : public VoxelChunkDefault {
|
||||
GDCLASS(VoxelChunkCubic, VoxelChunkDefault);
|
||||
class TerraChunkCubic : public TerraChunkDefault {
|
||||
GDCLASS(TerraChunkCubic, TerraChunkDefault);
|
||||
|
||||
public:
|
||||
VoxelChunkCubic();
|
||||
~VoxelChunkCubic();
|
||||
TerraChunkCubic();
|
||||
~TerraChunkCubic();
|
||||
|
||||
protected:
|
||||
virtual void _setup_channels();
|
||||
|
@ -29,45 +29,45 @@ SOFTWARE.
|
||||
#include "../jobs/voxel_prop_job.h"
|
||||
#include "../jobs/voxel_terrarin_job.h"
|
||||
|
||||
Ref<VoxelChunk> VoxelWorldCubic::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||
Ref<TerraChunk> TerraWorldCubic::_create_chunk(int x, int y, int z, Ref<TerraChunk> chunk) {
|
||||
|
||||
if (!chunk.is_valid()) {
|
||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkCubic));
|
||||
chunk = Ref<TerraChunk>(memnew(TerraChunkCubic));
|
||||
}
|
||||
|
||||
if (chunk->job_get_count() == 0) {
|
||||
Ref<VoxelTerrarinJob> tj;
|
||||
Ref<TerraTerrarinJob> tj;
|
||||
tj.instance();
|
||||
|
||||
Ref<VoxelLightJob> lj;
|
||||
Ref<TerraLightJob> lj;
|
||||
lj.instance();
|
||||
|
||||
Ref<VoxelPropJob> pj;
|
||||
Ref<TerraPropJob> pj;
|
||||
pj.instance();
|
||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherCubic)));
|
||||
pj->set_prop_mesher(Ref<TerraMesher>(memnew(TerraMesherCubic)));
|
||||
|
||||
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherCubic()));
|
||||
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
Ref<TerraMesher> m = Ref<TerraMesher>(memnew(TerraMesherCubic()));
|
||||
m->set_channel_index_type(TerraChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
m->set_channel_index_isolevel(TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
|
||||
tj->add_mesher(m);
|
||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||
//add_liquid_mesher(Ref<TerraMesher>(memnew(TerraMesherLiquidMarchingCubes())));
|
||||
|
||||
chunk->job_add(lj);
|
||||
chunk->job_add(tj);
|
||||
chunk->job_add(pj);
|
||||
}
|
||||
|
||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||
return TerraWorld::_create_chunk(x, y, z, chunk);
|
||||
}
|
||||
|
||||
VoxelWorldCubic::VoxelWorldCubic() {
|
||||
TerraWorldCubic::TerraWorldCubic() {
|
||||
set_data_margin_start(1);
|
||||
set_data_margin_end(1);
|
||||
}
|
||||
|
||||
VoxelWorldCubic ::~VoxelWorldCubic() {
|
||||
TerraWorldCubic ::~TerraWorldCubic() {
|
||||
}
|
||||
|
||||
void VoxelWorldCubic::_bind_methods() {
|
||||
void TerraWorldCubic::_bind_methods() {
|
||||
}
|
@ -20,20 +20,20 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_CUBIC_H
|
||||
#define VOXEL_WORLD_CUBIC_H
|
||||
#ifndef TERRA_WORLD_CUBIC_H
|
||||
#define TERRA_WORLD_CUBIC_H
|
||||
|
||||
#include "../default/voxel_world_default.h"
|
||||
|
||||
class VoxelWorldCubic : public VoxelWorldDefault {
|
||||
GDCLASS(VoxelWorldCubic, VoxelWorldDefault);
|
||||
class TerraWorldCubic : public TerraWorldDefault {
|
||||
GDCLASS(TerraWorldCubic, TerraWorldDefault);
|
||||
|
||||
public:
|
||||
VoxelWorldCubic();
|
||||
~VoxelWorldCubic();
|
||||
TerraWorldCubic();
|
||||
~TerraWorldCubic();
|
||||
|
||||
protected:
|
||||
Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
Ref<TerraChunk> _create_chunk(int x, int y, int z, Ref<TerraChunk> p_chunk);
|
||||
|
||||
static void _bind_methods();
|
||||
};
|
||||
|
@ -39,33 +39,33 @@ SOFTWARE.
|
||||
#include "../jobs/voxel_prop_job.h"
|
||||
#include "../jobs/voxel_terrarin_job.h"
|
||||
|
||||
const String VoxelChunkDefault::BINDING_STRING_BUILD_FLAGS = "Use Isolevel,Use Lighting,Use AO,Use RAO,Generate AO,Generate RAO,Bake Lights,Create Collider,Create Lods";
|
||||
const String TerraChunkDefault::BINDING_STRING_BUILD_FLAGS = "Use Isolevel,Use Lighting,Use AO,Use RAO,Generate AO,Generate RAO,Bake Lights,Create Collider,Create Lods";
|
||||
|
||||
_FORCE_INLINE_ int VoxelChunkDefault::get_build_flags() const {
|
||||
_FORCE_INLINE_ int TerraChunkDefault::get_build_flags() const {
|
||||
return _build_flags;
|
||||
}
|
||||
_FORCE_INLINE_ void VoxelChunkDefault::set_build_flags(const int flags) {
|
||||
_FORCE_INLINE_ void TerraChunkDefault::set_build_flags(const int flags) {
|
||||
_build_flags = flags;
|
||||
}
|
||||
|
||||
bool VoxelChunkDefault::get_lights_dirty() const {
|
||||
bool TerraChunkDefault::get_lights_dirty() const {
|
||||
return _lights_dirty;
|
||||
}
|
||||
void VoxelChunkDefault::set_lights_dirty(const bool value) {
|
||||
void TerraChunkDefault::set_lights_dirty(const bool value) {
|
||||
_lights_dirty = value;
|
||||
}
|
||||
|
||||
int VoxelChunkDefault::get_lod_num() const {
|
||||
int TerraChunkDefault::get_lod_num() const {
|
||||
return _lod_num;
|
||||
}
|
||||
void VoxelChunkDefault::set_lod_num(const int value) {
|
||||
void TerraChunkDefault::set_lod_num(const int value) {
|
||||
_lod_num = value;
|
||||
}
|
||||
|
||||
int VoxelChunkDefault::get_current_lod_level() const {
|
||||
int TerraChunkDefault::get_current_lod_level() const {
|
||||
return _current_lod_level;
|
||||
}
|
||||
void VoxelChunkDefault::set_current_lod_level(const int value) {
|
||||
void TerraChunkDefault::set_current_lod_level(const int value) {
|
||||
_current_lod_level = value;
|
||||
|
||||
if ((_build_flags & BUILD_FLAG_CREATE_LODS) == 0)
|
||||
@ -95,7 +95,7 @@ void VoxelChunkDefault::set_current_lod_level(const int value) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::emit_build_finished() {
|
||||
void TerraChunkDefault::emit_build_finished() {
|
||||
emit_signal("mesh_generation_finished", this);
|
||||
|
||||
if (_voxel_world != NULL) {
|
||||
@ -104,14 +104,14 @@ void VoxelChunkDefault::emit_build_finished() {
|
||||
}
|
||||
|
||||
//Meshes
|
||||
Dictionary VoxelChunkDefault::mesh_rids_get() {
|
||||
Dictionary TerraChunkDefault::mesh_rids_get() {
|
||||
return _rids;
|
||||
}
|
||||
void VoxelChunkDefault::mesh_rids_set(const Dictionary &rids) {
|
||||
void TerraChunkDefault::mesh_rids_set(const Dictionary &rids) {
|
||||
_rids = rids;
|
||||
}
|
||||
|
||||
RID VoxelChunkDefault::mesh_rid_get(const int mesh_index, const int mesh_type_index) {
|
||||
RID TerraChunkDefault::mesh_rid_get(const int mesh_index, const int mesh_type_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return RID();
|
||||
|
||||
@ -132,7 +132,7 @@ RID VoxelChunkDefault::mesh_rid_get(const int mesh_index, const int mesh_type_in
|
||||
|
||||
return v;
|
||||
}
|
||||
void VoxelChunkDefault::mesh_rid_set(const int mesh_index, const int mesh_type_index, RID value) {
|
||||
void TerraChunkDefault::mesh_rid_set(const int mesh_index, const int mesh_type_index, RID value) {
|
||||
if (!_rids.has(mesh_index))
|
||||
_rids[mesh_index] = Dictionary();
|
||||
|
||||
@ -155,7 +155,7 @@ void VoxelChunkDefault::mesh_rid_set(const int mesh_index, const int mesh_type_i
|
||||
m[mesh_type_index] = value;
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
RID VoxelChunkDefault::mesh_rid_get_index(const int mesh_index, const int mesh_type_index, const int index) {
|
||||
RID TerraChunkDefault::mesh_rid_get_index(const int mesh_index, const int mesh_type_index, const int index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return RID();
|
||||
|
||||
@ -175,7 +175,7 @@ RID VoxelChunkDefault::mesh_rid_get_index(const int mesh_index, const int mesh_t
|
||||
|
||||
return arr[index];
|
||||
}
|
||||
void VoxelChunkDefault::mesh_rid_set_index(const int mesh_index, const int mesh_type_index, const int index, RID value) {
|
||||
void TerraChunkDefault::mesh_rid_set_index(const int mesh_index, const int mesh_type_index, const int index, RID value) {
|
||||
if (!_rids.has(mesh_index))
|
||||
_rids[mesh_index] = Dictionary();
|
||||
|
||||
@ -205,7 +205,7 @@ void VoxelChunkDefault::mesh_rid_set_index(const int mesh_index, const int mesh_
|
||||
m[mesh_type_index] = arr;
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
int VoxelChunkDefault::mesh_rid_get_count(const int mesh_index, const int mesh_type_index) {
|
||||
int TerraChunkDefault::mesh_rid_get_count(const int mesh_index, const int mesh_type_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return 0;
|
||||
|
||||
@ -223,7 +223,7 @@ int VoxelChunkDefault::mesh_rid_get_count(const int mesh_index, const int mesh_t
|
||||
|
||||
return arr.size();
|
||||
}
|
||||
void VoxelChunkDefault::mesh_rids_clear(const int mesh_index, const int mesh_type_index) {
|
||||
void TerraChunkDefault::mesh_rids_clear(const int mesh_index, const int mesh_type_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return;
|
||||
|
||||
@ -234,7 +234,7 @@ void VoxelChunkDefault::mesh_rids_clear(const int mesh_index, const int mesh_typ
|
||||
|
||||
m.erase(mesh_type_index);
|
||||
}
|
||||
Array VoxelChunkDefault::meshes_get(const int mesh_index, const int mesh_type_index) {
|
||||
Array TerraChunkDefault::meshes_get(const int mesh_index, const int mesh_type_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return Array();
|
||||
|
||||
@ -250,7 +250,7 @@ Array VoxelChunkDefault::meshes_get(const int mesh_index, const int mesh_type_in
|
||||
|
||||
return v;
|
||||
}
|
||||
void VoxelChunkDefault::meshes_set(const int mesh_index, const int mesh_type_index, const Array &meshes) {
|
||||
void TerraChunkDefault::meshes_set(const int mesh_index, const int mesh_type_index, const Array &meshes) {
|
||||
if (!_rids.has(mesh_index))
|
||||
_rids[mesh_index] = Dictionary();
|
||||
|
||||
@ -259,7 +259,7 @@ void VoxelChunkDefault::meshes_set(const int mesh_index, const int mesh_type_ind
|
||||
m[mesh_type_index] = meshes;
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
bool VoxelChunkDefault::meshes_has(const int mesh_index, const int mesh_type_index) {
|
||||
bool TerraChunkDefault::meshes_has(const int mesh_index, const int mesh_type_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return false;
|
||||
|
||||
@ -271,11 +271,11 @@ bool VoxelChunkDefault::meshes_has(const int mesh_index, const int mesh_type_ind
|
||||
return true;
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::rids_clear() {
|
||||
void TerraChunkDefault::rids_clear() {
|
||||
_rids.clear();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::rids_free() {
|
||||
void TerraChunkDefault::rids_free() {
|
||||
List<Variant> keys;
|
||||
|
||||
_rids.get_key_list(&keys);
|
||||
@ -290,7 +290,7 @@ void VoxelChunkDefault::rids_free() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::meshes_create(const int mesh_index, const int mesh_count) {
|
||||
void TerraChunkDefault::meshes_create(const int mesh_index, const int mesh_count) {
|
||||
ERR_FAIL_COND(_voxel_world == NULL);
|
||||
ERR_FAIL_COND(!get_library().is_valid());
|
||||
|
||||
@ -329,7 +329,7 @@ void VoxelChunkDefault::meshes_create(const int mesh_index, const int mesh_count
|
||||
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
void VoxelChunkDefault::meshes_free(const int mesh_index) {
|
||||
void TerraChunkDefault::meshes_free(const int mesh_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return;
|
||||
|
||||
@ -364,7 +364,7 @@ void VoxelChunkDefault::meshes_free(const int mesh_index) {
|
||||
m.erase(MESH_TYPE_INDEX_MESH_INSTANCE);
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::colliders_create(const int mesh_index, const int layer_mask) {
|
||||
void TerraChunkDefault::colliders_create(const int mesh_index, const int layer_mask) {
|
||||
ERR_FAIL_COND(_voxel_world == NULL);
|
||||
ERR_FAIL_COND(PhysicsServer::get_singleton()->is_flushing_queries());
|
||||
//ERR_FAIL_COND(!get_voxel_world()->is_inside_tree());
|
||||
@ -399,7 +399,7 @@ void VoxelChunkDefault::colliders_create(const int mesh_index, const int layer_m
|
||||
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
void VoxelChunkDefault::colliders_create_area(const int mesh_index, const int layer_mask) {
|
||||
void TerraChunkDefault::colliders_create_area(const int mesh_index, const int layer_mask) {
|
||||
ERR_FAIL_COND(_voxel_world == NULL);
|
||||
ERR_FAIL_COND(PhysicsServer::get_singleton()->is_flushing_queries());
|
||||
|
||||
@ -440,7 +440,7 @@ void VoxelChunkDefault::colliders_create_area(const int mesh_index, const int la
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::colliders_free(const int mesh_index) {
|
||||
void TerraChunkDefault::colliders_free(const int mesh_index) {
|
||||
if (!_rids.has(mesh_index))
|
||||
return;
|
||||
|
||||
@ -465,12 +465,12 @@ void VoxelChunkDefault::colliders_free(const int mesh_index) {
|
||||
_rids[mesh_index] = m;
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::free_index(const int mesh_index) {
|
||||
void TerraChunkDefault::free_index(const int mesh_index) {
|
||||
meshes_free(mesh_index);
|
||||
colliders_free(mesh_index);
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::update_transforms() {
|
||||
void TerraChunkDefault::update_transforms() {
|
||||
RID empty_rid;
|
||||
Transform t = get_transform();
|
||||
|
||||
@ -522,16 +522,16 @@ void VoxelChunkDefault::update_transforms() {
|
||||
}
|
||||
|
||||
//Lights
|
||||
Ref<VoxelLight> VoxelChunkDefault::get_light(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _lights.size(), Ref<VoxelLight>());
|
||||
Ref<TerraLight> TerraChunkDefault::get_light(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _lights.size(), Ref<TerraLight>());
|
||||
|
||||
return _lights.get(index);
|
||||
}
|
||||
int VoxelChunkDefault::get_light_count() const {
|
||||
int TerraChunkDefault::get_light_count() const {
|
||||
return _lights.size();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::debug_mesh_allocate() {
|
||||
void TerraChunkDefault::debug_mesh_allocate() {
|
||||
if (_debug_mesh_rid == RID()) {
|
||||
_debug_mesh_rid = VisualServer::get_singleton()->mesh_create();
|
||||
}
|
||||
@ -547,7 +547,7 @@ void VoxelChunkDefault::debug_mesh_allocate() {
|
||||
VS::get_singleton()->instance_set_visible(_debug_mesh_instance, true);
|
||||
}
|
||||
}
|
||||
void VoxelChunkDefault::debug_mesh_free() {
|
||||
void TerraChunkDefault::debug_mesh_free() {
|
||||
if (_debug_mesh_instance != RID()) {
|
||||
VisualServer::get_singleton()->free(_debug_mesh_instance);
|
||||
}
|
||||
@ -556,25 +556,25 @@ void VoxelChunkDefault::debug_mesh_free() {
|
||||
VisualServer::get_singleton()->free(_debug_mesh_rid);
|
||||
}
|
||||
}
|
||||
bool VoxelChunkDefault::debug_mesh_has() {
|
||||
bool TerraChunkDefault::debug_mesh_has() {
|
||||
return _debug_mesh_rid != RID();
|
||||
}
|
||||
void VoxelChunkDefault::debug_mesh_clear() {
|
||||
void TerraChunkDefault::debug_mesh_clear() {
|
||||
if (_debug_mesh_rid != RID()) {
|
||||
VisualServer::get_singleton()->mesh_clear(_debug_mesh_rid);
|
||||
}
|
||||
}
|
||||
void VoxelChunkDefault::debug_mesh_array_clear() {
|
||||
void TerraChunkDefault::debug_mesh_array_clear() {
|
||||
_debug_mesh_array.resize(0);
|
||||
}
|
||||
void VoxelChunkDefault::debug_mesh_add_vertices_to(const PoolVector3Array &arr) {
|
||||
void TerraChunkDefault::debug_mesh_add_vertices_to(const PoolVector3Array &arr) {
|
||||
_debug_mesh_array.append_array(arr);
|
||||
|
||||
if (_debug_mesh_array.size() % 2 == 1) {
|
||||
_debug_mesh_array.append(_debug_mesh_array[_debug_mesh_array.size() - 1]);
|
||||
}
|
||||
}
|
||||
void VoxelChunkDefault::debug_mesh_send() {
|
||||
void TerraChunkDefault::debug_mesh_send() {
|
||||
debug_mesh_allocate();
|
||||
debug_mesh_clear();
|
||||
|
||||
@ -596,7 +596,7 @@ void VoxelChunkDefault::debug_mesh_send() {
|
||||
debug_mesh_array_clear();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::draw_cross_voxels(Vector3 pos) {
|
||||
void TerraChunkDefault::draw_cross_voxels(Vector3 pos) {
|
||||
pos *= _voxel_scale;
|
||||
|
||||
int size = _debug_mesh_array.size();
|
||||
@ -612,7 +612,7 @@ void VoxelChunkDefault::draw_cross_voxels(Vector3 pos) {
|
||||
_debug_mesh_array.set(size + 5, pos + Vector3(0.2, 0, 0));
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::draw_cross_voxels_fill(Vector3 pos, float fill) {
|
||||
void TerraChunkDefault::draw_cross_voxels_fill(Vector3 pos, float fill) {
|
||||
pos *= _voxel_scale;
|
||||
|
||||
int size = _debug_mesh_array.size();
|
||||
@ -628,7 +628,7 @@ void VoxelChunkDefault::draw_cross_voxels_fill(Vector3 pos, float fill) {
|
||||
_debug_mesh_array.set(size + 5, pos + Vector3(0.2 * fill, 0, 0));
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::draw_debug_voxels(int max, Color color) {
|
||||
void TerraChunkDefault::draw_debug_voxels(int max, Color color) {
|
||||
if (!debug_mesh_has()) {
|
||||
debug_mesh_allocate();
|
||||
}
|
||||
@ -646,13 +646,13 @@ void VoxelChunkDefault::draw_debug_voxels(int max, Color color) {
|
||||
for (int y = 0; y < sy; ++y) {
|
||||
for (int z = 0; z < sz; ++z) {
|
||||
for (int x = 0; x < sx; ++x) {
|
||||
int type = get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
int type = get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
|
||||
if (type == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
draw_cross_voxels_fill(Vector3(x, y, z), get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL) / 255.0 * get_voxel_scale() * 2.0);
|
||||
draw_cross_voxels_fill(Vector3(x, y, z), get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL) / 255.0 * get_voxel_scale() * 2.0);
|
||||
|
||||
++a;
|
||||
|
||||
@ -666,7 +666,7 @@ void VoxelChunkDefault::draw_debug_voxels(int max, Color color) {
|
||||
debug_mesh_send();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::draw_debug_voxel_lights() {
|
||||
void TerraChunkDefault::draw_debug_voxel_lights() {
|
||||
if (!debug_mesh_has()) {
|
||||
debug_mesh_allocate();
|
||||
}
|
||||
@ -676,7 +676,7 @@ void VoxelChunkDefault::draw_debug_voxel_lights() {
|
||||
//_debug_drawer->begin(Mesh::PrimitiveType::PRIMITIVE_LINES);
|
||||
|
||||
for (int i = 0; i < _lights.size(); ++i) {
|
||||
Ref<VoxelLight> v = _lights[i];
|
||||
Ref<TerraLight> v = _lights[i];
|
||||
|
||||
int pos_x = v->get_world_position_x() - (_size_x * _position_x);
|
||||
int pos_y = v->get_world_position_y() - (_size_y * _position_y);
|
||||
@ -688,7 +688,7 @@ void VoxelChunkDefault::draw_debug_voxel_lights() {
|
||||
debug_mesh_send();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::draw_debug_mdr_colliders() {
|
||||
void TerraChunkDefault::draw_debug_mdr_colliders() {
|
||||
if (!debug_mesh_has()) {
|
||||
debug_mesh_allocate();
|
||||
}
|
||||
@ -705,7 +705,7 @@ void VoxelChunkDefault::draw_debug_mdr_colliders() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_visibility_changed(bool visible) {
|
||||
void TerraChunkDefault::_visibility_changed(bool visible) {
|
||||
if (visible) {
|
||||
set_current_lod_level(_current_lod_level);
|
||||
return;
|
||||
@ -729,27 +729,27 @@ void VoxelChunkDefault::_visibility_changed(bool visible) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_exit_tree() {
|
||||
VoxelChunk::_exit_tree();
|
||||
void TerraChunkDefault::_exit_tree() {
|
||||
TerraChunk::_exit_tree();
|
||||
|
||||
rids_free();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_world_transform_changed() {
|
||||
VoxelChunk::_world_transform_changed();
|
||||
void TerraChunkDefault::_world_transform_changed() {
|
||||
TerraChunk::_world_transform_changed();
|
||||
|
||||
update_transforms();
|
||||
}
|
||||
|
||||
//Lights
|
||||
void VoxelChunkDefault::_bake_lights() {
|
||||
void TerraChunkDefault::_bake_lights() {
|
||||
clear_baked_lights();
|
||||
|
||||
for (int i = 0; i < _lights.size(); ++i) {
|
||||
bake_light(_lights.get(i));
|
||||
}
|
||||
}
|
||||
void VoxelChunkDefault::_bake_light(Ref<VoxelLight> light) {
|
||||
void TerraChunkDefault::_bake_light(Ref<TerraLight> light) {
|
||||
ERR_FAIL_COND(!light.is_valid());
|
||||
|
||||
Color color = light->get_color();
|
||||
@ -765,9 +765,9 @@ void VoxelChunkDefault::_bake_light(Ref<VoxelLight> light) {
|
||||
int64_t dsy = static_cast<int64_t>(_data_size_y);
|
||||
int64_t dsz = static_cast<int64_t>(_data_size_z);
|
||||
|
||||
uint8_t *channel_color_r = channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
uint8_t *channel_color_g = channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
uint8_t *channel_color_b = channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
uint8_t *channel_color_r = channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
uint8_t *channel_color_g = channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
uint8_t *channel_color_b = channel_get(TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
|
||||
ERR_FAIL_COND(channel_color_r == NULL || channel_color_g == NULL || channel_color_b == NULL);
|
||||
|
||||
@ -819,17 +819,17 @@ void VoxelChunkDefault::_bake_light(Ref<VoxelLight> light) {
|
||||
}
|
||||
}
|
||||
}
|
||||
void VoxelChunkDefault::_clear_baked_lights() {
|
||||
void TerraChunkDefault::_clear_baked_lights() {
|
||||
channel_fill(0, DEFAULT_CHANNEL_LIGHT_COLOR_R);
|
||||
channel_fill(0, DEFAULT_CHANNEL_LIGHT_COLOR_G);
|
||||
channel_fill(0, DEFAULT_CHANNEL_LIGHT_COLOR_B);
|
||||
}
|
||||
void VoxelChunkDefault::_world_light_added(const Ref<VoxelLight> &light) {
|
||||
void TerraChunkDefault::_world_light_added(const Ref<TerraLight> &light) {
|
||||
_lights.push_back(light);
|
||||
|
||||
set_lights_dirty(true);
|
||||
}
|
||||
void VoxelChunkDefault::_world_light_removed(const Ref<VoxelLight> &light) {
|
||||
void TerraChunkDefault::_world_light_removed(const Ref<TerraLight> &light) {
|
||||
int index = _lights.find(light);
|
||||
|
||||
if (index != -1) {
|
||||
@ -839,11 +839,11 @@ void VoxelChunkDefault::_world_light_removed(const Ref<VoxelLight> &light) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::free_chunk() {
|
||||
void TerraChunkDefault::free_chunk() {
|
||||
rids_free();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_finalize_build() {
|
||||
void TerraChunkDefault::_finalize_build() {
|
||||
ERR_FAIL_COND(!_library.is_valid());
|
||||
|
||||
#if TOOLS_ENABLED
|
||||
@ -857,7 +857,7 @@ void VoxelChunkDefault::_finalize_build() {
|
||||
call_deferred("update_transforms");
|
||||
}
|
||||
|
||||
VoxelChunkDefault::VoxelChunkDefault() {
|
||||
TerraChunkDefault::TerraChunkDefault() {
|
||||
_abort_build = false;
|
||||
|
||||
_enabled = true;
|
||||
@ -868,7 +868,7 @@ VoxelChunkDefault::VoxelChunkDefault() {
|
||||
_build_flags = BUILD_FLAG_CREATE_COLLIDER | BUILD_FLAG_CREATE_LODS;
|
||||
}
|
||||
|
||||
VoxelChunkDefault::~VoxelChunkDefault() {
|
||||
TerraChunkDefault::~TerraChunkDefault() {
|
||||
_abort_build = true;
|
||||
|
||||
_lights.clear();
|
||||
@ -876,92 +876,92 @@ VoxelChunkDefault::~VoxelChunkDefault() {
|
||||
debug_mesh_free();
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_channel_setup() {
|
||||
void TerraChunkDefault::_channel_setup() {
|
||||
channel_set_count(MAX_DEFAULT_CHANNELS);
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &VoxelChunkDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &VoxelChunkDefault::set_build_flags);
|
||||
void TerraChunkDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &TerraChunkDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &TerraChunkDefault::set_build_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, BINDING_STRING_BUILD_FLAGS, 0), "set_build_flags", "get_build_flags");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_lights_dirty"), &VoxelChunkDefault::get_lights_dirty);
|
||||
ClassDB::bind_method(D_METHOD("set_lights_dirty", "value"), &VoxelChunkDefault::set_lights_dirty);
|
||||
ClassDB::bind_method(D_METHOD("get_lights_dirty"), &TerraChunkDefault::get_lights_dirty);
|
||||
ClassDB::bind_method(D_METHOD("set_lights_dirty", "value"), &TerraChunkDefault::set_lights_dirty);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "lights_dirty", PROPERTY_HINT_NONE, "", 0), "set_lights_dirty", "get_lights_dirty");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_lod_num"), &VoxelChunkDefault::get_lod_num);
|
||||
ClassDB::bind_method(D_METHOD("set_lod_num"), &VoxelChunkDefault::set_lod_num);
|
||||
ClassDB::bind_method(D_METHOD("get_lod_num"), &TerraChunkDefault::get_lod_num);
|
||||
ClassDB::bind_method(D_METHOD("set_lod_num"), &TerraChunkDefault::set_lod_num);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "lod_num", PROPERTY_HINT_NONE, "", 0), "set_lod_num", "get_lod_num");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_current_lod_level"), &VoxelChunkDefault::get_current_lod_level);
|
||||
ClassDB::bind_method(D_METHOD("set_current_lod_level"), &VoxelChunkDefault::set_current_lod_level);
|
||||
ClassDB::bind_method(D_METHOD("get_current_lod_level"), &TerraChunkDefault::get_current_lod_level);
|
||||
ClassDB::bind_method(D_METHOD("set_current_lod_level"), &TerraChunkDefault::set_current_lod_level);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "current_lod_level"), "set_current_lod_level", "get_current_lod_level");
|
||||
|
||||
//Meshes
|
||||
ClassDB::bind_method(D_METHOD("get_mesh_rids"), &VoxelChunkDefault::mesh_rids_get);
|
||||
ClassDB::bind_method(D_METHOD("set_mesh_rids", "rids"), &VoxelChunkDefault::mesh_rids_set);
|
||||
ClassDB::bind_method(D_METHOD("clear_rids"), &VoxelChunkDefault::rids_clear);
|
||||
ClassDB::bind_method(D_METHOD("get_mesh_rids"), &TerraChunkDefault::mesh_rids_get);
|
||||
ClassDB::bind_method(D_METHOD("set_mesh_rids", "rids"), &TerraChunkDefault::mesh_rids_set);
|
||||
ClassDB::bind_method(D_METHOD("clear_rids"), &TerraChunkDefault::rids_clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get", "mesh_index", "mesh_type_index"), &VoxelChunkDefault::mesh_rid_get);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_set", "mesh_index", "mesh_type_index", "value"), &VoxelChunkDefault::mesh_rid_set);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get_index", "mesh_index", "mesh_type_index", "index"), &VoxelChunkDefault::mesh_rid_get_index);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_set_index", "mesh_index", "mesh_type_index", "index", "value"), &VoxelChunkDefault::mesh_rid_set_index);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get_count", "mesh_index", "mesh_type_index"), &VoxelChunkDefault::mesh_rid_get_count);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rids_clear", "mesh_index", "mesh_type_index"), &VoxelChunkDefault::mesh_rids_clear);
|
||||
ClassDB::bind_method(D_METHOD("meshes_get", "mesh_index", "mesh_type_index"), &VoxelChunkDefault::meshes_get);
|
||||
ClassDB::bind_method(D_METHOD("meshes_set", "mesh_index", "mesh_type_index", "meshes"), &VoxelChunkDefault::meshes_set);
|
||||
ClassDB::bind_method(D_METHOD("meshes_has", "mesh_index", "mesh_type_index"), &VoxelChunkDefault::meshes_has);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get", "mesh_index", "mesh_type_index"), &TerraChunkDefault::mesh_rid_get);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_set", "mesh_index", "mesh_type_index", "value"), &TerraChunkDefault::mesh_rid_set);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get_index", "mesh_index", "mesh_type_index", "index"), &TerraChunkDefault::mesh_rid_get_index);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_set_index", "mesh_index", "mesh_type_index", "index", "value"), &TerraChunkDefault::mesh_rid_set_index);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rid_get_count", "mesh_index", "mesh_type_index"), &TerraChunkDefault::mesh_rid_get_count);
|
||||
ClassDB::bind_method(D_METHOD("mesh_rids_clear", "mesh_index", "mesh_type_index"), &TerraChunkDefault::mesh_rids_clear);
|
||||
ClassDB::bind_method(D_METHOD("meshes_get", "mesh_index", "mesh_type_index"), &TerraChunkDefault::meshes_get);
|
||||
ClassDB::bind_method(D_METHOD("meshes_set", "mesh_index", "mesh_type_index", "meshes"), &TerraChunkDefault::meshes_set);
|
||||
ClassDB::bind_method(D_METHOD("meshes_has", "mesh_index", "mesh_type_index"), &TerraChunkDefault::meshes_has);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("rids_free"), &VoxelChunkDefault::rids_free);
|
||||
ClassDB::bind_method(D_METHOD("free_index", "mesh_index"), &VoxelChunkDefault::free_index);
|
||||
ClassDB::bind_method(D_METHOD("rids_free"), &TerraChunkDefault::rids_free);
|
||||
ClassDB::bind_method(D_METHOD("free_index", "mesh_index"), &TerraChunkDefault::free_index);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("meshes_create", "mesh_index", "mesh_count"), &VoxelChunkDefault::meshes_create);
|
||||
ClassDB::bind_method(D_METHOD("meshes_free", "mesh_index"), &VoxelChunkDefault::meshes_free);
|
||||
ClassDB::bind_method(D_METHOD("meshes_create", "mesh_index", "mesh_count"), &TerraChunkDefault::meshes_create);
|
||||
ClassDB::bind_method(D_METHOD("meshes_free", "mesh_index"), &TerraChunkDefault::meshes_free);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("create_colliders", "mesh_index", "layer_mask"), &VoxelChunkDefault::colliders_create, DEFVAL(1));
|
||||
ClassDB::bind_method(D_METHOD("free_colliders", "mesh_index"), &VoxelChunkDefault::colliders_free);
|
||||
ClassDB::bind_method(D_METHOD("create_colliders", "mesh_index", "layer_mask"), &TerraChunkDefault::colliders_create, DEFVAL(1));
|
||||
ClassDB::bind_method(D_METHOD("free_colliders", "mesh_index"), &TerraChunkDefault::colliders_free);
|
||||
|
||||
//Lights
|
||||
ClassDB::bind_method(D_METHOD("get_light", "index"), &VoxelChunkDefault::get_light);
|
||||
ClassDB::bind_method(D_METHOD("get_light_count"), &VoxelChunkDefault::get_light_count);
|
||||
ClassDB::bind_method(D_METHOD("get_light", "index"), &TerraChunkDefault::get_light);
|
||||
ClassDB::bind_method(D_METHOD("get_light_count"), &TerraChunkDefault::get_light_count);
|
||||
|
||||
//Debug
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_allocate"), &VoxelChunkDefault::debug_mesh_allocate);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_free"), &VoxelChunkDefault::debug_mesh_free);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_allocate"), &TerraChunkDefault::debug_mesh_allocate);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_free"), &TerraChunkDefault::debug_mesh_free);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_has"), &VoxelChunkDefault::debug_mesh_has);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_clear"), &VoxelChunkDefault::debug_mesh_clear);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_array_clear"), &VoxelChunkDefault::debug_mesh_array_clear);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_add_vertices_to", "arr"), &VoxelChunkDefault::debug_mesh_add_vertices_to);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_send"), &VoxelChunkDefault::debug_mesh_send);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_has"), &TerraChunkDefault::debug_mesh_has);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_clear"), &TerraChunkDefault::debug_mesh_clear);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_array_clear"), &TerraChunkDefault::debug_mesh_array_clear);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_add_vertices_to", "arr"), &TerraChunkDefault::debug_mesh_add_vertices_to);
|
||||
ClassDB::bind_method(D_METHOD("debug_mesh_send"), &TerraChunkDefault::debug_mesh_send);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("draw_cross_voxels", "max"), &VoxelChunkDefault::draw_cross_voxels);
|
||||
ClassDB::bind_method(D_METHOD("draw_cross_voxels_fill", "max", "fill"), &VoxelChunkDefault::draw_cross_voxels_fill);
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_voxels", "max", "color"), &VoxelChunkDefault::draw_debug_voxels, DEFVAL(Color(1, 1, 1)));
|
||||
ClassDB::bind_method(D_METHOD("draw_cross_voxels", "max"), &TerraChunkDefault::draw_cross_voxels);
|
||||
ClassDB::bind_method(D_METHOD("draw_cross_voxels_fill", "max", "fill"), &TerraChunkDefault::draw_cross_voxels_fill);
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_voxels", "max", "color"), &TerraChunkDefault::draw_debug_voxels, DEFVAL(Color(1, 1, 1)));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_voxel_lights"), &VoxelChunkDefault::draw_debug_voxel_lights);
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_mdr_colliders"), &VoxelChunkDefault::draw_debug_mdr_colliders);
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_voxel_lights"), &TerraChunkDefault::draw_debug_voxel_lights);
|
||||
ClassDB::bind_method(D_METHOD("draw_debug_mdr_colliders"), &TerraChunkDefault::draw_debug_mdr_colliders);
|
||||
|
||||
//Free
|
||||
ClassDB::bind_method(D_METHOD("free_chunk"), &VoxelChunkDefault::free_chunk);
|
||||
ClassDB::bind_method(D_METHOD("free_chunk"), &TerraChunkDefault::free_chunk);
|
||||
|
||||
//etc
|
||||
ClassDB::bind_method(D_METHOD("emit_build_finished"), &VoxelChunkDefault::emit_build_finished);
|
||||
ClassDB::bind_method(D_METHOD("emit_build_finished"), &TerraChunkDefault::emit_build_finished);
|
||||
|
||||
//virtuals
|
||||
ClassDB::bind_method(D_METHOD("_channel_setup"), &VoxelChunkDefault::_channel_setup);
|
||||
ClassDB::bind_method(D_METHOD("_channel_setup"), &TerraChunkDefault::_channel_setup);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_visibility_changed", "visible"), &VoxelChunkDefault::_visibility_changed);
|
||||
ClassDB::bind_method(D_METHOD("_visibility_changed", "visible"), &TerraChunkDefault::_visibility_changed);
|
||||
|
||||
//lights
|
||||
ClassDB::bind_method(D_METHOD("_bake_lights"), &VoxelChunkDefault::_bake_lights);
|
||||
ClassDB::bind_method(D_METHOD("_bake_light", "light"), &VoxelChunkDefault::_bake_light);
|
||||
ClassDB::bind_method(D_METHOD("_clear_baked_lights"), &VoxelChunkDefault::_clear_baked_lights);
|
||||
ClassDB::bind_method(D_METHOD("_bake_lights"), &TerraChunkDefault::_bake_lights);
|
||||
ClassDB::bind_method(D_METHOD("_bake_light", "light"), &TerraChunkDefault::_bake_light);
|
||||
ClassDB::bind_method(D_METHOD("_clear_baked_lights"), &TerraChunkDefault::_clear_baked_lights);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_world_light_added", "light"), &VoxelChunkDefault::_world_light_added);
|
||||
ClassDB::bind_method(D_METHOD("_world_light_removed", "light"), &VoxelChunkDefault::_world_light_removed);
|
||||
ClassDB::bind_method(D_METHOD("_world_light_added", "light"), &TerraChunkDefault::_world_light_added);
|
||||
ClassDB::bind_method(D_METHOD("_world_light_removed", "light"), &TerraChunkDefault::_world_light_removed);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_finalize_build"), &VoxelChunkDefault::_finalize_build);
|
||||
ClassDB::bind_method(D_METHOD("_finalize_build"), &TerraChunkDefault::_finalize_build);
|
||||
|
||||
BIND_ENUM_CONSTANT(DEFAULT_CHANNEL_TYPE);
|
||||
BIND_ENUM_CONSTANT(DEFAULT_CHANNEL_ISOLEVEL);
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_DEFAULT_H
|
||||
#define VOXEL_CHUNK_DEFAULT_H
|
||||
#ifndef TERRA_CHUNK_DEFAULT_H
|
||||
#define TERRA_CHUNK_DEFAULT_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -51,11 +51,11 @@ SOFTWARE.
|
||||
#include "../../library/voxel_surface.h"
|
||||
#include "../../library/voxelman_library.h"
|
||||
|
||||
class VoxelWorld;
|
||||
class VoxelJob;
|
||||
class TerraWorld;
|
||||
class TerraJob;
|
||||
|
||||
class VoxelChunkDefault : public VoxelChunk {
|
||||
GDCLASS(VoxelChunkDefault, VoxelChunk);
|
||||
class TerraChunkDefault : public TerraChunk {
|
||||
GDCLASS(TerraChunkDefault, TerraChunk);
|
||||
|
||||
_THREAD_SAFE_CLASS_
|
||||
|
||||
@ -150,7 +150,7 @@ public:
|
||||
void update_transforms();
|
||||
|
||||
//Lights
|
||||
Ref<VoxelLight> get_light(const int index);
|
||||
Ref<TerraLight> get_light(const int index);
|
||||
int get_light_count() const;
|
||||
|
||||
//Debug
|
||||
@ -184,8 +184,8 @@ public:
|
||||
|
||||
void _finalize_build();
|
||||
|
||||
VoxelChunkDefault();
|
||||
~VoxelChunkDefault();
|
||||
TerraChunkDefault();
|
||||
~TerraChunkDefault();
|
||||
|
||||
protected:
|
||||
virtual void _channel_setup();
|
||||
@ -197,10 +197,10 @@ protected:
|
||||
|
||||
//lights
|
||||
virtual void _bake_lights();
|
||||
virtual void _bake_light(Ref<VoxelLight> light);
|
||||
virtual void _bake_light(Ref<TerraLight> light);
|
||||
virtual void _clear_baked_lights();
|
||||
virtual void _world_light_added(const Ref<VoxelLight> &light);
|
||||
virtual void _world_light_removed(const Ref<VoxelLight> &light);
|
||||
virtual void _world_light_added(const Ref<TerraLight> &light);
|
||||
virtual void _world_light_removed(const Ref<TerraLight> &light);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
@ -222,10 +222,10 @@ protected:
|
||||
RID _debug_mesh_instance;
|
||||
PoolVector3Array _debug_mesh_array;
|
||||
|
||||
Vector<Ref<VoxelLight> > _lights;
|
||||
Vector<Ref<TerraLight> > _lights;
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelChunkDefault::DefaultChannels);
|
||||
VARIANT_ENUM_CAST(VoxelChunkDefault::BuildFlags);
|
||||
VARIANT_ENUM_CAST(TerraChunkDefault::DefaultChannels);
|
||||
VARIANT_ENUM_CAST(TerraChunkDefault::BuildFlags);
|
||||
|
||||
#endif
|
||||
|
@ -31,14 +31,14 @@ SOFTWARE.
|
||||
#include "../jobs/voxel_prop_job.h"
|
||||
#include "../jobs/voxel_terrarin_job.h"
|
||||
|
||||
_FORCE_INLINE_ int VoxelWorldDefault::get_build_flags() const {
|
||||
_FORCE_INLINE_ int TerraWorldDefault::get_build_flags() const {
|
||||
return _build_flags;
|
||||
}
|
||||
_FORCE_INLINE_ void VoxelWorldDefault::set_build_flags(const int flags) {
|
||||
_FORCE_INLINE_ void TerraWorldDefault::set_build_flags(const int flags) {
|
||||
_build_flags = flags;
|
||||
|
||||
for (int i = 0; i < chunk_get_count(); ++i) {
|
||||
Ref<VoxelChunkDefault> c = chunk_get_index(i);
|
||||
Ref<TerraChunkDefault> c = chunk_get_index(i);
|
||||
|
||||
if (!c.is_valid())
|
||||
continue;
|
||||
@ -47,32 +47,32 @@ _FORCE_INLINE_ void VoxelWorldDefault::set_build_flags(const int flags) {
|
||||
}
|
||||
}
|
||||
|
||||
float VoxelWorldDefault::get_lod_update_interval() const {
|
||||
float TerraWorldDefault::get_lod_update_interval() const {
|
||||
return _lod_update_interval;
|
||||
}
|
||||
void VoxelWorldDefault::set_lod_update_interval(const float value) {
|
||||
void TerraWorldDefault::set_lod_update_interval(const float value) {
|
||||
_lod_update_interval = value;
|
||||
}
|
||||
|
||||
int VoxelWorldDefault::get_num_lods() const {
|
||||
int TerraWorldDefault::get_num_lods() const {
|
||||
return _num_lods;
|
||||
}
|
||||
void VoxelWorldDefault::set_num_lods(const int value) {
|
||||
void TerraWorldDefault::set_num_lods(const int value) {
|
||||
_num_lods = value;
|
||||
}
|
||||
|
||||
void VoxelWorldDefault::update_lods() {
|
||||
void TerraWorldDefault::update_lods() {
|
||||
call("_update_lods");
|
||||
}
|
||||
|
||||
int VoxelWorldDefault::get_chunk_lod_falloff() const {
|
||||
int TerraWorldDefault::get_chunk_lod_falloff() const {
|
||||
return _chunk_lod_falloff;
|
||||
}
|
||||
void VoxelWorldDefault::set_chunk_lod_falloff(const int value) {
|
||||
void TerraWorldDefault::set_chunk_lod_falloff(const int value) {
|
||||
_chunk_lod_falloff = value;
|
||||
}
|
||||
|
||||
PoolColorArray VoxelWorldDefault::get_vertex_colors(const Transform &transform, const PoolVector3Array &vertices, const float base_light_value, const float ao_strength) {
|
||||
PoolColorArray TerraWorldDefault::get_vertex_colors(const Transform &transform, const PoolVector3Array &vertices, const float base_light_value, const float ao_strength) {
|
||||
PoolColorArray arr;
|
||||
arr.resize(vertices.size());
|
||||
|
||||
@ -102,16 +102,16 @@ PoolColorArray VoxelWorldDefault::get_vertex_colors(const Transform &transform,
|
||||
bz += get_chunk_size_z();
|
||||
}
|
||||
|
||||
Ref<VoxelChunk> chunk = chunk_get(x, y, z);
|
||||
Ref<TerraChunk> chunk = chunk_get(x, y, z);
|
||||
|
||||
if (chunk.is_valid()) {
|
||||
Color light = Color(
|
||||
chunk->get_voxel(bx, by, bz, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(bx, by, bz, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(bx, by, bz, VoxelChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
chunk->get_voxel(bx, by, bz, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R) / 255.0,
|
||||
chunk->get_voxel(bx, by, bz, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G) / 255.0,
|
||||
chunk->get_voxel(bx, by, bz, TerraChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B) / 255.0);
|
||||
|
||||
float ao = (chunk->get_voxel(bx, by, bz, VoxelChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * ao_strength;
|
||||
float rao = chunk->get_voxel(bx, by, bz, VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
float ao = (chunk->get_voxel(bx, by, bz, TerraChunkDefault::DEFAULT_CHANNEL_AO) / 255.0) * ao_strength;
|
||||
float rao = chunk->get_voxel(bx, by, bz, TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO) / 255.0;
|
||||
|
||||
ao += rao;
|
||||
|
||||
@ -136,7 +136,7 @@ PoolColorArray VoxelWorldDefault::get_vertex_colors(const Transform &transform,
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelWorldDefault::_update_lods() {
|
||||
void TerraWorldDefault::_update_lods() {
|
||||
if (!get_player() || !INSTANCE_VALIDATE(get_player())) {
|
||||
return;
|
||||
}
|
||||
@ -151,7 +151,7 @@ void VoxelWorldDefault::_update_lods() {
|
||||
int ppz = int(ppos.z / get_chunk_size_z() / get_voxel_scale());
|
||||
|
||||
for (int i = 0; i < chunk_get_count(); ++i) {
|
||||
Ref<VoxelChunkDefault> c = chunk_get_index(i);
|
||||
Ref<TerraChunkDefault> c = chunk_get_index(i);
|
||||
|
||||
if (!c.is_valid())
|
||||
continue;
|
||||
@ -172,79 +172,79 @@ void VoxelWorldDefault::_update_lods() {
|
||||
}
|
||||
}
|
||||
|
||||
Ref<VoxelChunk> VoxelWorldDefault::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||
Ref<TerraChunk> TerraWorldDefault::_create_chunk(int x, int y, int z, Ref<TerraChunk> chunk) {
|
||||
if (!chunk.is_valid()) {
|
||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkDefault));
|
||||
chunk = Ref<TerraChunk>(memnew(TerraChunkDefault));
|
||||
}
|
||||
|
||||
if (chunk->job_get_count() == 0) {
|
||||
Ref<VoxelTerrarinJob> tj;
|
||||
Ref<TerraTerrarinJob> tj;
|
||||
tj.instance();
|
||||
|
||||
Ref<VoxelLightJob> lj;
|
||||
Ref<TerraLightJob> lj;
|
||||
lj.instance();
|
||||
|
||||
Ref<VoxelPropJob> pj;
|
||||
Ref<TerraPropJob> pj;
|
||||
pj.instance();
|
||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherDefault)));
|
||||
pj->set_prop_mesher(Ref<TerraMesher>(memnew(TerraMesherDefault)));
|
||||
|
||||
chunk->job_add(lj);
|
||||
chunk->job_add(tj);
|
||||
chunk->job_add(pj);
|
||||
}
|
||||
|
||||
Ref<VoxelChunkDefault> vcd = chunk;
|
||||
Ref<TerraChunkDefault> vcd = chunk;
|
||||
|
||||
if (vcd.is_valid()) {
|
||||
vcd->set_build_flags(_build_flags);
|
||||
vcd->set_lod_num(_num_lods);
|
||||
}
|
||||
|
||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||
return TerraWorld::_create_chunk(x, y, z, chunk);
|
||||
}
|
||||
|
||||
void VoxelWorldDefault::_chunk_added(Ref<VoxelChunk> chunk) {
|
||||
Ref<VoxelChunkDefault> c = chunk;
|
||||
void TerraWorldDefault::_chunk_added(Ref<TerraChunk> chunk) {
|
||||
Ref<TerraChunkDefault> c = chunk;
|
||||
|
||||
if (c.is_valid()) {
|
||||
c->set_build_flags(_build_flags);
|
||||
}
|
||||
}
|
||||
|
||||
int VoxelWorldDefault::_get_channel_index_info(const VoxelWorld::ChannelTypeInfo channel_type) {
|
||||
int TerraWorldDefault::_get_channel_index_info(const TerraWorld::ChannelTypeInfo channel_type) {
|
||||
switch (channel_type) {
|
||||
case CHANNEL_TYPE_INFO_TYPE:
|
||||
return VoxelChunkDefault::DEFAULT_CHANNEL_TYPE;
|
||||
return TerraChunkDefault::DEFAULT_CHANNEL_TYPE;
|
||||
case CHANNEL_TYPE_INFO_ISOLEVEL:
|
||||
return VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL;
|
||||
return TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL;
|
||||
case CHANNEL_TYPE_INFO_LIQUID_FLOW:
|
||||
return VoxelChunkDefault::DEFAULT_CHANNEL_LIQUID_FLOW;
|
||||
return TerraChunkDefault::DEFAULT_CHANNEL_LIQUID_FLOW;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
VoxelWorldDefault::VoxelWorldDefault() {
|
||||
TerraWorldDefault::TerraWorldDefault() {
|
||||
_chunk_lod_falloff = 2;
|
||||
_lod_update_timer = 0;
|
||||
_lod_update_interval = 0.5;
|
||||
_build_flags = VoxelChunkDefault::BUILD_FLAG_CREATE_COLLIDER | VoxelChunkDefault::BUILD_FLAG_CREATE_LODS;
|
||||
_build_flags = TerraChunkDefault::BUILD_FLAG_CREATE_COLLIDER | TerraChunkDefault::BUILD_FLAG_CREATE_LODS;
|
||||
_num_lods = 4;
|
||||
|
||||
set_data_margin_start(1);
|
||||
set_data_margin_end(1);
|
||||
}
|
||||
|
||||
VoxelWorldDefault ::~VoxelWorldDefault() {
|
||||
TerraWorldDefault ::~TerraWorldDefault() {
|
||||
}
|
||||
|
||||
/*
|
||||
void VoxelWorldDefault::_notification(int p_what) {
|
||||
VoxelWorld::_notification(p_what);
|
||||
void TerraWorldDefault::_notification(int p_what) {
|
||||
TerraWorld::_notification(p_what);
|
||||
|
||||
switch (p_what) {
|
||||
case NOTIFICATION_INTERNAL_PROCESS: {
|
||||
if ((get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_LODS) == 0)
|
||||
if ((get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_LODS) == 0)
|
||||
return;
|
||||
|
||||
if (!get_player()) {
|
||||
@ -267,28 +267,28 @@ void VoxelWorldDefault::_notification(int p_what) {
|
||||
}
|
||||
}*/
|
||||
|
||||
void VoxelWorldDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_chunk_added", "chunk"), &VoxelWorldDefault::_chunk_added);
|
||||
void TerraWorldDefault::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_chunk_added", "chunk"), &TerraWorldDefault::_chunk_added);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &VoxelWorldDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &VoxelWorldDefault::set_build_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, VoxelChunkDefault::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &TerraWorldDefault::get_build_flags);
|
||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &TerraWorldDefault::set_build_flags);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, TerraChunkDefault::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_lod_update_interval"), &VoxelWorldDefault::get_lod_update_interval);
|
||||
ClassDB::bind_method(D_METHOD("set_lod_update_interval", "value"), &VoxelWorldDefault::set_lod_update_interval);
|
||||
ClassDB::bind_method(D_METHOD("get_lod_update_interval"), &TerraWorldDefault::get_lod_update_interval);
|
||||
ClassDB::bind_method(D_METHOD("set_lod_update_interval", "value"), &TerraWorldDefault::set_lod_update_interval);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "lod_update_interval"), "set_lod_update_interval", "get_lod_update_interval");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_chunk_lod_falloff"), &VoxelWorldDefault::get_chunk_lod_falloff);
|
||||
ClassDB::bind_method(D_METHOD("set_chunk_lod_falloff", "value"), &VoxelWorldDefault::set_chunk_lod_falloff);
|
||||
ClassDB::bind_method(D_METHOD("get_chunk_lod_falloff"), &TerraWorldDefault::get_chunk_lod_falloff);
|
||||
ClassDB::bind_method(D_METHOD("set_chunk_lod_falloff", "value"), &TerraWorldDefault::set_chunk_lod_falloff);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "chunk_lod_falloff"), "set_chunk_lod_falloff", "get_chunk_lod_falloff");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_num_lods"), &VoxelWorldDefault::get_num_lods);
|
||||
ClassDB::bind_method(D_METHOD("set_num_lods", "value"), &VoxelWorldDefault::set_num_lods);
|
||||
ClassDB::bind_method(D_METHOD("get_num_lods"), &TerraWorldDefault::get_num_lods);
|
||||
ClassDB::bind_method(D_METHOD("set_num_lods", "value"), &TerraWorldDefault::set_num_lods);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "num_lods"), "set_num_lods", "get_num_lods");
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_update_lods"));
|
||||
ClassDB::bind_method(D_METHOD("update_lods"), &VoxelWorldDefault::update_lods);
|
||||
ClassDB::bind_method(D_METHOD("_update_lods"), &VoxelWorldDefault::_update_lods);
|
||||
ClassDB::bind_method(D_METHOD("update_lods"), &TerraWorldDefault::update_lods);
|
||||
ClassDB::bind_method(D_METHOD("_update_lods"), &TerraWorldDefault::_update_lods);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_vertex_colors", "transform", "vertices", "base_light_value", "ao_strength"), &VoxelWorldDefault::get_vertex_colors, DEFVAL(0.45), DEFVAL(0.2));
|
||||
ClassDB::bind_method(D_METHOD("get_vertex_colors", "transform", "vertices", "base_light_value", "ao_strength"), &TerraWorldDefault::get_vertex_colors, DEFVAL(0.45), DEFVAL(0.2));
|
||||
}
|
@ -20,13 +20,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_DEFAULT_H
|
||||
#define VOXEL_WORLD_DEFAULT_H
|
||||
#ifndef TERRA_WORLD_DEFAULT_H
|
||||
#define TERRA_WORLD_DEFAULT_H
|
||||
|
||||
#include "../voxel_world.h"
|
||||
|
||||
class VoxelWorldDefault : public VoxelWorld {
|
||||
GDCLASS(VoxelWorldDefault, VoxelWorld);
|
||||
class TerraWorldDefault : public TerraWorld {
|
||||
GDCLASS(TerraWorldDefault, TerraWorld);
|
||||
|
||||
public:
|
||||
int get_build_flags() const;
|
||||
@ -45,13 +45,13 @@ public:
|
||||
|
||||
PoolColorArray get_vertex_colors(const Transform &transform, const PoolVector3Array &vertices, const float base_light_value = 0.45, const float ao_strength = 0.2);
|
||||
|
||||
VoxelWorldDefault();
|
||||
~VoxelWorldDefault();
|
||||
TerraWorldDefault();
|
||||
~TerraWorldDefault();
|
||||
|
||||
protected:
|
||||
void _update_lods();
|
||||
Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
virtual void _chunk_added(Ref<VoxelChunk> chunk);
|
||||
Ref<TerraChunk> _create_chunk(int x, int y, int z, Ref<TerraChunk> p_chunk);
|
||||
virtual void _chunk_added(Ref<TerraChunk> chunk);
|
||||
int _get_channel_index_info(const ChannelTypeInfo channel_type);
|
||||
|
||||
//virtual void _notification(int p_what);
|
||||
|
@ -26,52 +26,52 @@ SOFTWARE.
|
||||
|
||||
#include "../../../opensimplex/open_simplex_noise.h"
|
||||
|
||||
const String VoxelJob::BINDING_STRING_ACTIVE_BUILD_PHASE_TYPE = "Normal,Process,Physics Process";
|
||||
const String TerraJob::BINDING_STRING_ACTIVE_BUILD_PHASE_TYPE = "Normal,Process,Physics Process";
|
||||
|
||||
VoxelJob::ActiveBuildPhaseType VoxelJob::get_build_phase_type() {
|
||||
TerraJob::ActiveBuildPhaseType TerraJob::get_build_phase_type() {
|
||||
return _build_phase_type;
|
||||
}
|
||||
void VoxelJob::set_build_phase_type(VoxelJob::ActiveBuildPhaseType build_phase_type) {
|
||||
void TerraJob::set_build_phase_type(TerraJob::ActiveBuildPhaseType build_phase_type) {
|
||||
_build_phase_type = build_phase_type;
|
||||
}
|
||||
|
||||
void VoxelJob::set_chunk(const Ref<VoxelChunk> &chunk) {
|
||||
void TerraJob::set_chunk(const Ref<TerraChunk> &chunk) {
|
||||
_chunk = chunk;
|
||||
|
||||
_in_tree = true;
|
||||
}
|
||||
|
||||
int VoxelJob::get_phase() {
|
||||
int TerraJob::get_phase() {
|
||||
return _phase;
|
||||
}
|
||||
void VoxelJob::set_phase(const int phase) {
|
||||
void TerraJob::set_phase(const int phase) {
|
||||
_phase = phase;
|
||||
}
|
||||
void VoxelJob::next_phase() {
|
||||
void TerraJob::next_phase() {
|
||||
++_phase;
|
||||
}
|
||||
|
||||
bool VoxelJob::get_build_done() {
|
||||
bool TerraJob::get_build_done() {
|
||||
return _build_done;
|
||||
}
|
||||
void VoxelJob::set_build_done(const bool val) {
|
||||
void TerraJob::set_build_done(const bool val) {
|
||||
_build_done = val;
|
||||
}
|
||||
|
||||
void VoxelJob::next_job() {
|
||||
void TerraJob::next_job() {
|
||||
_chunk->job_next();
|
||||
set_build_done(true);
|
||||
}
|
||||
|
||||
void VoxelJob::reset() {
|
||||
void TerraJob::reset() {
|
||||
call("_reset");
|
||||
}
|
||||
void VoxelJob::_reset() {
|
||||
void TerraJob::_reset() {
|
||||
_build_done = false;
|
||||
_phase = 0;
|
||||
}
|
||||
|
||||
void VoxelJob::_execute() {
|
||||
void TerraJob::_execute() {
|
||||
|
||||
ActiveBuildPhaseType origpt = _build_phase_type;
|
||||
|
||||
@ -84,25 +84,25 @@ void VoxelJob::_execute() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelJob::execute_phase() {
|
||||
void TerraJob::execute_phase() {
|
||||
call("_execute_phase");
|
||||
}
|
||||
|
||||
void VoxelJob::_execute_phase() {
|
||||
void TerraJob::_execute_phase() {
|
||||
next_job();
|
||||
}
|
||||
|
||||
void VoxelJob::process(const float delta) {
|
||||
void TerraJob::process(const float delta) {
|
||||
if (has_method("_process"))
|
||||
call("_process", delta);
|
||||
}
|
||||
void VoxelJob::physics_process(const float delta) {
|
||||
void TerraJob::physics_process(const float delta) {
|
||||
if (has_method("_physics_process"))
|
||||
call("_physics_process", delta);
|
||||
}
|
||||
|
||||
//Data Management functions
|
||||
void VoxelJob::generate_ao() {
|
||||
void TerraJob::generate_ao() {
|
||||
ERR_FAIL_COND(!_chunk.is_valid());
|
||||
|
||||
int data_size_x = _chunk->get_data_size_x();
|
||||
@ -125,14 +125,14 @@ void VoxelJob::generate_ao() {
|
||||
for (int y = margin_start - 1; y < size_y - 1; ++y) {
|
||||
for (int z = margin_start - 1; z < size_z - 1; ++z) {
|
||||
for (int x = margin_start - 1; x < size_x - 1; ++x) {
|
||||
int current = _chunk->get_voxel(x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
int current = _chunk->get_voxel(x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
|
||||
int sum = _chunk->get_voxel(x + 1, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x - 1, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y + 1, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y - 1, z, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y, z + 1, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y, z - 1, VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
int sum = _chunk->get_voxel(x + 1, y, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x - 1, y, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y + 1, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y - 1, z, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y, z + 1, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
sum += _chunk->get_voxel(x, y, z - 1, TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
|
||||
sum /= 6;
|
||||
|
||||
@ -141,13 +141,13 @@ void VoxelJob::generate_ao() {
|
||||
if (sum < 0)
|
||||
sum = 0;
|
||||
|
||||
_chunk->set_voxel(sum, x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
_chunk->set_voxel(sum, x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_AO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelJob::generate_random_ao(int seed, int octaves, int period, float persistence, float scale_factor) {
|
||||
void TerraJob::generate_random_ao(int seed, int octaves, int period, float persistence, float scale_factor) {
|
||||
ERR_FAIL_COND(!_chunk.is_valid());
|
||||
|
||||
int margin_start = _chunk->get_margin_start();
|
||||
@ -182,13 +182,13 @@ void VoxelJob::generate_random_ao(int seed, int octaves, int period, float persi
|
||||
if (val < 0)
|
||||
val = -val;
|
||||
|
||||
_chunk->set_voxel(int(val * 255.0), x, y, z, VoxelChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
_chunk->set_voxel(int(val * 255.0), x, y, z, TerraChunkDefault::DEFAULT_CHANNEL_RANDOM_AO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Array VoxelJob::merge_mesh_array(Array arr) const {
|
||||
Array TerraJob::merge_mesh_array(Array arr) const {
|
||||
ERR_FAIL_COND_V(arr.size() != VisualServer::ARRAY_MAX, arr);
|
||||
|
||||
PoolVector3Array verts = arr[VisualServer::ARRAY_VERTEX];
|
||||
@ -252,7 +252,7 @@ Array VoxelJob::merge_mesh_array(Array arr) const {
|
||||
|
||||
return arr;
|
||||
}
|
||||
Array VoxelJob::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mul_color) const {
|
||||
Array TerraJob::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mul_color) const {
|
||||
ERR_FAIL_COND_V(arr.size() != VisualServer::ARRAY_MAX, arr);
|
||||
ERR_FAIL_COND_V(!tex.is_valid(), arr);
|
||||
|
||||
@ -293,7 +293,7 @@ Array VoxelJob::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mul_
|
||||
return arr;
|
||||
}
|
||||
|
||||
void VoxelJob::chunk_exit_tree() {
|
||||
void TerraJob::chunk_exit_tree() {
|
||||
|
||||
_in_tree = false;
|
||||
|
||||
@ -304,7 +304,7 @@ void VoxelJob::chunk_exit_tree() {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelJob::VoxelJob() {
|
||||
TerraJob::TerraJob() {
|
||||
_in_tree = false;
|
||||
|
||||
_build_phase_type = BUILD_PHASE_TYPE_NORMAL;
|
||||
@ -323,138 +323,138 @@ VoxelJob::VoxelJob() {
|
||||
#endif
|
||||
}
|
||||
|
||||
VoxelJob::~VoxelJob() {
|
||||
TerraJob::~TerraJob() {
|
||||
_chunk.unref();
|
||||
}
|
||||
|
||||
void VoxelJob::_bind_methods() {
|
||||
void TerraJob::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta")));
|
||||
BIND_VMETHOD(MethodInfo("_physics_process", PropertyInfo(Variant::REAL, "delta")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_build_phase_type"), &VoxelJob::get_build_phase_type);
|
||||
ClassDB::bind_method(D_METHOD("set_build_phase_type", "value"), &VoxelJob::set_build_phase_type);
|
||||
ClassDB::bind_method(D_METHOD("get_build_phase_type"), &TerraJob::get_build_phase_type);
|
||||
ClassDB::bind_method(D_METHOD("set_build_phase_type", "value"), &TerraJob::set_build_phase_type);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_phase_type", PROPERTY_HINT_ENUM, BINDING_STRING_ACTIVE_BUILD_PHASE_TYPE), "set_build_phase_type", "get_build_phase_type");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_chunk", "chunk"), &VoxelJob::set_chunk);
|
||||
ClassDB::bind_method(D_METHOD("set_chunk", "chunk"), &TerraJob::set_chunk);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_phase"), &VoxelJob::get_phase);
|
||||
ClassDB::bind_method(D_METHOD("set_phase", "phase"), &VoxelJob::set_phase);
|
||||
ClassDB::bind_method(D_METHOD("next_phase"), &VoxelJob::next_phase);
|
||||
ClassDB::bind_method(D_METHOD("get_phase"), &TerraJob::get_phase);
|
||||
ClassDB::bind_method(D_METHOD("set_phase", "phase"), &TerraJob::set_phase);
|
||||
ClassDB::bind_method(D_METHOD("next_phase"), &TerraJob::next_phase);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_build_done"), &VoxelJob::get_build_done);
|
||||
ClassDB::bind_method(D_METHOD("set_build_done", "val"), &VoxelJob::set_build_done);
|
||||
ClassDB::bind_method(D_METHOD("get_build_done"), &TerraJob::get_build_done);
|
||||
ClassDB::bind_method(D_METHOD("set_build_done", "val"), &TerraJob::set_build_done);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("next_job"), &VoxelJob::next_job);
|
||||
ClassDB::bind_method(D_METHOD("next_job"), &TerraJob::next_job);
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_reset"));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("reset"), &VoxelJob::reset);
|
||||
ClassDB::bind_method(D_METHOD("_reset"), &VoxelJob::_reset);
|
||||
ClassDB::bind_method(D_METHOD("reset"), &TerraJob::reset);
|
||||
ClassDB::bind_method(D_METHOD("_reset"), &TerraJob::_reset);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_execute"), &VoxelJob::_execute);
|
||||
ClassDB::bind_method(D_METHOD("_execute"), &TerraJob::_execute);
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_execute_phase"));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("execute_phase"), &VoxelJob::execute_phase);
|
||||
ClassDB::bind_method(D_METHOD("_execute_phase"), &VoxelJob::_execute_phase);
|
||||
ClassDB::bind_method(D_METHOD("execute_phase"), &TerraJob::execute_phase);
|
||||
ClassDB::bind_method(D_METHOD("_execute_phase"), &TerraJob::_execute_phase);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("generate_ao"), &VoxelJob::generate_ao);
|
||||
ClassDB::bind_method(D_METHOD("generate_random_ao", "seed", "octaves", "period", "persistence", "scale_factor"), &VoxelJob::generate_random_ao, DEFVAL(4), DEFVAL(30), DEFVAL(0.3), DEFVAL(0.6));
|
||||
ClassDB::bind_method(D_METHOD("generate_ao"), &TerraJob::generate_ao);
|
||||
ClassDB::bind_method(D_METHOD("generate_random_ao", "seed", "octaves", "period", "persistence", "scale_factor"), &TerraJob::generate_random_ao, DEFVAL(4), DEFVAL(30), DEFVAL(0.3), DEFVAL(0.6));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("chunk_exit_tree"), &VoxelJob::chunk_exit_tree);
|
||||
ClassDB::bind_method(D_METHOD("chunk_exit_tree"), &TerraJob::chunk_exit_tree);
|
||||
|
||||
#if !THREAD_POOL_PRESENT
|
||||
ClassDB::bind_method(D_METHOD("get_complete"), &VoxelJob::get_complete);
|
||||
ClassDB::bind_method(D_METHOD("set_complete", "value"), &VoxelJob::set_complete);
|
||||
ClassDB::bind_method(D_METHOD("get_complete"), &TerraJob::get_complete);
|
||||
ClassDB::bind_method(D_METHOD("set_complete", "value"), &TerraJob::set_complete);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "complete"), "set_complete", "get_complete");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_start_time"), &VoxelJob::get_start_time);
|
||||
ClassDB::bind_method(D_METHOD("set_start_time", "value"), &VoxelJob::set_start_time);
|
||||
ClassDB::bind_method(D_METHOD("get_start_time"), &TerraJob::get_start_time);
|
||||
ClassDB::bind_method(D_METHOD("set_start_time", "value"), &TerraJob::set_start_time);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "start_time"), "set_start_time", "get_start_time");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_current_run_stage"), &VoxelJob::get_current_run_stage);
|
||||
ClassDB::bind_method(D_METHOD("set_current_run_stage", "value"), &VoxelJob::set_current_run_stage);
|
||||
ClassDB::bind_method(D_METHOD("get_current_run_stage"), &TerraJob::get_current_run_stage);
|
||||
ClassDB::bind_method(D_METHOD("set_current_run_stage", "value"), &TerraJob::set_current_run_stage);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "current_run_stage"), "set_current_run_stage", "get_current_run_stage");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_stage"), &VoxelJob::get_stage);
|
||||
ClassDB::bind_method(D_METHOD("set_stage", "value"), &VoxelJob::set_stage);
|
||||
ClassDB::bind_method(D_METHOD("get_stage"), &TerraJob::get_stage);
|
||||
ClassDB::bind_method(D_METHOD("set_stage", "value"), &TerraJob::set_stage);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "stage"), "set_stage", "get_stage");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_current_execution_time"), &VoxelJob::get_current_execution_time);
|
||||
ClassDB::bind_method(D_METHOD("get_current_execution_time"), &TerraJob::get_current_execution_time);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("should_do", "just_check"), &VoxelJob::should_do, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("should_return"), &VoxelJob::should_return);
|
||||
ClassDB::bind_method(D_METHOD("should_do", "just_check"), &TerraJob::should_do, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("should_return"), &TerraJob::should_return);
|
||||
|
||||
BIND_VMETHOD(MethodInfo("_execute"));
|
||||
ClassDB::bind_method(D_METHOD("execute"), &VoxelJob::execute);
|
||||
ClassDB::bind_method(D_METHOD("execute"), &TerraJob::execute);
|
||||
|
||||
ADD_SIGNAL(MethodInfo("completed"));
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !THREAD_POOL_PRESENT
|
||||
bool VoxelJob::get_complete() const {
|
||||
bool TerraJob::get_complete() const {
|
||||
return _complete;
|
||||
}
|
||||
void VoxelJob::set_complete(const bool value) {
|
||||
void TerraJob::set_complete(const bool value) {
|
||||
_complete = value;
|
||||
}
|
||||
|
||||
bool VoxelJob::get_cancelled() const {
|
||||
bool TerraJob::get_cancelled() const {
|
||||
return _cancelled;
|
||||
}
|
||||
void VoxelJob::set_cancelled(const bool value) {
|
||||
void TerraJob::set_cancelled(const bool value) {
|
||||
_cancelled = value;
|
||||
}
|
||||
|
||||
float VoxelJob::get_max_allocated_time() const {
|
||||
float TerraJob::get_max_allocated_time() const {
|
||||
return _max_allocated_time;
|
||||
}
|
||||
void VoxelJob::set_max_allocated_time(const float value) {
|
||||
void TerraJob::set_max_allocated_time(const float value) {
|
||||
_max_allocated_time = value;
|
||||
}
|
||||
|
||||
int VoxelJob::get_start_time() const {
|
||||
int TerraJob::get_start_time() const {
|
||||
return _start_time;
|
||||
}
|
||||
void VoxelJob::set_start_time(const int value) {
|
||||
void TerraJob::set_start_time(const int value) {
|
||||
_start_time = value;
|
||||
}
|
||||
|
||||
int VoxelJob::get_current_run_stage() const {
|
||||
int TerraJob::get_current_run_stage() const {
|
||||
return _current_run_stage;
|
||||
}
|
||||
void VoxelJob::set_current_run_stage(const int value) {
|
||||
void TerraJob::set_current_run_stage(const int value) {
|
||||
_current_run_stage = value;
|
||||
}
|
||||
|
||||
int VoxelJob::get_stage() const {
|
||||
int TerraJob::get_stage() const {
|
||||
return _stage;
|
||||
}
|
||||
void VoxelJob::set_stage(const int value) {
|
||||
void TerraJob::set_stage(const int value) {
|
||||
_stage = value;
|
||||
}
|
||||
|
||||
void VoxelJob::reset_stages() {
|
||||
void TerraJob::reset_stages() {
|
||||
_current_run_stage = 0;
|
||||
_stage = 0;
|
||||
}
|
||||
|
||||
float VoxelJob::get_current_execution_time() {
|
||||
float TerraJob::get_current_execution_time() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool VoxelJob::should_do(const bool just_check) {
|
||||
bool TerraJob::should_do(const bool just_check) {
|
||||
return true;
|
||||
}
|
||||
bool VoxelJob::should_return() {
|
||||
bool TerraJob::should_return() {
|
||||
if (_cancelled)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void VoxelJob::execute() {
|
||||
void TerraJob::execute() {
|
||||
ERR_FAIL_COND(!has_method("_execute"));
|
||||
|
||||
call("_execute");
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_JOB_H
|
||||
#define VOXEL_JOB_H
|
||||
#ifndef TERRA_JOB_H
|
||||
#define TERRA_JOB_H
|
||||
|
||||
#include "scene/resources/texture.h"
|
||||
|
||||
@ -45,14 +45,14 @@ SOFTWARE.
|
||||
#define Texture Texture2D
|
||||
#endif
|
||||
|
||||
class VoxelChunk;
|
||||
class TerraChunk;
|
||||
|
||||
#if THREAD_POOL_PRESENT
|
||||
class VoxelJob : public ThreadPoolJob {
|
||||
GDCLASS(VoxelJob, ThreadPoolJob);
|
||||
class TerraJob : public ThreadPoolJob {
|
||||
GDCLASS(TerraJob, ThreadPoolJob);
|
||||
#else
|
||||
class VoxelJob : public Reference {
|
||||
GDCLASS(VoxelJob, Reference);
|
||||
class TerraJob : public Reference {
|
||||
GDCLASS(TerraJob, Reference);
|
||||
#endif
|
||||
|
||||
public:
|
||||
@ -66,9 +66,9 @@ public:
|
||||
|
||||
public:
|
||||
ActiveBuildPhaseType get_build_phase_type();
|
||||
void set_build_phase_type(VoxelJob::ActiveBuildPhaseType build_phase_type);
|
||||
void set_build_phase_type(TerraJob::ActiveBuildPhaseType build_phase_type);
|
||||
|
||||
void set_chunk(const Ref<VoxelChunk> &chunk);
|
||||
void set_chunk(const Ref<TerraChunk> &chunk);
|
||||
|
||||
int get_phase();
|
||||
void set_phase(const int phase);
|
||||
@ -97,8 +97,8 @@ public:
|
||||
|
||||
void chunk_exit_tree();
|
||||
|
||||
VoxelJob();
|
||||
~VoxelJob();
|
||||
TerraJob();
|
||||
~TerraJob();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
@ -107,7 +107,7 @@ protected:
|
||||
bool _build_done;
|
||||
int _phase;
|
||||
bool _in_tree;
|
||||
Ref<VoxelChunk> _chunk;
|
||||
Ref<TerraChunk> _chunk;
|
||||
|
||||
public:
|
||||
#if !THREAD_POOL_PRESENT
|
||||
@ -150,6 +150,6 @@ private:
|
||||
#endif
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelJob::ActiveBuildPhaseType);
|
||||
VARIANT_ENUM_CAST(TerraJob::ActiveBuildPhaseType);
|
||||
|
||||
#endif
|
||||
|
@ -30,21 +30,21 @@ SOFTWARE.
|
||||
#include "../../meshers/voxel_mesher.h"
|
||||
#include "../default/voxel_chunk_default.h"
|
||||
|
||||
void VoxelLightJob::phase_light() {
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
void TerraLightJob::phase_light() {
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
if (!chunk->channel_get(VoxelChunkDefault::DEFAULT_CHANNEL_AO))
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_GENERATE_AO) != 0)
|
||||
if (!chunk->channel_get(TerraChunkDefault::DEFAULT_CHANNEL_AO))
|
||||
generate_ao();
|
||||
|
||||
bool gr = (chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_AUTO_GENERATE_RAO) != 0;
|
||||
bool gr = (chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_AUTO_GENERATE_RAO) != 0;
|
||||
|
||||
if (!gr && (chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0) {
|
||||
if (!gr && (chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) == 0) {
|
||||
next_phase();
|
||||
return;
|
||||
}
|
||||
|
||||
bool bl = (chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_BAKE_LIGHTS) != 0;
|
||||
bool bl = (chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_BAKE_LIGHTS) != 0;
|
||||
|
||||
if (bl && should_do()) {
|
||||
chunk->clear_baked_lights();
|
||||
@ -71,10 +71,10 @@ void VoxelLightJob::phase_light() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelLightJob::_execute_phase() {
|
||||
void TerraLightJob::_execute_phase() {
|
||||
ERR_FAIL_COND(!_chunk.is_valid());
|
||||
|
||||
Ref<VoxelmanLibrary> library = _chunk->get_library();
|
||||
Ref<TerramanLibrary> library = _chunk->get_library();
|
||||
|
||||
ERR_FAIL_COND(!library.is_valid());
|
||||
|
||||
@ -83,11 +83,11 @@ void VoxelLightJob::_execute_phase() {
|
||||
next_job();
|
||||
}
|
||||
|
||||
VoxelLightJob::VoxelLightJob() {
|
||||
TerraLightJob::TerraLightJob() {
|
||||
}
|
||||
|
||||
VoxelLightJob::~VoxelLightJob() {
|
||||
TerraLightJob::~TerraLightJob() {
|
||||
}
|
||||
|
||||
void VoxelLightJob::_bind_methods() {
|
||||
void TerraLightJob::_bind_methods() {
|
||||
}
|
||||
|
@ -20,23 +20,23 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_LIGHT_JOB_H
|
||||
#define VOXEL_LIGHT_JOB_H
|
||||
#ifndef TERRA_LIGHT_JOB_H
|
||||
#define TERRA_LIGHT_JOB_H
|
||||
|
||||
#include "voxel_job.h"
|
||||
|
||||
class VoxelMesher;
|
||||
class TerraMesher;
|
||||
|
||||
class VoxelLightJob : public VoxelJob {
|
||||
GDCLASS(VoxelLightJob, VoxelJob);
|
||||
class TerraLightJob : public TerraJob {
|
||||
GDCLASS(TerraLightJob, TerraJob);
|
||||
|
||||
public:
|
||||
void phase_light();
|
||||
|
||||
void _execute_phase();
|
||||
|
||||
VoxelLightJob();
|
||||
~VoxelLightJob();
|
||||
TerraLightJob();
|
||||
~TerraLightJob();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -40,15 +40,15 @@ SOFTWARE.
|
||||
#include "../../../mesh_utils/fast_quadratic_mesh_simplifier.h"
|
||||
#endif
|
||||
|
||||
Ref<VoxelMesher> VoxelPropJob::get_prop_mesher() const {
|
||||
Ref<TerraMesher> TerraPropJob::get_prop_mesher() const {
|
||||
return _prop_mesher;
|
||||
}
|
||||
void VoxelPropJob::set_prop_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
void TerraPropJob::set_prop_mesher(const Ref<TerraMesher> &mesher) {
|
||||
_prop_mesher = mesher;
|
||||
}
|
||||
|
||||
void VoxelPropJob::phase_physics_process() {
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
void TerraPropJob::phase_physics_process() {
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
//TODO this should only update the differences
|
||||
for (int i = 0; i < chunk->collider_get_count(); ++i) {
|
||||
@ -105,9 +105,9 @@ void VoxelPropJob::phase_physics_process() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelPropJob::phase_prop() {
|
||||
void TerraPropJob::phase_prop() {
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if (!get_prop_mesher().is_valid()) {
|
||||
set_complete(true); //So threadpool knows it's done
|
||||
@ -142,7 +142,7 @@ void VoxelPropJob::phase_prop() {
|
||||
}
|
||||
|
||||
if (should_do()) {
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
get_prop_mesher()->bake_colors(_chunk);
|
||||
}
|
||||
|
||||
@ -152,8 +152,8 @@ void VoxelPropJob::phase_prop() {
|
||||
}
|
||||
|
||||
if (should_do()) {
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
VoxelWorldDefault *world = Object::cast_to<VoxelWorldDefault>(chunk->get_voxel_world());
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
TerraWorldDefault *world = Object::cast_to<TerraWorldDefault>(chunk->get_voxel_world());
|
||||
|
||||
if (world) {
|
||||
for (int i = 0; i < chunk->mesh_data_resource_get_count(); ++i) {
|
||||
@ -198,16 +198,16 @@ void VoxelPropJob::phase_prop() {
|
||||
}
|
||||
}
|
||||
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
|
||||
if (should_do()) {
|
||||
if (mesh_rid == RID()) {
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_LODS) != 0)
|
||||
chunk->meshes_create(VoxelChunkDefault::MESH_INDEX_PROP, chunk->get_lod_num() + 1);
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_LODS) != 0)
|
||||
chunk->meshes_create(TerraChunkDefault::MESH_INDEX_PROP, chunk->get_lod_num() + 1);
|
||||
else
|
||||
chunk->meshes_create(VoxelChunkDefault::MESH_INDEX_PROP, 1);
|
||||
chunk->meshes_create(TerraChunkDefault::MESH_INDEX_PROP, 1);
|
||||
|
||||
mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
}
|
||||
|
||||
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
|
||||
@ -234,17 +234,17 @@ void VoxelPropJob::phase_prop() {
|
||||
}
|
||||
}
|
||||
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_LODS) != 0) {
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_LODS) != 0) {
|
||||
if (should_do()) {
|
||||
|
||||
if (chunk->get_lod_num() >= 1) {
|
||||
//for lod 1 just remove uv2
|
||||
temp_mesh_arr[VisualServer::ARRAY_TEX_UV2] = Variant();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 1), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 1), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->prop_material_get(1).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 1), 0, chunk->get_library()->prop_material_get(1)->get_rid());
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 1), 0, chunk->get_library()->prop_material_get(1)->get_rid());
|
||||
}
|
||||
|
||||
if (should_return()) {
|
||||
@ -257,10 +257,10 @@ void VoxelPropJob::phase_prop() {
|
||||
Array temp_mesh_arr2 = merge_mesh_array(temp_mesh_arr);
|
||||
temp_mesh_arr = temp_mesh_arr2;
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 2), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr2);
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 2), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr2);
|
||||
|
||||
if (chunk->get_library()->prop_material_get(2).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 2), 0, chunk->get_library()->prop_material_get(2)->get_rid());
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 2), 0, chunk->get_library()->prop_material_get(2)->get_rid());
|
||||
}
|
||||
if (should_return()) {
|
||||
return;
|
||||
@ -283,10 +283,10 @@ void VoxelPropJob::phase_prop() {
|
||||
temp_mesh_arr = bake_mesh_array_uv(temp_mesh_arr, tex);
|
||||
temp_mesh_arr[VisualServer::ARRAY_TEX_UV] = Variant();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 3), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 3), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->prop_material_get(3).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_PROP, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 3), 0, chunk->get_library()->prop_material_get(3)->get_rid());
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_PROP, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 3), 0, chunk->get_library()->prop_material_get(3)->get_rid());
|
||||
}
|
||||
}
|
||||
|
||||
@ -303,12 +303,12 @@ void VoxelPropJob::phase_prop() {
|
||||
temp_mesh_arr = fqms->get_arrays();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, i),
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, i),
|
||||
VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->prop_material_get(i).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, i), 0,
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, i), 0,
|
||||
chunk->get_library()->prop_material_get(i)->get_rid());
|
||||
}
|
||||
}
|
||||
@ -327,19 +327,19 @@ void VoxelPropJob::phase_prop() {
|
||||
next_job();
|
||||
}
|
||||
|
||||
void VoxelPropJob::_physics_process(float delta) {
|
||||
void TerraPropJob::_physics_process(float delta) {
|
||||
if (_phase == 0)
|
||||
phase_physics_process();
|
||||
}
|
||||
|
||||
void VoxelPropJob::_execute_phase() {
|
||||
void TerraPropJob::_execute_phase() {
|
||||
ERR_FAIL_COND(!_chunk.is_valid());
|
||||
|
||||
Ref<VoxelmanLibrary> library = _chunk->get_library();
|
||||
Ref<TerramanLibrary> library = _chunk->get_library();
|
||||
|
||||
ERR_FAIL_COND(!library.is_valid());
|
||||
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if (!chunk.is_valid()
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
@ -356,12 +356,12 @@ void VoxelPropJob::_execute_phase() {
|
||||
} else if (_phase > 1) {
|
||||
set_complete(true); //So threadpool knows it's done
|
||||
next_job();
|
||||
ERR_FAIL_MSG("VoxelPropJob: _phase is too high!");
|
||||
ERR_FAIL_MSG("TerraPropJob: _phase is too high!");
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelPropJob::_reset() {
|
||||
VoxelJob::_reset();
|
||||
void TerraPropJob::_reset() {
|
||||
TerraJob::_reset();
|
||||
|
||||
_build_done = false;
|
||||
_phase = 0;
|
||||
@ -374,17 +374,17 @@ void VoxelPropJob::_reset() {
|
||||
set_build_phase_type(BUILD_PHASE_TYPE_PHYSICS_PROCESS);
|
||||
}
|
||||
|
||||
VoxelPropJob::VoxelPropJob() {
|
||||
TerraPropJob::TerraPropJob() {
|
||||
set_build_phase_type(BUILD_PHASE_TYPE_PHYSICS_PROCESS);
|
||||
}
|
||||
|
||||
VoxelPropJob::~VoxelPropJob() {
|
||||
TerraPropJob::~TerraPropJob() {
|
||||
}
|
||||
|
||||
void VoxelPropJob::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_prop_mesher"), &VoxelPropJob::get_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_prop_mesher", "mesher"), &VoxelPropJob::set_prop_mesher);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop_mesher", PROPERTY_HINT_RESOURCE_TYPE, "VoxelMesher", 0), "set_prop_mesher", "get_prop_mesher");
|
||||
void TerraPropJob::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_prop_mesher"), &TerraPropJob::get_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_prop_mesher", "mesher"), &TerraPropJob::set_prop_mesher);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop_mesher", PROPERTY_HINT_RESOURCE_TYPE, "TerraMesher", 0), "set_prop_mesher", "get_prop_mesher");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_physics_process", "delta"), &VoxelPropJob::_physics_process);
|
||||
ClassDB::bind_method(D_METHOD("_physics_process", "delta"), &TerraPropJob::_physics_process);
|
||||
}
|
||||
|
@ -20,19 +20,19 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_PROP_JOB_H
|
||||
#define VOXEL_PROP_JOB_H
|
||||
#ifndef TERRA_PROP_JOB_H
|
||||
#define TERRA_PROP_JOB_H
|
||||
|
||||
#include "voxel_job.h"
|
||||
|
||||
class VoxelMesher;
|
||||
class TerraMesher;
|
||||
|
||||
class VoxelPropJob : public VoxelJob {
|
||||
GDCLASS(VoxelPropJob, VoxelJob);
|
||||
class TerraPropJob : public TerraJob {
|
||||
GDCLASS(TerraPropJob, TerraJob);
|
||||
|
||||
public:
|
||||
Ref<VoxelMesher> get_prop_mesher() const;
|
||||
void set_prop_mesher(const Ref<VoxelMesher> &mesher);
|
||||
Ref<TerraMesher> get_prop_mesher() const;
|
||||
void set_prop_mesher(const Ref<TerraMesher> &mesher);
|
||||
|
||||
void phase_physics_process();
|
||||
void phase_prop();
|
||||
@ -41,13 +41,13 @@ public:
|
||||
void _execute_phase();
|
||||
void _reset();
|
||||
|
||||
VoxelPropJob();
|
||||
~VoxelPropJob();
|
||||
TerraPropJob();
|
||||
~TerraPropJob();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
Ref<VoxelMesher> _prop_mesher;
|
||||
Ref<TerraMesher> _prop_mesher;
|
||||
|
||||
Array temp_mesh_arr;
|
||||
};
|
||||
|
@ -34,53 +34,53 @@ SOFTWARE.
|
||||
#include "../../../mesh_utils/fast_quadratic_mesh_simplifier.h"
|
||||
#endif
|
||||
|
||||
Ref<VoxelMesher> VoxelTerrarinJob::get_mesher(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _meshers.size(), Ref<VoxelMesher>());
|
||||
Ref<TerraMesher> TerraTerrarinJob::get_mesher(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _meshers.size(), Ref<TerraMesher>());
|
||||
|
||||
return _meshers.get(index);
|
||||
}
|
||||
void VoxelTerrarinJob::set_mesher(int index, const Ref<VoxelMesher> &mesher) {
|
||||
void TerraTerrarinJob::set_mesher(int index, const Ref<TerraMesher> &mesher) {
|
||||
ERR_FAIL_INDEX(index, _meshers.size());
|
||||
|
||||
_meshers.set(index, mesher);
|
||||
}
|
||||
void VoxelTerrarinJob::remove_mesher(const int index) {
|
||||
void TerraTerrarinJob::remove_mesher(const int index) {
|
||||
ERR_FAIL_INDEX(index, _meshers.size());
|
||||
|
||||
_meshers.remove(index);
|
||||
}
|
||||
void VoxelTerrarinJob::add_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
void TerraTerrarinJob::add_mesher(const Ref<TerraMesher> &mesher) {
|
||||
_meshers.push_back(mesher);
|
||||
}
|
||||
int VoxelTerrarinJob::get_mesher_count() const {
|
||||
int TerraTerrarinJob::get_mesher_count() const {
|
||||
return _meshers.size();
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> VoxelTerrarinJob::get_liquid_mesher(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _liquid_meshers.size(), Ref<VoxelMesher>());
|
||||
Ref<TerraMesher> TerraTerrarinJob::get_liquid_mesher(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _liquid_meshers.size(), Ref<TerraMesher>());
|
||||
|
||||
return _liquid_meshers.get(index);
|
||||
}
|
||||
void VoxelTerrarinJob::set_liquid_mesher(int index, const Ref<VoxelMesher> &mesher) {
|
||||
void TerraTerrarinJob::set_liquid_mesher(int index, const Ref<TerraMesher> &mesher) {
|
||||
ERR_FAIL_INDEX(index, _liquid_meshers.size());
|
||||
|
||||
_liquid_meshers.set(index, mesher);
|
||||
}
|
||||
void VoxelTerrarinJob::remove_liquid_mesher(const int index) {
|
||||
void TerraTerrarinJob::remove_liquid_mesher(const int index) {
|
||||
ERR_FAIL_INDEX(index, _liquid_meshers.size());
|
||||
|
||||
_liquid_meshers.remove(index);
|
||||
}
|
||||
void VoxelTerrarinJob::add_liquid_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
void TerraTerrarinJob::add_liquid_mesher(const Ref<TerraMesher> &mesher) {
|
||||
_liquid_meshers.push_back(mesher);
|
||||
}
|
||||
int VoxelTerrarinJob::get_liquid_mesher_count() const {
|
||||
int TerraTerrarinJob::get_liquid_mesher_count() const {
|
||||
return _liquid_meshers.size();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_setup() {
|
||||
void TerraTerrarinJob::phase_setup() {
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -89,7 +89,7 @@ void VoxelTerrarinJob::phase_setup() {
|
||||
}
|
||||
|
||||
for (int i = 0; i < _liquid_meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -100,7 +100,7 @@ void VoxelTerrarinJob::phase_setup() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_terrarin_mesh_setup() {
|
||||
void TerraTerrarinJob::phase_terrarin_mesh_setup() {
|
||||
int starti = 0;
|
||||
|
||||
if (has_meta("tms_m")) {
|
||||
@ -113,7 +113,7 @@ void VoxelTerrarinJob::phase_terrarin_mesh_setup() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -132,7 +132,7 @@ void VoxelTerrarinJob::phase_terrarin_mesh_setup() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -150,10 +150,10 @@ void VoxelTerrarinJob::phase_terrarin_mesh_setup() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_collider() {
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
void TerraTerrarinJob::phase_collider() {
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_COLLIDER) == 0) {
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_COLLIDER) == 0) {
|
||||
next_phase();
|
||||
return;
|
||||
}
|
||||
@ -170,7 +170,7 @@ void VoxelTerrarinJob::phase_collider() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -190,7 +190,7 @@ void VoxelTerrarinJob::phase_collider() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -216,23 +216,23 @@ void VoxelTerrarinJob::phase_collider() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_physics_process() {
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
void TerraTerrarinJob::phase_physics_process() {
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if (temp_arr_collider.size() != 0) {
|
||||
if (!chunk->meshes_has(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_BODY)) {
|
||||
chunk->colliders_create(VoxelChunkDefault::MESH_INDEX_TERRARIN);
|
||||
if (!chunk->meshes_has(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_BODY)) {
|
||||
chunk->colliders_create(TerraChunkDefault::MESH_INDEX_TERRARIN);
|
||||
}
|
||||
|
||||
PhysicsServer::get_singleton()->shape_set_data(chunk->mesh_rid_get(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_SHAPE), temp_arr_collider);
|
||||
PhysicsServer::get_singleton()->shape_set_data(chunk->mesh_rid_get(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_SHAPE), temp_arr_collider);
|
||||
|
||||
temp_arr_collider.resize(0);
|
||||
}
|
||||
|
||||
if (temp_arr_collider_liquid.size() != 0) {
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
if (!chunk->meshes_has(VoxelChunkDefault::MESH_INDEX_LIQUID, VoxelChunkDefault::MESH_TYPE_INDEX_BODY)) {
|
||||
chunk->colliders_create(VoxelChunkDefault::MESH_INDEX_LIQUID);
|
||||
if (!chunk->meshes_has(TerraChunkDefault::MESH_INDEX_LIQUID, TerraChunkDefault::MESH_TYPE_INDEX_BODY)) {
|
||||
chunk->colliders_create(TerraChunkDefault::MESH_INDEX_LIQUID);
|
||||
}
|
||||
}
|
||||
/*
|
||||
@ -242,7 +242,7 @@ void VoxelTerrarinJob::phase_physics_process() {
|
||||
}
|
||||
}*/
|
||||
|
||||
PhysicsServer::get_singleton()->shape_set_data(chunk->mesh_rid_get(VoxelChunkDefault::MESH_INDEX_LIQUID, VoxelChunkDefault::MESH_TYPE_INDEX_SHAPE), temp_arr_collider_liquid);
|
||||
PhysicsServer::get_singleton()->shape_set_data(chunk->mesh_rid_get(TerraChunkDefault::MESH_INDEX_LIQUID, TerraChunkDefault::MESH_TYPE_INDEX_SHAPE), temp_arr_collider_liquid);
|
||||
|
||||
temp_arr_collider_liquid.resize(0);
|
||||
}
|
||||
@ -251,10 +251,10 @@ void VoxelTerrarinJob::phase_physics_process() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
void TerraTerrarinJob::phase_terrarin_mesh() {
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
int starti = 0;
|
||||
|
||||
if (has_meta("bptm_ulm")) {
|
||||
@ -266,7 +266,7 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
set_meta("bptm_ulm", i);
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -284,7 +284,7 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
set_meta("bptm_ullm", i);
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
@ -298,13 +298,13 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
starti = get_meta("bptm_mm");
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher;
|
||||
Ref<TerraMesher> mesher;
|
||||
for (int i = starti; i < _meshers.size(); ++i) {
|
||||
if (should_return()) {
|
||||
set_meta("bptm_mm", i);
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> m = _meshers.get(i);
|
||||
Ref<TerraMesher> m = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!m.is_valid());
|
||||
|
||||
@ -326,13 +326,13 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
starti = get_meta("bptm_lmm");
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> liquid_mesher;
|
||||
Ref<TerraMesher> liquid_mesher;
|
||||
for (int i = starti; i < _liquid_meshers.size(); ++i) {
|
||||
if (should_return()) {
|
||||
set_meta("bptm_lmm", i);
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> m = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> m = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!m.is_valid());
|
||||
|
||||
@ -378,16 +378,16 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
}
|
||||
}
|
||||
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
|
||||
if (should_do()) {
|
||||
if (mesh_rid == RID()) {
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_LODS) != 0)
|
||||
chunk->meshes_create(VoxelChunkDefault::MESH_INDEX_TERRARIN, chunk->get_lod_num() + 1);
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_LODS) != 0)
|
||||
chunk->meshes_create(TerraChunkDefault::MESH_INDEX_TERRARIN, chunk->get_lod_num() + 1);
|
||||
else
|
||||
chunk->meshes_create(VoxelChunkDefault::MESH_INDEX_TERRARIN, 1);
|
||||
chunk->meshes_create(TerraChunkDefault::MESH_INDEX_TERRARIN, 1);
|
||||
|
||||
mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
}
|
||||
|
||||
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
|
||||
@ -413,16 +413,16 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
}
|
||||
}
|
||||
|
||||
if ((chunk->get_build_flags() & VoxelChunkDefault::BUILD_FLAG_CREATE_LODS) != 0) {
|
||||
if ((chunk->get_build_flags() & TerraChunkDefault::BUILD_FLAG_CREATE_LODS) != 0) {
|
||||
if (should_do()) {
|
||||
if (chunk->get_lod_num() >= 1) {
|
||||
//for lod 1 just remove uv2
|
||||
temp_mesh_arr[VisualServer::ARRAY_TEX_UV2] = Variant();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 1), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 1), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->material_get(1).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 1), 0, chunk->get_library()->material_get(1)->get_rid());
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 1), 0, chunk->get_library()->material_get(1)->get_rid());
|
||||
}
|
||||
if (should_return()) {
|
||||
return;
|
||||
@ -434,10 +434,10 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
Array temp_mesh_arr2 = merge_mesh_array(temp_mesh_arr);
|
||||
temp_mesh_arr = temp_mesh_arr2;
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 2), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr2);
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 2), VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr2);
|
||||
|
||||
if (chunk->get_library()->material_get(2).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 2), 0, chunk->get_library()->material_get(2)->get_rid());
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 2), 0, chunk->get_library()->material_get(2)->get_rid());
|
||||
}
|
||||
|
||||
if (should_return()) {
|
||||
@ -462,12 +462,12 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
temp_mesh_arr[VisualServer::ARRAY_TEX_UV] = Variant();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 3),
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 3),
|
||||
VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->material_get(3).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 3), 0,
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 3), 0,
|
||||
chunk->get_library()->material_get(3)->get_rid());
|
||||
}
|
||||
}
|
||||
@ -490,12 +490,12 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
temp_mesh_arr = fqms->get_arrays();
|
||||
|
||||
VisualServer::get_singleton()->mesh_add_surface_from_arrays(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, i),
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, i),
|
||||
VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||
|
||||
if (chunk->get_library()->material_get(i).is_valid())
|
||||
VisualServer::get_singleton()->mesh_surface_set_material(
|
||||
chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_TERRARIN, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, i), 0,
|
||||
chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_TERRARIN, TerraChunkDefault::MESH_TYPE_INDEX_MESH, i), 0,
|
||||
chunk->get_library()->material_get(i)->get_rid());
|
||||
}
|
||||
}
|
||||
@ -517,13 +517,13 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
}
|
||||
}
|
||||
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_LIQUID, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
RID mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_LIQUID, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
|
||||
if (should_do()) {
|
||||
if (mesh_rid == RID()) {
|
||||
chunk->meshes_create(VoxelChunkDefault::MESH_INDEX_LIQUID, 1);
|
||||
chunk->meshes_create(TerraChunkDefault::MESH_INDEX_LIQUID, 1);
|
||||
|
||||
mesh_rid = chunk->mesh_rid_get_index(VoxelChunkDefault::MESH_INDEX_LIQUID, VoxelChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
mesh_rid = chunk->mesh_rid_get_index(TerraChunkDefault::MESH_INDEX_LIQUID, TerraChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||
}
|
||||
|
||||
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
|
||||
@ -570,16 +570,16 @@ void VoxelTerrarinJob::phase_terrarin_mesh() {
|
||||
next_phase();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::phase_finalize() {
|
||||
void TerraTerrarinJob::phase_finalize() {
|
||||
set_complete(true); //So threadpool knows it's done
|
||||
|
||||
next_job();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::_execute_phase() {
|
||||
void TerraTerrarinJob::_execute_phase() {
|
||||
ERR_FAIL_COND(!_chunk.is_valid());
|
||||
|
||||
Ref<VoxelmanLibrary> library = _chunk->get_library();
|
||||
Ref<TerramanLibrary> library = _chunk->get_library();
|
||||
|
||||
ERR_FAIL_COND(!library.is_valid());
|
||||
|
||||
@ -596,25 +596,25 @@ void VoxelTerrarinJob::_execute_phase() {
|
||||
} else if (_phase > 5) {
|
||||
set_complete(true); //So threadpool knows it's done
|
||||
next_job();
|
||||
ERR_FAIL_MSG("VoxelTerrarinJob: _phase is too high!");
|
||||
ERR_FAIL_MSG("TerraTerrarinJob: _phase is too high!");
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::_reset() {
|
||||
VoxelJob::_reset();
|
||||
void TerraTerrarinJob::_reset() {
|
||||
TerraJob::_reset();
|
||||
|
||||
_build_done = false;
|
||||
_phase = 0;
|
||||
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
mesher->set_voxel_scale(_chunk->get_voxel_scale());
|
||||
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
Ref<VoxelMesherDefault> md = mesher;
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
Ref<TerraMesherDefault> md = mesher;
|
||||
|
||||
if (chunk.is_valid() && md.is_valid()) {
|
||||
md->set_build_flags(chunk->get_build_flags());
|
||||
@ -622,14 +622,14 @@ void VoxelTerrarinJob::_reset() {
|
||||
}
|
||||
|
||||
for (int i = 0; i < _liquid_meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _liquid_meshers.get(i);
|
||||
Ref<TerraMesher> mesher = _liquid_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
mesher->set_voxel_scale(_chunk->get_voxel_scale());
|
||||
|
||||
Ref<VoxelChunkDefault> chunk = _chunk;
|
||||
Ref<VoxelMesherDefault> md = mesher;
|
||||
Ref<TerraChunkDefault> chunk = _chunk;
|
||||
Ref<TerraMesherDefault> md = mesher;
|
||||
|
||||
if (chunk.is_valid() && md.is_valid()) {
|
||||
md->set_build_flags(chunk->get_build_flags());
|
||||
@ -637,31 +637,31 @@ void VoxelTerrarinJob::_reset() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::_physics_process(float delta) {
|
||||
void TerraTerrarinJob::_physics_process(float delta) {
|
||||
if (_phase == 3)
|
||||
phase_physics_process();
|
||||
}
|
||||
|
||||
VoxelTerrarinJob::VoxelTerrarinJob() {
|
||||
TerraTerrarinJob::TerraTerrarinJob() {
|
||||
}
|
||||
|
||||
VoxelTerrarinJob::~VoxelTerrarinJob() {
|
||||
TerraTerrarinJob::~TerraTerrarinJob() {
|
||||
_meshers.clear();
|
||||
_liquid_meshers.clear();
|
||||
}
|
||||
|
||||
void VoxelTerrarinJob::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_mesher", "index"), &VoxelTerrarinJob::get_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher", "index", "mesher"), &VoxelTerrarinJob::set_mesher);
|
||||
ClassDB::bind_method(D_METHOD("remove_mesher", "index"), &VoxelTerrarinJob::remove_mesher);
|
||||
ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &VoxelTerrarinJob::add_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_count"), &VoxelTerrarinJob::get_mesher_count);
|
||||
void TerraTerrarinJob::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_mesher", "index"), &TerraTerrarinJob::get_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_mesher", "index", "mesher"), &TerraTerrarinJob::set_mesher);
|
||||
ClassDB::bind_method(D_METHOD("remove_mesher", "index"), &TerraTerrarinJob::remove_mesher);
|
||||
ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &TerraTerrarinJob::add_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_mesher_count"), &TerraTerrarinJob::get_mesher_count);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_liquid_mesher", "index"), &VoxelTerrarinJob::get_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_liquid_mesher", "index", "mesher"), &VoxelTerrarinJob::set_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("remove_liquid_mesher", "index"), &VoxelTerrarinJob::remove_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("add_liquid_mesher", "mesher"), &VoxelTerrarinJob::add_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_liquid_mesher_count"), &VoxelTerrarinJob::get_liquid_mesher_count);
|
||||
ClassDB::bind_method(D_METHOD("get_liquid_mesher", "index"), &TerraTerrarinJob::get_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_liquid_mesher", "index", "mesher"), &TerraTerrarinJob::set_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("remove_liquid_mesher", "index"), &TerraTerrarinJob::remove_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("add_liquid_mesher", "mesher"), &TerraTerrarinJob::add_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_liquid_mesher_count"), &TerraTerrarinJob::get_liquid_mesher_count);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("_physics_process", "delta"), &VoxelTerrarinJob::_physics_process);
|
||||
ClassDB::bind_method(D_METHOD("_physics_process", "delta"), &TerraTerrarinJob::_physics_process);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_TERRARIN_JOB_H
|
||||
#define VOXEL_TERRARIN_JOB_H
|
||||
#ifndef TERRA_TERRARIN_JOB_H
|
||||
#define TERRA_TERRARIN_JOB_H
|
||||
|
||||
#include "voxel_job.h"
|
||||
|
||||
@ -31,24 +31,24 @@ SOFTWARE.
|
||||
|
||||
include_pool_vector
|
||||
|
||||
class VoxelMesher;
|
||||
class TerraMesher;
|
||||
|
||||
class VoxelTerrarinJob : public VoxelJob {
|
||||
GDCLASS(VoxelTerrarinJob, VoxelJob);
|
||||
class TerraTerrarinJob : public TerraJob {
|
||||
GDCLASS(TerraTerrarinJob, TerraJob);
|
||||
|
||||
public:
|
||||
//Meshers
|
||||
Ref<VoxelMesher> get_mesher(const int index) const;
|
||||
void set_mesher(const int index, const Ref<VoxelMesher> &mesher);
|
||||
Ref<TerraMesher> get_mesher(const int index) const;
|
||||
void set_mesher(const int index, const Ref<TerraMesher> &mesher);
|
||||
void remove_mesher(const int index);
|
||||
void add_mesher(const Ref<VoxelMesher> &mesher);
|
||||
void add_mesher(const Ref<TerraMesher> &mesher);
|
||||
int get_mesher_count() const;
|
||||
|
||||
//Liquid Meshers
|
||||
Ref<VoxelMesher> get_liquid_mesher(const int index) const;
|
||||
void set_liquid_mesher(const int index, const Ref<VoxelMesher> &mesher);
|
||||
Ref<TerraMesher> get_liquid_mesher(const int index) const;
|
||||
void set_liquid_mesher(const int index, const Ref<TerraMesher> &mesher);
|
||||
void remove_liquid_mesher(const int index);
|
||||
void add_liquid_mesher(const Ref<VoxelMesher> &mesher);
|
||||
void add_liquid_mesher(const Ref<TerraMesher> &mesher);
|
||||
int get_liquid_mesher_count() const;
|
||||
|
||||
void phase_setup();
|
||||
@ -63,14 +63,14 @@ public:
|
||||
void _reset();
|
||||
void _physics_process(float delta);
|
||||
|
||||
VoxelTerrarinJob();
|
||||
~VoxelTerrarinJob();
|
||||
TerraTerrarinJob();
|
||||
~TerraTerrarinJob();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
Vector<Ref<VoxelMesher>> _meshers;
|
||||
Vector<Ref<VoxelMesher>> _liquid_meshers;
|
||||
Vector<Ref<TerraMesher>> _meshers;
|
||||
Vector<Ref<TerraMesher>> _liquid_meshers;
|
||||
|
||||
PoolVector<Vector3> temp_arr_collider;
|
||||
PoolVector<Vector3> temp_arr_collider_liquid;
|
||||
|
@ -24,20 +24,20 @@ SOFTWARE.
|
||||
|
||||
#include "../../defines.h"
|
||||
|
||||
VoxelChunkMarchingCubes::VoxelChunkMarchingCubes() {
|
||||
TerraChunkMarchingCubes::TerraChunkMarchingCubes() {
|
||||
}
|
||||
|
||||
VoxelChunkMarchingCubes::~VoxelChunkMarchingCubes() {
|
||||
TerraChunkMarchingCubes::~TerraChunkMarchingCubes() {
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_channel_setup() {
|
||||
void TerraChunkMarchingCubes::_channel_setup() {
|
||||
channel_set_count(MAX_DEFAULT_CHANNELS);
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_bind_methods() {
|
||||
void TerraChunkMarchingCubes::_bind_methods() {
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "channel_set_compressed", "channel_get_compressed", 0);
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "channel_set_compressed", "channel_get_compressed", 1);
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &VoxelChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &VoxelChunk::set_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("get_channel_compressed", "channel_index"), &TerraChunk::get_channel_compressed);
|
||||
//ClassDB::bind_method(D_METHOD("set_channel_compressed", "channel_index", "array"), &TerraChunk::set_channel_compressed);
|
||||
}
|
||||
|
@ -20,17 +20,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_MARCHING_CUBES_H
|
||||
#define VOXEL_CHUNK_MARCHING_CUBES_H
|
||||
#ifndef TERRA_CHUNK_MARCHING_CUBES_H
|
||||
#define TERRA_CHUNK_MARCHING_CUBES_H
|
||||
|
||||
#include "../default/voxel_chunk_default.h"
|
||||
|
||||
class VoxelChunkMarchingCubes : public VoxelChunkDefault {
|
||||
GDCLASS(VoxelChunkMarchingCubes, VoxelChunkDefault);
|
||||
class TerraChunkMarchingCubes : public TerraChunkDefault {
|
||||
GDCLASS(TerraChunkMarchingCubes, TerraChunkDefault);
|
||||
|
||||
public:
|
||||
VoxelChunkMarchingCubes();
|
||||
~VoxelChunkMarchingCubes();
|
||||
TerraChunkMarchingCubes();
|
||||
~TerraChunkMarchingCubes();
|
||||
|
||||
protected:
|
||||
virtual void _channel_setup();
|
||||
|
@ -29,38 +29,38 @@ SOFTWARE.
|
||||
#include "../jobs/voxel_prop_job.h"
|
||||
#include "../jobs/voxel_terrarin_job.h"
|
||||
|
||||
Ref<VoxelChunk> VoxelWorldMarchingCubes::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||
Ref<TerraChunk> TerraWorldMarchingCubes::_create_chunk(int x, int y, int z, Ref<TerraChunk> chunk) {
|
||||
if (!chunk.is_valid()) {
|
||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkMarchingCubes));
|
||||
chunk = Ref<TerraChunk>(memnew(TerraChunkMarchingCubes));
|
||||
}
|
||||
|
||||
if (chunk->job_get_count() == 0) {
|
||||
Ref<VoxelTerrarinJob> tj;
|
||||
Ref<TerraTerrarinJob> tj;
|
||||
tj.instance();
|
||||
|
||||
Ref<VoxelLightJob> lj;
|
||||
Ref<TerraLightJob> lj;
|
||||
lj.instance();
|
||||
|
||||
Ref<VoxelPropJob> pj;
|
||||
Ref<TerraPropJob> pj;
|
||||
pj.instance();
|
||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes)));
|
||||
pj->set_prop_mesher(Ref<TerraMesher>(memnew(TerraMesherMarchingCubes)));
|
||||
|
||||
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes()));
|
||||
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
Ref<TerraMesher> m = Ref<TerraMesher>(memnew(TerraMesherMarchingCubes()));
|
||||
m->set_channel_index_type(TerraChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||
m->set_channel_index_isolevel(TerraChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||
|
||||
tj->add_mesher(m);
|
||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||
//add_liquid_mesher(Ref<TerraMesher>(memnew(TerraMesherLiquidMarchingCubes())));
|
||||
|
||||
chunk->job_add(lj);
|
||||
chunk->job_add(tj);
|
||||
chunk->job_add(pj);
|
||||
}
|
||||
|
||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||
return TerraWorld::_create_chunk(x, y, z, chunk);
|
||||
}
|
||||
|
||||
void VoxelWorldMarchingCubes::_set_voxel_with_tool(const bool mode_add, const Vector3 hit_position, const Vector3 hit_normal, const int selected_voxel, const int isolevel) {
|
||||
void TerraWorldMarchingCubes::_set_voxel_with_tool(const bool mode_add, const Vector3 hit_position, const Vector3 hit_normal, const int selected_voxel, const int isolevel) {
|
||||
Vector3 pos;
|
||||
|
||||
Vector3 hp = hit_position;
|
||||
@ -89,8 +89,8 @@ void VoxelWorldMarchingCubes::_set_voxel_with_tool(const bool mode_add, const Ve
|
||||
pos = (hit_position + (Vector3(0.8, 0.8, 0.8) * -hit_normal * get_voxel_scale()));
|
||||
}
|
||||
|
||||
int channel_type = get_channel_index_info(VoxelWorld::CHANNEL_TYPE_INFO_TYPE);
|
||||
int channel_isolevel = get_channel_index_info(VoxelWorld::CHANNEL_TYPE_INFO_ISOLEVEL);
|
||||
int channel_type = get_channel_index_info(TerraWorld::CHANNEL_TYPE_INFO_TYPE);
|
||||
int channel_isolevel = get_channel_index_info(TerraWorld::CHANNEL_TYPE_INFO_ISOLEVEL);
|
||||
|
||||
if (channel_isolevel == -1) {
|
||||
set_voxel_at_world_position(pos, selected_voxel, channel_type);
|
||||
@ -100,13 +100,13 @@ void VoxelWorldMarchingCubes::_set_voxel_with_tool(const bool mode_add, const Ve
|
||||
}
|
||||
}
|
||||
|
||||
VoxelWorldMarchingCubes::VoxelWorldMarchingCubes() {
|
||||
TerraWorldMarchingCubes::TerraWorldMarchingCubes() {
|
||||
set_data_margin_start(1);
|
||||
set_data_margin_end(2);
|
||||
}
|
||||
|
||||
VoxelWorldMarchingCubes ::~VoxelWorldMarchingCubes() {
|
||||
TerraWorldMarchingCubes ::~TerraWorldMarchingCubes() {
|
||||
}
|
||||
|
||||
void VoxelWorldMarchingCubes::_bind_methods() {
|
||||
void TerraWorldMarchingCubes::_bind_methods() {
|
||||
}
|
@ -20,20 +20,20 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_MARCHING_CUBES_H
|
||||
#define VOXEL_WORLD_MARCHING_CUBES_H
|
||||
#ifndef TERRA_WORLD_MARCHING_CUBES_H
|
||||
#define TERRA_WORLD_MARCHING_CUBES_H
|
||||
|
||||
#include "../default/voxel_world_default.h"
|
||||
|
||||
class VoxelWorldMarchingCubes : public VoxelWorldDefault {
|
||||
GDCLASS(VoxelWorldMarchingCubes, VoxelWorldDefault);
|
||||
class TerraWorldMarchingCubes : public TerraWorldDefault {
|
||||
GDCLASS(TerraWorldMarchingCubes, TerraWorldDefault);
|
||||
|
||||
public:
|
||||
VoxelWorldMarchingCubes();
|
||||
~VoxelWorldMarchingCubes();
|
||||
TerraWorldMarchingCubes();
|
||||
~TerraWorldMarchingCubes();
|
||||
|
||||
protected:
|
||||
Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
Ref<TerraChunk> _create_chunk(int x, int y, int z, Ref<TerraChunk> p_chunk);
|
||||
void _set_voxel_with_tool(const bool mode_add, const Vector3 hit_position, const Vector3 hit_normal, const int selected_voxel, const int isolevel) override;
|
||||
|
||||
static void _bind_methods();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_CHUNK_H
|
||||
#define VOXEL_CHUNK_H
|
||||
#ifndef TERRA_CHUNK_H
|
||||
#define TERRA_CHUNK_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -68,18 +68,18 @@ include_pool_vector
|
||||
#include "../library/voxelman_library.h"
|
||||
; //hackfix for a clang format issue
|
||||
|
||||
class VoxelJob;
|
||||
class VoxelWorld;
|
||||
class VoxelStructure;
|
||||
class TerraJob;
|
||||
class TerraWorld;
|
||||
class TerraStructure;
|
||||
|
||||
class VoxelChunk : public Resource {
|
||||
GDCLASS(VoxelChunk, Resource);
|
||||
class TerraChunk : public Resource {
|
||||
GDCLASS(TerraChunk, Resource);
|
||||
|
||||
_THREAD_SAFE_CLASS_
|
||||
|
||||
public:
|
||||
enum {
|
||||
VOXEL_CHUNK_STATE_OK = 0,
|
||||
TERRA_CHUNK_STATE_OK = 0,
|
||||
};
|
||||
|
||||
public:
|
||||
@ -141,26 +141,26 @@ public:
|
||||
void set_margin_start(const int value);
|
||||
void set_margin_end(const int value);
|
||||
|
||||
Ref<VoxelmanLibrary> get_library();
|
||||
void set_library(const Ref<VoxelmanLibrary> &value);
|
||||
Ref<TerramanLibrary> get_library();
|
||||
void set_library(const Ref<TerramanLibrary> &value);
|
||||
|
||||
float get_voxel_scale() const;
|
||||
void set_voxel_scale(const float value);
|
||||
|
||||
VoxelWorld *get_voxel_world() const;
|
||||
void set_voxel_world(VoxelWorld *world);
|
||||
TerraWorld *get_voxel_world() const;
|
||||
void set_voxel_world(TerraWorld *world);
|
||||
void set_voxel_world_bind(Node *world);
|
||||
|
||||
//Jobs
|
||||
Ref<VoxelJob> job_get(const int index) const;
|
||||
void job_set(const int index, const Ref<VoxelJob> &job);
|
||||
Ref<TerraJob> job_get(const int index) const;
|
||||
void job_set(const int index, const Ref<TerraJob> &job);
|
||||
void job_remove(const int index);
|
||||
void job_add(const Ref<VoxelJob> &job);
|
||||
void job_add(const Ref<TerraJob> &job);
|
||||
int job_get_count() const;
|
||||
|
||||
int job_get_current_index();
|
||||
void job_next();
|
||||
Ref<VoxelJob> job_get_current();
|
||||
Ref<TerraJob> job_get_current();
|
||||
|
||||
//Channels
|
||||
void channel_setup();
|
||||
@ -194,14 +194,14 @@ public:
|
||||
int get_data_index(const int x, const int y, const int z) const;
|
||||
int get_data_size() const;
|
||||
|
||||
//Voxel Structures
|
||||
Ref<VoxelStructure> voxel_structure_get(const int index) const;
|
||||
void voxel_structure_add(const Ref<VoxelStructure> &structure);
|
||||
void voxel_structure_remove(const Ref<VoxelStructure> &structure);
|
||||
//Terra Structures
|
||||
Ref<TerraStructure> voxel_structure_get(const int index) const;
|
||||
void voxel_structure_add(const Ref<TerraStructure> &structure);
|
||||
void voxel_structure_remove(const Ref<TerraStructure> &structure);
|
||||
void voxel_structure_remove_index(const int index);
|
||||
void voxel_structure_clear();
|
||||
int voxel_structure_get_count() const;
|
||||
void voxel_structure_add_at_position(Ref<VoxelStructure> structure, const Vector3 &world_position);
|
||||
void voxel_structure_add_at_position(Ref<TerraStructure> structure, const Vector3 &world_position);
|
||||
|
||||
Vector<Variant> voxel_structures_get();
|
||||
void voxel_structures_set(const Vector<Variant> &structures);
|
||||
@ -215,7 +215,7 @@ public:
|
||||
|
||||
//light Baking
|
||||
void bake_lights();
|
||||
void bake_light(Ref<VoxelLight> light);
|
||||
void bake_light(Ref<TerraLight> light);
|
||||
void clear_baked_lights();
|
||||
|
||||
#if PROPS_PRESENT
|
||||
@ -280,8 +280,8 @@ public:
|
||||
void physics_process(const float delta);
|
||||
void world_transform_changed();
|
||||
void visibility_changed(const bool visible);
|
||||
void world_light_added(const Ref<VoxelLight> &light);
|
||||
void world_light_removed(const Ref<VoxelLight> &light);
|
||||
void world_light_added(const Ref<TerraLight> &light);
|
||||
void world_light_removed(const Ref<TerraLight> &light);
|
||||
void generation_process(const float delta);
|
||||
void generation_physics_process(const float delta);
|
||||
|
||||
@ -292,8 +292,8 @@ public:
|
||||
Vector3 to_local(Vector3 p_global) const;
|
||||
Vector3 to_global(Vector3 p_local) const;
|
||||
|
||||
VoxelChunk();
|
||||
~VoxelChunk();
|
||||
TerraChunk();
|
||||
~TerraChunk();
|
||||
|
||||
protected:
|
||||
virtual void _enter_tree();
|
||||
@ -350,7 +350,7 @@ protected:
|
||||
|
||||
bool _is_in_tree;
|
||||
|
||||
VoxelWorld *_voxel_world;
|
||||
TerraWorld *_voxel_world;
|
||||
|
||||
int _position_x;
|
||||
int _position_y;
|
||||
@ -372,11 +372,11 @@ protected:
|
||||
float _voxel_scale;
|
||||
|
||||
int _current_job;
|
||||
Vector<Ref<VoxelJob> > _jobs;
|
||||
Vector<Ref<TerraJob> > _jobs;
|
||||
|
||||
Ref<VoxelmanLibrary> _library;
|
||||
Ref<TerramanLibrary> _library;
|
||||
|
||||
Vector<Ref<VoxelStructure> > _voxel_structures;
|
||||
Vector<Ref<TerraStructure> > _voxel_structures;
|
||||
|
||||
#if PROPS_PRESENT
|
||||
Vector<PropDataStore> _props;
|
||||
|
@ -22,88 +22,88 @@ SOFTWARE.
|
||||
|
||||
#include "voxel_structure.h"
|
||||
|
||||
bool VoxelStructure::get_use_aabb() const {
|
||||
bool TerraStructure::get_use_aabb() const {
|
||||
return _use_aabb;
|
||||
}
|
||||
void VoxelStructure::set_use_aabb(const bool value) {
|
||||
void TerraStructure::set_use_aabb(const bool value) {
|
||||
_use_aabb = value;
|
||||
}
|
||||
|
||||
AABB VoxelStructure::get_chunk_aabb() const {
|
||||
AABB TerraStructure::get_chunk_aabb() const {
|
||||
return _chunk_aabb;
|
||||
}
|
||||
void VoxelStructure::set_chunk_aabb(const AABB &value) {
|
||||
void TerraStructure::set_chunk_aabb(const AABB &value) {
|
||||
_chunk_aabb = value;
|
||||
}
|
||||
|
||||
int VoxelStructure::get_position_x() const {
|
||||
int TerraStructure::get_position_x() const {
|
||||
return _position_x;
|
||||
}
|
||||
void VoxelStructure::set_position_x(const int value) {
|
||||
void TerraStructure::set_position_x(const int value) {
|
||||
_position_x = value;
|
||||
}
|
||||
|
||||
int VoxelStructure::get_position_y() const {
|
||||
int TerraStructure::get_position_y() const {
|
||||
return _position_y;
|
||||
}
|
||||
void VoxelStructure::set_position_y(const int value) {
|
||||
void TerraStructure::set_position_y(const int value) {
|
||||
_position_y = value;
|
||||
}
|
||||
|
||||
int VoxelStructure::get_position_z() const {
|
||||
int TerraStructure::get_position_z() const {
|
||||
return _position_z;
|
||||
}
|
||||
void VoxelStructure::set_position_z(const int value) {
|
||||
void TerraStructure::set_position_z(const int value) {
|
||||
_position_z = value;
|
||||
}
|
||||
|
||||
void VoxelStructure::set_position(const int x, const int y, const int z) {
|
||||
void TerraStructure::set_position(const int x, const int y, const int z) {
|
||||
_position_x = x;
|
||||
_position_y = y;
|
||||
_position_z = z;
|
||||
}
|
||||
|
||||
void VoxelStructure::write_to_chunk(Ref<VoxelChunk> chunk) {
|
||||
void TerraStructure::write_to_chunk(Ref<TerraChunk> chunk) {
|
||||
ERR_FAIL_COND(!chunk.is_valid());
|
||||
|
||||
if (has_method("_write_to_chunk"))
|
||||
call("_write_to_chunk", chunk);
|
||||
}
|
||||
|
||||
VoxelStructure::VoxelStructure() {
|
||||
TerraStructure::TerraStructure() {
|
||||
_use_aabb = true;
|
||||
_position_x = 0;
|
||||
_position_y = 0;
|
||||
_position_z = 0;
|
||||
}
|
||||
|
||||
VoxelStructure::~VoxelStructure() {
|
||||
TerraStructure::~TerraStructure() {
|
||||
}
|
||||
|
||||
void VoxelStructure::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_write_to_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
|
||||
void TerraStructure::_bind_methods() {
|
||||
BIND_VMETHOD(MethodInfo("_write_to_chunk", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "TerraChunk")));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_use_aabb"), &VoxelStructure::get_use_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_use_aabb", "value"), &VoxelStructure::set_use_aabb);
|
||||
ClassDB::bind_method(D_METHOD("get_use_aabb"), &TerraStructure::get_use_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_use_aabb", "value"), &TerraStructure::set_use_aabb);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_aabb"), "set_use_aabb", "get_use_aabb");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_chunk_aabb"), &VoxelStructure::get_chunk_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_chunk_aabb", "value"), &VoxelStructure::set_chunk_aabb);
|
||||
ClassDB::bind_method(D_METHOD("get_chunk_aabb"), &TerraStructure::get_chunk_aabb);
|
||||
ClassDB::bind_method(D_METHOD("set_chunk_aabb", "value"), &TerraStructure::set_chunk_aabb);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::AABB, "chunk_aabb"), "set_chunk_aabb", "get_chunk_aabb");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_position_x"), &VoxelStructure::get_position_x);
|
||||
ClassDB::bind_method(D_METHOD("set_position_x", "value"), &VoxelStructure::set_position_x);
|
||||
ClassDB::bind_method(D_METHOD("get_position_x"), &TerraStructure::get_position_x);
|
||||
ClassDB::bind_method(D_METHOD("set_position_x", "value"), &TerraStructure::set_position_x);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "position_x"), "set_position_x", "get_position_x");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_position_y"), &VoxelStructure::get_position_y);
|
||||
ClassDB::bind_method(D_METHOD("set_position_y", "value"), &VoxelStructure::set_position_y);
|
||||
ClassDB::bind_method(D_METHOD("get_position_y"), &TerraStructure::get_position_y);
|
||||
ClassDB::bind_method(D_METHOD("set_position_y", "value"), &TerraStructure::set_position_y);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "position_y"), "set_position_y", "get_position_y");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_position_z"), &VoxelStructure::get_position_z);
|
||||
ClassDB::bind_method(D_METHOD("set_position_z", "value"), &VoxelStructure::set_position_z);
|
||||
ClassDB::bind_method(D_METHOD("get_position_z"), &TerraStructure::get_position_z);
|
||||
ClassDB::bind_method(D_METHOD("set_position_z", "value"), &TerraStructure::set_position_z);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "position_z"), "set_position_z", "get_position_z");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_position", "x", "y", "z"), &VoxelStructure::set_position);
|
||||
ClassDB::bind_method(D_METHOD("set_position", "x", "y", "z"), &TerraStructure::set_position);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("write_to_chunk", "chunk"), &VoxelStructure::write_to_chunk);
|
||||
ClassDB::bind_method(D_METHOD("write_to_chunk", "chunk"), &TerraStructure::write_to_chunk);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_STRUCTURE_H
|
||||
#define VOXEL_STRUCTURE_H
|
||||
#ifndef TERRA_STRUCTURE_H
|
||||
#define TERRA_STRUCTURE_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -41,8 +41,8 @@ include_pool_vector
|
||||
#include "core/math/aabb.h"
|
||||
#include "voxel_chunk.h"
|
||||
|
||||
class VoxelStructure : public Resource {
|
||||
GDCLASS(VoxelStructure, Resource);
|
||||
class TerraStructure : public Resource {
|
||||
GDCLASS(TerraStructure, Resource);
|
||||
|
||||
public:
|
||||
bool get_use_aabb() const;
|
||||
@ -62,10 +62,10 @@ public:
|
||||
|
||||
void set_position(const int x, const int y, const int z);
|
||||
|
||||
void write_to_chunk(Ref<VoxelChunk> chunk);
|
||||
void write_to_chunk(Ref<TerraChunk> chunk);
|
||||
|
||||
VoxelStructure();
|
||||
~VoxelStructure();
|
||||
TerraStructure();
|
||||
~TerraStructure();
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_H
|
||||
#define VOXEL_WORLD_H
|
||||
#ifndef TERRA_WORLD_H
|
||||
#define TERRA_WORLD_H
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
@ -47,12 +47,12 @@ SOFTWARE.
|
||||
#include "../../props/props/prop_data.h"
|
||||
#endif
|
||||
|
||||
class VoxelStructure;
|
||||
class VoxelChunk;
|
||||
class TerraStructure;
|
||||
class TerraChunk;
|
||||
class PropData;
|
||||
|
||||
class VoxelWorld : public Navigation {
|
||||
GDCLASS(VoxelWorld, Navigation);
|
||||
class TerraWorld : public Navigation {
|
||||
GDCLASS(TerraWorld, Navigation);
|
||||
|
||||
public:
|
||||
enum ChannelTypeInfo {
|
||||
@ -94,11 +94,11 @@ public:
|
||||
int get_max_frame_chunk_build_steps() const;
|
||||
void set_max_frame_chunk_build_steps(const int value);
|
||||
|
||||
Ref<VoxelmanLibrary> get_library();
|
||||
void set_library(const Ref<VoxelmanLibrary> &library);
|
||||
Ref<TerramanLibrary> get_library();
|
||||
void set_library(const Ref<TerramanLibrary> &library);
|
||||
|
||||
Ref<VoxelmanLevelGenerator> get_level_generator() const;
|
||||
void set_level_generator(const Ref<VoxelmanLevelGenerator> &level_generator);
|
||||
Ref<TerramanLevelGenerator> get_level_generator() const;
|
||||
void set_level_generator(const Ref<TerramanLevelGenerator> &level_generator);
|
||||
|
||||
float get_voxel_scale() const;
|
||||
void set_voxel_scale(const float value);
|
||||
@ -114,41 +114,41 @@ public:
|
||||
void set_player_bind(Node *player);
|
||||
|
||||
//World Areas
|
||||
Ref<WorldArea> world_area_get(const int index) const;
|
||||
void world_area_add(const Ref<WorldArea> &area);
|
||||
Ref<TerraWorldArea> world_area_get(const int index) const;
|
||||
void world_area_add(const Ref<TerraWorldArea> &area);
|
||||
void world_area_remove(const int index);
|
||||
void world_areas_clear();
|
||||
int world_area_get_count() const;
|
||||
|
||||
//Voxel Structures
|
||||
Ref<VoxelStructure> voxel_structure_get(const int index) const;
|
||||
void voxel_structure_add(const Ref<VoxelStructure> &structure);
|
||||
void voxel_structure_remove(const Ref<VoxelStructure> &structure);
|
||||
//Terra Structures
|
||||
Ref<TerraStructure> voxel_structure_get(const int index) const;
|
||||
void voxel_structure_add(const Ref<TerraStructure> &structure);
|
||||
void voxel_structure_remove(const Ref<TerraStructure> &structure);
|
||||
void voxel_structure_remove_index(const int index);
|
||||
void voxel_structures_clear();
|
||||
int voxel_structure_get_count() const;
|
||||
void voxel_structure_add_at_position(Ref<VoxelStructure> structure, const Vector3 &world_position);
|
||||
void voxel_structure_add_at_position(Ref<TerraStructure> structure, const Vector3 &world_position);
|
||||
|
||||
Vector<Variant> voxel_structures_get();
|
||||
void voxel_structures_set(const Vector<Variant> &structures);
|
||||
|
||||
//Chunks
|
||||
void chunk_add(Ref<VoxelChunk> chunk, const int x, const int y, const int z);
|
||||
void chunk_add(Ref<TerraChunk> chunk, const int x, const int y, const int z);
|
||||
bool chunk_has(const int x, const int y, const int z) const;
|
||||
Ref<VoxelChunk> chunk_get(const int x, const int y, const int z);
|
||||
Ref<VoxelChunk> chunk_remove(const int x, const int y, const int z);
|
||||
Ref<VoxelChunk> chunk_remove_index(const int index);
|
||||
Ref<VoxelChunk> chunk_get_index(const int index);
|
||||
Ref<TerraChunk> chunk_get(const int x, const int y, const int z);
|
||||
Ref<TerraChunk> chunk_remove(const int x, const int y, const int z);
|
||||
Ref<TerraChunk> chunk_remove_index(const int index);
|
||||
Ref<TerraChunk> chunk_get_index(const int index);
|
||||
|
||||
int chunk_get_count() const;
|
||||
|
||||
void chunks_clear();
|
||||
|
||||
Ref<VoxelChunk> chunk_get_or_create(const int x, const int y, const int z);
|
||||
Ref<VoxelChunk> chunk_create(const int x, const int y, const int z);
|
||||
void chunk_setup(Ref<VoxelChunk> chunk);
|
||||
Ref<TerraChunk> chunk_get_or_create(const int x, const int y, const int z);
|
||||
Ref<TerraChunk> chunk_create(const int x, const int y, const int z);
|
||||
void chunk_setup(Ref<TerraChunk> chunk);
|
||||
|
||||
void chunk_generate(Ref<VoxelChunk> chunk);
|
||||
void chunk_generate(Ref<TerraChunk> chunk);
|
||||
|
||||
Vector<Variant> chunks_get();
|
||||
void chunks_set(const Vector<Variant> &chunks);
|
||||
@ -156,15 +156,15 @@ public:
|
||||
bool can_chunk_do_build_step();
|
||||
bool is_position_walkable(const Vector3 &p_pos);
|
||||
|
||||
void on_chunk_mesh_generation_finished(Ref<VoxelChunk> p_chunk);
|
||||
void on_chunk_mesh_generation_finished(Ref<TerraChunk> p_chunk);
|
||||
|
||||
void generation_queue_add_to(const Ref<VoxelChunk> &chunk);
|
||||
Ref<VoxelChunk> generation_queue_get_index(const int index);
|
||||
void generation_queue_add_to(const Ref<TerraChunk> &chunk);
|
||||
Ref<TerraChunk> generation_queue_get_index(const int index);
|
||||
void generation_queue_remove_index(const int index);
|
||||
int generation_queue_get_size() const;
|
||||
|
||||
void generation_add_to(const Ref<VoxelChunk> &chunk);
|
||||
Ref<VoxelChunk> generation_get_index(const int index);
|
||||
void generation_add_to(const Ref<TerraChunk> &chunk);
|
||||
Ref<TerraChunk> generation_get_index(const int index);
|
||||
void generation_remove_index(const int index);
|
||||
int generation_get_size() const;
|
||||
|
||||
@ -173,8 +173,8 @@ public:
|
||||
#endif
|
||||
|
||||
//Lights
|
||||
void light_add(const Ref<VoxelLight> &light);
|
||||
Ref<VoxelLight> light_get(const int index);
|
||||
void light_add(const Ref<TerraLight> &light);
|
||||
Ref<TerraLight> light_get(const int index);
|
||||
void light_remove(const int index);
|
||||
int light_get_count() const;
|
||||
void lights_clear();
|
||||
@ -185,18 +185,18 @@ public:
|
||||
//Helpers
|
||||
uint8_t get_voxel_at_world_position(const Vector3 &world_position, const int channel_index);
|
||||
void set_voxel_at_world_position(const Vector3 &world_position, const uint8_t data, const int channel_index, const bool rebuild = true);
|
||||
Ref<VoxelChunk> get_chunk_at_world_position(const Vector3 &world_position);
|
||||
Ref<VoxelChunk> get_or_create_chunk_at_world_position(const Vector3 &world_position);
|
||||
Ref<TerraChunk> get_chunk_at_world_position(const Vector3 &world_position);
|
||||
Ref<TerraChunk> get_or_create_chunk_at_world_position(const Vector3 &world_position);
|
||||
void set_voxel_with_tool(const bool mode_add, const Vector3 hit_position, const Vector3 hit_normal, const int selected_voxel, const int isolevel);
|
||||
|
||||
int get_channel_index_info(const ChannelTypeInfo channel_type);
|
||||
|
||||
VoxelWorld();
|
||||
~VoxelWorld();
|
||||
TerraWorld();
|
||||
~TerraWorld();
|
||||
|
||||
protected:
|
||||
virtual void _generate_chunk(Ref<VoxelChunk> chunk);
|
||||
virtual Ref<VoxelChunk> _create_chunk(int x, int y, int z, Ref<VoxelChunk> p_chunk);
|
||||
virtual void _generate_chunk(Ref<TerraChunk> chunk);
|
||||
virtual Ref<TerraChunk> _create_chunk(int x, int y, int z, Ref<TerraChunk> p_chunk);
|
||||
virtual int _get_channel_index_info(const ChannelTypeInfo channel_type);
|
||||
virtual void _set_voxel_with_tool(const bool mode_add, const Vector3 hit_position, const Vector3 hit_normal, const int selected_voxel, const int isolevel);
|
||||
|
||||
@ -248,35 +248,35 @@ private:
|
||||
int _data_margin_start;
|
||||
int _data_margin_end;
|
||||
|
||||
Ref<VoxelmanLibrary> _library;
|
||||
Ref<VoxelmanLevelGenerator> _level_generator;
|
||||
Ref<TerramanLibrary> _library;
|
||||
Ref<TerramanLevelGenerator> _level_generator;
|
||||
float _voxel_scale;
|
||||
int _chunk_spawn_range;
|
||||
|
||||
HashMap<IntPos, Ref<VoxelChunk>, IntPosHasher> _chunks;
|
||||
Vector<Ref<VoxelChunk> > _chunks_vector;
|
||||
HashMap<IntPos, Ref<TerraChunk>, IntPosHasher> _chunks;
|
||||
Vector<Ref<TerraChunk> > _chunks_vector;
|
||||
|
||||
Vector<Ref<WorldArea> > _world_areas;
|
||||
Vector<Ref<TerraWorldArea> > _world_areas;
|
||||
|
||||
Vector<Ref<VoxelStructure> > _voxel_structures;
|
||||
Vector<Ref<TerraStructure> > _voxel_structures;
|
||||
|
||||
NodePath _player_path;
|
||||
Spatial *_player;
|
||||
|
||||
bool _use_threads;
|
||||
int _max_concurrent_generations;
|
||||
Vector<Ref<VoxelChunk> > _generation_queue;
|
||||
Vector<Ref<VoxelChunk> > _generating;
|
||||
Vector<Ref<TerraChunk> > _generation_queue;
|
||||
Vector<Ref<TerraChunk> > _generating;
|
||||
int _max_frame_chunk_build_steps;
|
||||
int _num_frame_chunk_build_steps;
|
||||
|
||||
Vector<Ref<VoxelLight> > _lights;
|
||||
Vector<Ref<TerraLight> > _lights;
|
||||
};
|
||||
|
||||
_FORCE_INLINE_ bool operator==(const VoxelWorld::IntPos &a, const VoxelWorld::IntPos &b) {
|
||||
_FORCE_INLINE_ bool operator==(const TerraWorld::IntPos &a, const TerraWorld::IntPos &b) {
|
||||
return a.x == b.x && a.y == b.y && a.z == b.z;
|
||||
}
|
||||
|
||||
VARIANT_ENUM_CAST(VoxelWorld::ChannelTypeInfo);
|
||||
VARIANT_ENUM_CAST(TerraWorld::ChannelTypeInfo);
|
||||
|
||||
#endif
|
||||
|
@ -42,7 +42,7 @@ SOFTWARE.
|
||||
#include spatial_editor_plugin_h
|
||||
#include camera_h
|
||||
|
||||
bool VoxelWorldEditor::forward_spatial_input_event(Camera *p_camera, const Ref<InputEvent> &p_event) {
|
||||
bool TerraWorldEditor::forward_spatial_input_event(Camera *p_camera, const Ref<InputEvent> &p_event) {
|
||||
if (!_world || !_world->get_editable()) {
|
||||
return false;
|
||||
}
|
||||
@ -51,7 +51,7 @@ bool VoxelWorldEditor::forward_spatial_input_event(Camera *p_camera, const Ref<I
|
||||
|
||||
if (mb.is_valid()) {
|
||||
if (mb->is_pressed()) {
|
||||
Ref<VoxelmanLibrary> lib = _world->get_library();
|
||||
Ref<TerramanLibrary> lib = _world->get_library();
|
||||
|
||||
if (!lib.is_valid())
|
||||
return false;
|
||||
@ -69,7 +69,7 @@ bool VoxelWorldEditor::forward_spatial_input_event(Camera *p_camera, const Ref<I
|
||||
return false;
|
||||
}
|
||||
|
||||
bool VoxelWorldEditor::do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click) {
|
||||
bool TerraWorldEditor::do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click) {
|
||||
if (!spatial_editor || !_world || !_world->is_inside_world())
|
||||
return false;
|
||||
|
||||
@ -114,14 +114,14 @@ bool VoxelWorldEditor::do_input_action(Camera *p_camera, const Point2 &p_point,
|
||||
return false;
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::edit(VoxelWorld *p_world) {
|
||||
void TerraWorldEditor::edit(TerraWorld *p_world) {
|
||||
_world = p_world;
|
||||
|
||||
if (!_world)
|
||||
return;
|
||||
|
||||
_channel_type = _world->get_channel_index_info(VoxelWorld::CHANNEL_TYPE_INFO_TYPE);
|
||||
_channel_isolevel = _world->get_channel_index_info(VoxelWorld::CHANNEL_TYPE_INFO_ISOLEVEL);
|
||||
_channel_type = _world->get_channel_index_info(TerraWorld::CHANNEL_TYPE_INFO_TYPE);
|
||||
_channel_isolevel = _world->get_channel_index_info(TerraWorld::CHANNEL_TYPE_INFO_ISOLEVEL);
|
||||
|
||||
if (_channel_isolevel == -1) {
|
||||
_isolevel_slider->hide();
|
||||
@ -139,7 +139,7 @@ void VoxelWorldEditor::edit(VoxelWorld *p_world) {
|
||||
}
|
||||
}
|
||||
|
||||
Ref<VoxelmanLibrary> library = _world->get_library();
|
||||
Ref<TerramanLibrary> library = _world->get_library();
|
||||
|
||||
if (!library.is_valid())
|
||||
return;
|
||||
@ -149,7 +149,7 @@ void VoxelWorldEditor::edit(VoxelWorld *p_world) {
|
||||
|
||||
bool f = false;
|
||||
for (int i = 0; i < library->voxel_surface_get_num(); ++i) {
|
||||
Ref<VoxelSurface> surface = library->voxel_surface_get(i);
|
||||
Ref<TerraSurface> surface = library->voxel_surface_get(i);
|
||||
|
||||
if (!surface.is_valid())
|
||||
continue;
|
||||
@ -164,7 +164,7 @@ void VoxelWorldEditor::edit(VoxelWorld *p_world) {
|
||||
button->set_button_group(_surfaces_button_group);
|
||||
button->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
|
||||
button->CONNECT("button_up", this, VoxelWorldEditor, _on_surface_button_pressed);
|
||||
button->CONNECT("button_up", this, TerraWorldEditor, _on_surface_button_pressed);
|
||||
|
||||
_surfaces_vbox_container->add_child(button);
|
||||
|
||||
@ -175,7 +175,7 @@ void VoxelWorldEditor::edit(VoxelWorld *p_world) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelWorldEditor::VoxelWorldEditor() {
|
||||
TerraWorldEditor::TerraWorldEditor() {
|
||||
_world = NULL;
|
||||
_selected_type = 0;
|
||||
_channel_type = -1;
|
||||
@ -184,7 +184,7 @@ VoxelWorldEditor::VoxelWorldEditor() {
|
||||
_editor = NULL;
|
||||
_tool_mode = TOOL_MODE_ADD;
|
||||
}
|
||||
VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
TerraWorldEditor::TerraWorldEditor(EditorNode *p_editor) {
|
||||
_world = NULL;
|
||||
_selected_type = 0;
|
||||
_channel_type = -1;
|
||||
@ -208,7 +208,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
add_button->set_button_group(_tool_button_group);
|
||||
add_button->set_meta("tool_mode", TOOL_MODE_ADD);
|
||||
|
||||
add_button->CONNECT("button_up", this, VoxelWorldEditor, _on_tool_button_pressed);
|
||||
add_button->CONNECT("button_up", this, TerraWorldEditor, _on_tool_button_pressed);
|
||||
|
||||
add_button->set_shortcut(ED_SHORTCUT("voxelman_world_editor/add_mode", "Add Mode", KEY_A));
|
||||
spatial_editor_hb->add_child(add_button);
|
||||
@ -219,7 +219,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
remove_button->set_button_group(_tool_button_group);
|
||||
remove_button->set_meta("tool_mode", TOOL_MODE_REMOVE);
|
||||
|
||||
remove_button->CONNECT("button_up", this, VoxelWorldEditor, _on_tool_button_pressed);
|
||||
remove_button->CONNECT("button_up", this, TerraWorldEditor, _on_tool_button_pressed);
|
||||
|
||||
remove_button->set_shortcut(ED_SHORTCUT("voxelman_world_editor/remove_mode", "Remove Mode", KEY_S));
|
||||
spatial_editor_hb->add_child(remove_button);
|
||||
@ -227,7 +227,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
ToolButton *insert_buton = memnew(ToolButton);
|
||||
insert_buton->set_text("Insert");
|
||||
|
||||
insert_buton->CONNECT("button_up", this, VoxelWorldEditor, _on_insert_block_at_camera_button_pressed);
|
||||
insert_buton->CONNECT("button_up", this, TerraWorldEditor, _on_insert_block_at_camera_button_pressed);
|
||||
|
||||
insert_buton->set_shortcut(ED_SHORTCUT("voxelman_world_editor/instert_block_at_camera", "Insert at camera", KEY_B));
|
||||
spatial_editor_hb->add_child(insert_buton);
|
||||
@ -242,7 +242,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
_isolevel_slider->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
spatial_editor_hb->add_child(_isolevel_slider);
|
||||
|
||||
_isolevel_slider->CONNECT("value_changed", this, VoxelWorldEditor, _on_isolevel_slider_value_changed);
|
||||
_isolevel_slider->CONNECT("value_changed", this, TerraWorldEditor, _on_isolevel_slider_value_changed);
|
||||
|
||||
_isolevel_slider->hide();
|
||||
|
||||
@ -258,18 +258,18 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
|
||||
|
||||
_surfaces_button_group.instance();
|
||||
}
|
||||
VoxelWorldEditor::~VoxelWorldEditor() {
|
||||
TerraWorldEditor::~TerraWorldEditor() {
|
||||
_world = NULL;
|
||||
|
||||
_surfaces_button_group.unref();
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_node_removed(Node *p_node) {
|
||||
void TerraWorldEditor::_node_removed(Node *p_node) {
|
||||
if (p_node == _world)
|
||||
_world = NULL;
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_on_surface_button_pressed() {
|
||||
void TerraWorldEditor::_on_surface_button_pressed() {
|
||||
BaseButton *button = _surfaces_button_group->get_pressed_button();
|
||||
|
||||
if (button) {
|
||||
@ -277,15 +277,15 @@ void VoxelWorldEditor::_on_surface_button_pressed() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_on_tool_button_pressed() {
|
||||
void TerraWorldEditor::_on_tool_button_pressed() {
|
||||
BaseButton *button = _tool_button_group->get_pressed_button();
|
||||
|
||||
if (button) {
|
||||
_tool_mode = static_cast<VoxelWorldEditorToolMode>(static_cast<int>(button->get_meta("tool_mode")));
|
||||
_tool_mode = static_cast<TerraWorldEditorToolMode>(static_cast<int>(button->get_meta("tool_mode")));
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_on_insert_block_at_camera_button_pressed() {
|
||||
void TerraWorldEditor::_on_insert_block_at_camera_button_pressed() {
|
||||
int selected_voxel = 0;
|
||||
int channel = 0;
|
||||
|
||||
@ -315,19 +315,19 @@ void VoxelWorldEditor::_on_insert_block_at_camera_button_pressed() {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_on_isolevel_slider_value_changed(float value) {
|
||||
void TerraWorldEditor::_on_isolevel_slider_value_changed(float value) {
|
||||
_current_isolevel = value;
|
||||
}
|
||||
|
||||
void VoxelWorldEditor::_bind_methods() {
|
||||
ClassDB::bind_method("_node_removed", &VoxelWorldEditor::_node_removed);
|
||||
ClassDB::bind_method("_on_surface_button_pressed", &VoxelWorldEditor::_on_surface_button_pressed);
|
||||
ClassDB::bind_method("_on_tool_button_pressed", &VoxelWorldEditor::_on_tool_button_pressed);
|
||||
ClassDB::bind_method("_on_insert_block_at_camera_button_pressed", &VoxelWorldEditor::_on_insert_block_at_camera_button_pressed);
|
||||
ClassDB::bind_method("_on_isolevel_slider_value_changed", &VoxelWorldEditor::_on_isolevel_slider_value_changed);
|
||||
void TerraWorldEditor::_bind_methods() {
|
||||
ClassDB::bind_method("_node_removed", &TerraWorldEditor::_node_removed);
|
||||
ClassDB::bind_method("_on_surface_button_pressed", &TerraWorldEditor::_on_surface_button_pressed);
|
||||
ClassDB::bind_method("_on_tool_button_pressed", &TerraWorldEditor::_on_tool_button_pressed);
|
||||
ClassDB::bind_method("_on_insert_block_at_camera_button_pressed", &TerraWorldEditor::_on_insert_block_at_camera_button_pressed);
|
||||
ClassDB::bind_method("_on_isolevel_slider_value_changed", &TerraWorldEditor::_on_isolevel_slider_value_changed);
|
||||
}
|
||||
|
||||
void VoxelWorldEditorPlugin::_notification(int p_what) {
|
||||
void TerraWorldEditorPlugin::_notification(int p_what) {
|
||||
if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
|
||||
switch ((int)EditorSettings::get_singleton()->get("editors/voxelman/editor_side")) {
|
||||
case 0: { // Left.
|
||||
@ -340,20 +340,20 @@ void VoxelWorldEditorPlugin::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
void VoxelWorldEditorPlugin::edit(Object *p_object) {
|
||||
voxel_world_editor->edit(Object::cast_to<VoxelWorld>(p_object));
|
||||
void TerraWorldEditorPlugin::edit(Object *p_object) {
|
||||
voxel_world_editor->edit(Object::cast_to<TerraWorld>(p_object));
|
||||
}
|
||||
|
||||
bool VoxelWorldEditorPlugin::handles(Object *p_object) const {
|
||||
if (!p_object->is_class("VoxelWorld"))
|
||||
bool TerraWorldEditorPlugin::handles(Object *p_object) const {
|
||||
if (!p_object->is_class("TerraWorld"))
|
||||
return false;
|
||||
|
||||
VoxelWorld *w = Object::cast_to<VoxelWorld>(p_object);
|
||||
TerraWorld *w = Object::cast_to<TerraWorld>(p_object);
|
||||
|
||||
return w->get_editable();
|
||||
}
|
||||
|
||||
void VoxelWorldEditorPlugin::make_visible(bool p_visible) {
|
||||
void TerraWorldEditorPlugin::make_visible(bool p_visible) {
|
||||
if (p_visible) {
|
||||
voxel_world_editor->show();
|
||||
voxel_world_editor->spatial_editor_hb->show();
|
||||
@ -366,13 +366,13 @@ void VoxelWorldEditorPlugin::make_visible(bool p_visible) {
|
||||
}
|
||||
}
|
||||
|
||||
VoxelWorldEditorPlugin::VoxelWorldEditorPlugin(EditorNode *p_node) {
|
||||
TerraWorldEditorPlugin::TerraWorldEditorPlugin(EditorNode *p_node) {
|
||||
editor = p_node;
|
||||
|
||||
EDITOR_DEF("editors/voxelman/editor_side", 1);
|
||||
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "editors/voxelman/editor_side", PROPERTY_HINT_ENUM, "Left,Right"));
|
||||
|
||||
voxel_world_editor = memnew(VoxelWorldEditor(editor));
|
||||
voxel_world_editor = memnew(TerraWorldEditor(editor));
|
||||
switch ((int)EditorSettings::get_singleton()->get("editors/voxelman/editor_side")) {
|
||||
case 0: { // Left.
|
||||
add_control_to_container(CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, voxel_world_editor);
|
||||
@ -384,5 +384,5 @@ VoxelWorldEditorPlugin::VoxelWorldEditorPlugin(EditorNode *p_node) {
|
||||
voxel_world_editor->hide();
|
||||
}
|
||||
|
||||
VoxelWorldEditorPlugin::~VoxelWorldEditorPlugin() {
|
||||
TerraWorldEditorPlugin::~TerraWorldEditorPlugin() {
|
||||
}
|
||||
|
@ -20,22 +20,22 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef VOXEL_WORLD_EDITOR_PLUGIN_H
|
||||
#define VOXEL_WORLD_EDITOR_PLUGIN_H
|
||||
#ifndef TERRA_WORLD_EDITOR_PLUGIN_H
|
||||
#define TERRA_WORLD_EDITOR_PLUGIN_H
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_plugin.h"
|
||||
|
||||
#include "../defines.h"
|
||||
|
||||
class VoxelWorld;
|
||||
class TerraWorld;
|
||||
class SpatialEditorPlugin;
|
||||
|
||||
class VoxelWorldEditor : public PanelContainer {
|
||||
GDCLASS(VoxelWorldEditor, PanelContainer);
|
||||
class TerraWorldEditor : public PanelContainer {
|
||||
GDCLASS(TerraWorldEditor, PanelContainer);
|
||||
|
||||
public:
|
||||
enum VoxelWorldEditorToolMode {
|
||||
enum TerraWorldEditorToolMode {
|
||||
TOOL_MODE_ADD = 0,
|
||||
TOOL_MODE_REMOVE,
|
||||
};
|
||||
@ -43,12 +43,12 @@ public:
|
||||
public:
|
||||
bool forward_spatial_input_event(Camera *p_camera, const Ref<InputEvent> &p_event);
|
||||
|
||||
void edit(VoxelWorld *p_world);
|
||||
void edit(TerraWorld *p_world);
|
||||
bool do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click);
|
||||
|
||||
VoxelWorldEditor();
|
||||
VoxelWorldEditor(EditorNode *p_editor);
|
||||
~VoxelWorldEditor();
|
||||
TerraWorldEditor();
|
||||
TerraWorldEditor(EditorNode *p_editor);
|
||||
~TerraWorldEditor();
|
||||
|
||||
HBoxContainer *spatial_editor_hb;
|
||||
|
||||
@ -66,8 +66,8 @@ private:
|
||||
|
||||
Ref<ButtonGroup> _tool_button_group;
|
||||
|
||||
VoxelWorldEditorToolMode _tool_mode;
|
||||
VoxelWorld *_world;
|
||||
TerraWorldEditorToolMode _tool_mode;
|
||||
TerraWorld *_world;
|
||||
|
||||
HSlider *_isolevel_slider;
|
||||
|
||||
@ -81,10 +81,10 @@ private:
|
||||
int _channel_isolevel;
|
||||
};
|
||||
|
||||
class VoxelWorldEditorPlugin : public EditorPlugin {
|
||||
GDCLASS(VoxelWorldEditorPlugin, EditorPlugin);
|
||||
class TerraWorldEditorPlugin : public EditorPlugin {
|
||||
GDCLASS(TerraWorldEditorPlugin, EditorPlugin);
|
||||
|
||||
VoxelWorldEditor *voxel_world_editor;
|
||||
TerraWorldEditor *voxel_world_editor;
|
||||
EditorNode *editor;
|
||||
|
||||
protected:
|
||||
@ -92,14 +92,14 @@ protected:
|
||||
|
||||
public:
|
||||
virtual bool forward_spatial_gui_input(Camera *p_camera, const Ref<InputEvent> &p_event) { return voxel_world_editor->forward_spatial_input_event(p_camera, p_event); }
|
||||
virtual String get_name() const { return "VoxelWorldEditor"; }
|
||||
virtual String get_name() const { return "TerraWorldEditor"; }
|
||||
bool has_main_screen() const { return false; }
|
||||
virtual void edit(Object *p_object);
|
||||
virtual bool handles(Object *p_object) const;
|
||||
virtual void make_visible(bool p_visible);
|
||||
|
||||
VoxelWorldEditorPlugin(EditorNode *p_node);
|
||||
~VoxelWorldEditorPlugin();
|
||||
TerraWorldEditorPlugin(EditorNode *p_node);
|
||||
~TerraWorldEditorPlugin();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user