Moved 4.0 compatibility code into a new defines.h (like in ESS).

This commit is contained in:
Relintai 2020-05-23 10:34:47 +02:00
parent 703acd1b56
commit 1d51be2f0b
24 changed files with 217 additions and 347 deletions

120
defines.h Normal file
View File

@ -0,0 +1,120 @@
#ifndef VOXELMAN_DEFINES_H
#define VOXELMAN_DEFINES_H
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define GODOT4 true
#endif
//includes
#if GODOT4
#define core_input_h "core/input/input_event.h"
#define spatial_editor_plugin_h "editor/plugins/node_3d_editor_plugin.h"
#define camera_h "scene/3d/camera_3d.h"
#define spatial_h "scene/3d/node_3d.h"
#define navigation_h "scene/3d/navigation_3d.h"
#define light_h "scene/3d/light_3d.h"
#define visual_server_h "servers/rendering_server.h"
#define mesh_instance_h "scene/3d/mesh_instance_3d.h"
#define pool_vector_h "core/vector.h"
#define physics_server_h "servers/physics_server_3d.h"
#define immediate_geometry_h "scene/3d/immediate_geometry_3d.h"
#define include_pool_vector \
template <class N> \
class Vector; \
template <class N> \
using PoolVector = Vector<N>;
#else
#define core_input_h "core/os/input.h"
#define spatial_editor_plugin_h "editor/plugins/spatial_editor_plugin.h"
#define camera_h "scene/3d/camera.h"
#define spatial_h "scene/3d/spatial.h"
#define navigation_h "scene/3d/navigation.h"
#define light_h "scene/3d/light.h"
#define visual_server_h "servers/visual_server.h"
#define mesh_instance_h "scene/3d/mesh_instance.h"
#define pool_vector_h "core/pool_vector.h"
#define physics_server_h "servers/physics_server.h"
#define immediate_geometry_h "scene/3d/immediate_geometry.h"
#define include_pool_vector ""
#endif
//Type Defines
#if GODOT4
#define PhysicsDirectSpaceState PhysicsDirectSpaceState3D
#define SpatialEditor Node3DEditor
#define SpatialEditorPlugin Node3DEditorPlugin
#define SpatialEditorViewport Node3DEditorViewport
#define PoolStringArray PackedStringArray
#define REAL FLOAT
#define POOL_STRING_ARRAY PACKED_STRING_ARRAY
#define POOL_BYTE_ARRAY PACKED_BYTE_ARRAY
#define Spatial Node3D
#define SpatialMaterial StandardMaterial3D
#define PoolVector3Array PackedVector3Array
#define PoolVector2Array PackedVector2Array
#define PoolColorArray PackedColorArray
#define PoolIntArray PackedInt64Array
#define PoolRealArray PackedFloat32Array
#define PoolByteArray PackedByteArray
#define MeshInstance MeshInstance3D
#define Camera Camera3D
typedef class World3D World;
#define DirectionalLight DirectionalLight3D
typedef class ImmediateGeometry3D ImmediateGeometry;
typedef class Navigation3D Navigation;
typedef class PhysicsServer3D PhysicsServer;
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
//typedef class StandardMaterial3D SpatialMaterial;
//toodo figure out a way to have this
//#define Variant::CallError Callable::CallError
#endif
#if GODOT4
#define VARIANT_ARRAY_GET(arr) \
Vector<Variant> r; \
for (int i = 0; i < arr.size(); i++) { \
r.push_back(arr[i]); \
} \
return r;
#else
#define VARIANT_ARRAY_GET(arr) \
Vector<Variant> r; \
for (int i = 0; i < arr.size(); i++) { \
r.push_back(arr[i].get_ref_ptr()); \
} \
return r;
#endif
#define VARIANT_ARRAY_SET(arr, arr_into, type) \
arr_into.clear(); \
for (int i = 0; i < arr.size(); i++) { \
Ref<type> e = Ref<type>(arr[i]); \
arr_into.push_back(e); \
}
#if GODOT4
//TODO do this properly
#define INSTANCE_VALIDATE(var) var
#define CONNECT(sig, obj, target_method_class, method) connect(sig, callable_mp(obj, &target_method_class::method))
#define DISCONNECT(sig, obj, target_method_class, method) disconnect(sig, callable_mp(obj, &target_method_class::method))
#define GET_WORLD get_world_3d
#else
#define INSTANCE_VALIDATE(var) ObjectDB::instance_validate(var)
#define CONNECT(sig, obj, target_method_class, method) connect(sig, obj, #method)
#define DISCONNECT(sig, obj, target_method_class, method) disconnect(sig, obj, #method)
#define GET_WORLD get_world
#endif
#endif

View File

@ -24,12 +24,10 @@ SOFTWARE.
#include "voxelman_library_merger.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR >= 4
#if GODOT4
#define Texture Texture2D
typedef class StandardMaterial3D SpatialMaterial;
#endif
Ref<AtlasTexture> VoxelSurfaceMerger::get_region(const VoxelSurfaceSides side) {

View File

@ -29,9 +29,9 @@ SOFTWARE.
#include "../../texture_packer/texture_packer.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR >= 4
#if GODOT4
#define Texture Texture2D
#endif

View File

@ -24,7 +24,7 @@ SOFTWARE.
#include "scene/resources/packed_scene.h"
#include "core/version.h"
#include "../defines.h"
bool VoxelmanLibrary::get_initialized() const {
return _initialized;
@ -65,15 +65,7 @@ void VoxelmanLibrary::clear_materials() {
}
Vector<Variant> VoxelmanLibrary::get_materials() {
Vector<Variant> r;
for (int i = 0; i < _materials.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_materials[i].get_ref_ptr());
#else
r.push_back(_materials[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_materials);
}
void VoxelmanLibrary::set_materials(const Vector<Variant> &materials) {
@ -118,15 +110,7 @@ void VoxelmanLibrary::clear_liquid_materials() {
}
Vector<Variant> VoxelmanLibrary::get_liquid_materials() {
Vector<Variant> r;
for (int i = 0; i < _liquid_materials.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_liquid_materials[i].get_ref_ptr());
#else
r.push_back(_liquid_materials[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_liquid_materials);
}
void VoxelmanLibrary::set_liquid_materials(const Vector<Variant> &materials) {

View File

@ -25,11 +25,7 @@ SOFTWARE.
#include "scene/resources/packed_scene.h"
#include "scene/resources/texture.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define SpatialMaterial StandardMaterial3D
#endif
#include "../defines.h"
int VoxelmanLibraryMerger::get_texture_flags() const {
return _packer->get_texture_flags();
@ -123,15 +119,7 @@ void VoxelmanLibraryMerger::clear_surfaces() {
}
Vector<Variant> VoxelmanLibraryMerger::get_voxel_surfaces() {
Vector<Variant> r;
for (int i = 0; i < _voxel_surfaces.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_voxel_surfaces[i].get_ref_ptr());
#else
r.push_back(_voxel_surfaces[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_voxel_surfaces);
}
void VoxelmanLibraryMerger::set_voxel_surfaces(const Vector<Variant> &surfaces) {
@ -270,10 +258,10 @@ void VoxelmanLibraryMerger::_setup_material_albedo(const int material_index, con
VoxelmanLibraryMerger::VoxelmanLibraryMerger() {
_packer.instance();
#if VERSION_MAJOR < 4
_packer->set_texture_flags(Texture::FLAG_MIPMAPS | Texture::FLAG_FILTER);
#if GODOT4
#warning implement
#else
//nyi
_packer->set_texture_flags(Texture::FLAG_MIPMAPS | Texture::FLAG_FILTER);
#endif
_packer->set_max_atlas_size(1024);

View File

@ -22,7 +22,7 @@ SOFTWARE.
#include "voxelman_library_simple.h"
#include "core/version.h"
#include "../defines.h"
int VoxelmanLibrarySimple::get_atlas_columns() const {
return _atlas_columns;
@ -89,15 +89,7 @@ void VoxelmanLibrarySimple::clear_surfaces() {
}
Vector<Variant> VoxelmanLibrarySimple::get_voxel_surfaces() {
Vector<Variant> r;
for (int i = 0; i < _voxel_surfaces.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_voxel_surfaces[i].get_ref_ptr());
#else
r.push_back(_voxel_surfaces[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_voxel_surfaces);
}
void VoxelmanLibrarySimple::set_voxel_surfaces(const Vector<Variant> &surfaces) {

View File

@ -24,14 +24,9 @@ SOFTWARE.
#include "../../world/default/voxel_chunk_default.h"
#if VERSION_MAJOR < 4
#include "servers/visual_server.h"
#else
#include "servers/rendering_server.h"
#include "../../defines.h"
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
#endif
#include visual_server_h
void VoxelMesherCubic::_add_chunk(Ref<VoxelChunk> p_chunk) {
Ref<VoxelChunkDefault> chunk = p_chunk;

View File

@ -24,18 +24,10 @@ SOFTWARE.
#include "../../world/default/voxel_chunk_default.h"
#if VERSION_MAJOR < 4
#include "servers/visual_server.h"
#include "../../defines.h"
#include "scene/3d/mesh_instance.h"
#else
#include "servers/rendering_server.h"
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
#include "scene/3d/mesh_instance_3d.h"
#endif
#include visual_server_h
#include mesh_instance_h
_FORCE_INLINE_ int VoxelMesherDefault::get_build_flags() const {
return _build_flags;

View File

@ -22,22 +22,9 @@ SOFTWARE.
#include "voxel_mesher.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "servers/visual_server.h"
#include "scene/3d/mesh_instance.h"
#else
#include "servers/rendering_server.h"
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
#include "scene/3d/mesh_instance_3d.h"
#define REAL FLOAT
#endif
#include mesh_instance_h
#include "../world/default/voxel_chunk_default.h"
#include "../world/voxel_chunk.h"
@ -167,7 +154,7 @@ Array VoxelMesher::build_mesh() {
{
PoolVector<Vector3> array;
array.resize(_vertices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<Vector3>::Write w = array.write();
#endif
@ -175,7 +162,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _vertices[i].vertex);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
@ -189,7 +176,7 @@ Array VoxelMesher::build_mesh() {
{
PoolVector<Vector3> array;
array.resize(_vertices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<Vector3>::Write w = array.write();
#endif
@ -197,7 +184,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _vertices[i].normal);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
a[VisualServer::ARRAY_NORMAL] = array;
@ -206,7 +193,7 @@ Array VoxelMesher::build_mesh() {
if ((_format & VisualServer::ARRAY_FORMAT_COLOR) != 0) {
PoolVector<Color> array;
array.resize(_vertices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<Color>::Write w = array.write();
#endif
@ -214,7 +201,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _vertices[i].color);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
a[VisualServer::ARRAY_COLOR] = array;
@ -223,7 +210,7 @@ Array VoxelMesher::build_mesh() {
if ((_format & VisualServer::ARRAY_FORMAT_TEX_UV) != 0) {
PoolVector<Vector2> array;
array.resize(_vertices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<Vector2>::Write w = array.write();
#endif
@ -231,7 +218,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _vertices[i].uv);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
@ -241,7 +228,7 @@ Array VoxelMesher::build_mesh() {
if ((_format & VisualServer::ARRAY_FORMAT_TEX_UV2) != 0) {
PoolVector<Vector2> array;
array.resize(_vertices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<Vector2>::Write w = array.write();
#endif
@ -249,7 +236,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _vertices[i].uv2);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
a[VisualServer::ARRAY_TEX_UV2] = array;
@ -258,7 +245,7 @@ Array VoxelMesher::build_mesh() {
if (_indices.size() > 0) {
PoolVector<int> array;
array.resize(_indices.size());
#if VERSION_MAJOR < 4
#if !GODOT4
PoolVector<int>::Write w = array.write();
#endif
@ -266,7 +253,7 @@ Array VoxelMesher::build_mesh() {
array.set(i, _indices[i]);
}
#if VERSION_MAJOR < 4
#if !GODOT4
w.release();
#endif
a[VisualServer::ARRAY_INDEX] = array;

View File

@ -25,22 +25,12 @@ SOFTWARE.
#include "core/reference.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "core/pool_vector.h"
#include "scene/3d/mesh_instance.h"
#else
#include "core/vector.h"
#include pool_vector_h
include_pool_vector
template <class N>
using PoolVector = Vector<N>;
typedef PackedByteArray PoolByteArray;
class MeshInstance3D;
typedef MeshInstance3D MeshInstance;
#endif
#include mesh_instance_h
#include "core/color.h"
#include "core/math/rect2.h"

View File

@ -25,20 +25,14 @@ SOFTWARE.
#include "voxel_structure.h"
#include "core/version.h"
#if VERSION_MAJOR < 4
#include "core/pool_vector.h"
#else
#include "core/vector.h"
typedef PackedByteArray PoolByteArray;
#endif
#include "../defines.h"
#include pool_vector_h
include_pool_vector
#include "core/hash_map.h"
#include "voxel_chunk.h"
class BlockVoxelStructure : public VoxelStructure {
class BlockVoxelStructure : public VoxelStructure {
GDCLASS(BlockVoxelStructure, VoxelStructure);
public:

View File

@ -25,11 +25,7 @@ SOFTWARE.
#include "../../meshers/blocky/voxel_mesher_blocky.h"
#include "../../meshers/blocky/voxel_mesher_liquid_blocky.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define POOL_BYTE_ARRAY PACKED_BYTE_ARRAY
#endif
#include "../../defines.h"
VoxelChunkBlocky::VoxelChunkBlocky() {
}

View File

@ -22,24 +22,10 @@ SOFTWARE.
#include "voxel_chunk_default.h"
#include "core/version.h"
#include "../../defines.h"
#if VERSION_MAJOR < 4
#include "servers/visual_server.h"
#else
#include "servers/rendering_server.h"
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
#include "servers/physics_server_3d.h"
typedef class PhysicsServer3D PhysicsServer;
typedef class StandardMaterial3D SpatialMaterial;
typedef class World3D World;
#endif
#include visual_server_h
#include physics_server_h
#include "../../../opensimplex/open_simplex_noise.h"
#include "../../meshers/default/voxel_mesher_default.h"
@ -526,13 +512,8 @@ void VoxelChunkDefault::create_meshes(const int mesh_index, const int mesh_count
for (int i = 0; i < mesh_count; ++i) {
RID mesh_instance_rid = VS::get_singleton()->instance_create();
#if VERSION_MAJOR < 4
if (get_voxel_world()->get_world().is_valid())
VS::get_singleton()->instance_set_scenario(mesh_instance_rid, get_voxel_world()->get_world()->get_scenario());
#else
if (get_voxel_world()->get_world_3d().is_valid())
VS::get_singleton()->instance_set_scenario(mesh_instance_rid, get_voxel_world()->get_world_3d()->get_scenario());
#endif
if (get_voxel_world()->GET_WORLD().is_valid())
VS::get_singleton()->instance_set_scenario(mesh_instance_rid, get_voxel_world()->GET_WORLD()->get_scenario());
RID mesh_rid = VS::get_singleton()->mesh_create();
@ -611,11 +592,7 @@ void VoxelChunkDefault::create_colliders(const int mesh_index, const int layer_m
PhysicsServer::get_singleton()->body_set_state(body_rid, PhysicsServer::BODY_STATE_TRANSFORM, get_transform());
if (get_voxel_world()->is_inside_tree() && get_voxel_world()->is_inside_world()) {
#if VERSION_MAJOR < 4
Ref<World> world = get_voxel_world()->get_world();
#else
Ref<World> world = get_voxel_world()->get_world_3d();
#endif
Ref<World> world = get_voxel_world()->GET_WORLD();
if (world.is_valid() && world->get_space() != RID())
PhysicsServer::get_singleton()->body_set_space(body_rid, world->get_space());
@ -653,11 +630,7 @@ void VoxelChunkDefault::create_colliders_area(const int mesh_index, const int la
PhysicsServer::get_singleton()->area_set_collision_mask(area_rid, layer_mask);
if (get_voxel_world()->is_inside_tree() && get_voxel_world()->is_inside_world()) {
#if VERSION_MAJOR < 4
Ref<World> world = get_voxel_world()->get_world();
#else
Ref<World> world = get_voxel_world()->get_world_3d();
#endif
Ref<World> world = get_voxel_world()->GET_WORLD();
if (world.is_valid() && world->get_space() != RID())
PhysicsServer::get_singleton()->area_set_space(area_rid, world->get_space());
@ -1335,7 +1308,7 @@ void VoxelChunkDefault::_build_phase(int phase) {
}
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
#if VERSION_MAJOR < 4
#if !GODOT4
VS::get_singleton()->mesh_remove_surface(mesh_rid, 0);
#else
VS::get_singleton()->mesh_clear(mesh_rid);
@ -1425,7 +1398,7 @@ void VoxelChunkDefault::_build_phase(int phase) {
}
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
#if VERSION_MAJOR < 4
#if !GODOT4
VS::get_singleton()->mesh_remove_surface(mesh_rid, 0);
#else
VS::get_singleton()->mesh_clear(mesh_rid);

View File

@ -25,15 +25,9 @@ SOFTWARE.
#include "../voxel_chunk.h"
#include "core/version.h"
#include "../../defines.h"
#if VERSION_MAJOR < 4
#include "scene/3d/immediate_geometry.h"
#else
#include "scene/3d/immediate_geometry_3d.h"
typedef class ImmediateGeometry3D ImmediateGeometry;
#endif
#include immediate_geometry_h
#include "core/engine.h"
#include "core/os/mutex.h"

View File

@ -24,11 +24,7 @@ SOFTWARE.
#include "voxel_chunk_default.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define REAL FLOAT
#endif
#include "../../defines.h"
_FORCE_INLINE_ int VoxelWorldDefault::get_build_flags() const {
return _build_flags;
@ -58,11 +54,7 @@ void VoxelWorldDefault::update_lods() {
}
void VoxelWorldDefault::_update_lods() {
#if VERSION_MAJOR < 4
if (!get_player() || !ObjectDB::instance_validate(get_player())) {
#else
if (!get_player() || !get_player()) {
#endif
if (!get_player() || !INSTANCE_VALIDATE(get_player())) {
return;
}
@ -154,11 +146,7 @@ void VoxelWorldDefault::_notification(int p_what) {
return;
}
#if VERSION_MAJOR < 4
if (!ObjectDB::instance_validate(get_player())) {
#else
if (!get_player()) {
#endif
if (!INSTANCE_VALIDATE(get_player())) {
set_player(NULL);
return;
}

View File

@ -22,12 +22,6 @@ SOFTWARE.
#include "environment_data.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define REAL FLOAT
#endif
Ref<Environment> EnvironmentData::get_environment() {
return _environment;
}

View File

@ -23,15 +23,9 @@ SOFTWARE.
#ifndef ENVIRONMENT_DATA_H
#define ENVIRONMENT_DATA_H
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "scene/3d/light.h"
#else
#include "scene/3d/light_3d.h"
typedef class DirectionalLight3D DirectionalLight;
#endif
#include light_h
#include "core/color.h"
#include "core/resource.h"

View File

@ -26,21 +26,7 @@ SOFTWARE.
#include "../thirdparty/lz4/lz4.h"
#if VERSION_MAJOR < 4
#include "servers/visual_server.h"
#else
#include "servers/rendering_server.h"
typedef class RenderingServer VisualServer;
typedef class RenderingServer VS;
#define REAL FLOAT
typedef PackedVector3Array PoolVector3Array;
typedef PackedVector2Array PoolVector2Array;
typedef PackedColorArray PoolColorArray;
typedef PackedInt32Array PoolIntArray;
#endif
#include "../defines.h"
_FORCE_INLINE_ bool VoxelChunk::get_is_build_threaded() const {
return _is_build_threaded;
@ -478,7 +464,7 @@ PoolByteArray VoxelChunk::get_channel_compressed(const int channel_index) const
int bound = LZ4_compressBound(size);
arr.resize(bound);
#if VERSION_MAJOR < 4
#if !GODOT4
PoolByteArray::Write w = arr.write();
int ns = LZ4_compress_default(reinterpret_cast<char *>(ch), reinterpret_cast<char *>(w.ptr()), size, bound);
@ -512,7 +498,7 @@ void VoxelChunk::set_channel_compressed(const int channel_index, const PoolByteA
int ds = data.size();
#if VERSION_MAJOR < 4
#if !GODOT4
PoolByteArray::Read r = data.read();
//We are not going to write to it
@ -546,11 +532,7 @@ void VoxelChunk::create_meshers() {
}
void VoxelChunk::build(const bool immediate) {
#if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(get_voxel_world()));
#else
ERR_FAIL_COND(!get_voxel_world());
#endif
ERR_FAIL_COND(!INSTANCE_VALIDATE(get_voxel_world()));
ERR_FAIL_COND(!get_voxel_world()->is_inside_tree());
ERR_FAIL_COND(!is_in_tree());
ERR_FAIL_COND_MSG(!has_method("_build"), "VoxelChunk: _build(immediate : bool) is missing! Please implement it!");
@ -644,7 +626,7 @@ Array VoxelChunk::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mu
if (colors.size() < uvs.size())
colors.resize(uvs.size());
#if VERSION_MAJOR < 4
#if !GODOT4
img->lock();
#endif
@ -657,7 +639,7 @@ Array VoxelChunk::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mu
colors.set(i, colors[i] * c * mul_color);
}
#if VERSION_MAJOR < 4
#if !GODOT4
img->unlock();
#endif

View File

@ -25,13 +25,10 @@ SOFTWARE.
#include "core/resource.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "core/pool_vector.h"
#else
#include "core/vector.h"
#endif
#include pool_vector_h
include_pool_vector
#include "core/engine.h"
#include "core/os/mutex.h"
@ -61,7 +58,7 @@ SOFTWARE.
#define Texture Texture2D
#endif
class VoxelWorld;
class VoxelWorld;
class VoxelChunk : public Resource {
GDCLASS(VoxelChunk, Resource);
@ -260,11 +257,11 @@ protected:
float _voxel_scale;
Ref<VoxelmanLibrary> _library;
Vector<Ref<VoxelMesher> > _meshers;
Vector<Ref<VoxelMesher> > _liquid_meshers;
Vector<Ref<VoxelMesher>> _meshers;
Vector<Ref<VoxelMesher>> _liquid_meshers;
//mergeable props
Vector<Ref<VoxelChunkPropData> > _props;
Vector<Ref<VoxelChunkPropData>> _props;
Transform _transform;
};

View File

@ -25,16 +25,10 @@ SOFTWARE.
#include "core/resource.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "core/pool_vector.h"
#else
#include "core/vector.h"
template <class N>
using PoolVector = Vector<N>;
#endif
#include pool_vector_h
include_pool_vector
#include "core/hash_map.h"
#include "core/math/aabb.h"

View File

@ -26,11 +26,7 @@ SOFTWARE.
#include "voxel_chunk_prop_data.h"
#include "voxel_structure.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define REAL FLOAT
#endif
#include "../defines.h"
const String VoxelWorld::BINDING_STRING_CHANNEL_TYPE_INFO = "Type,Isolevel,Liquid,Liquid Level";
@ -238,15 +234,7 @@ void VoxelWorld::add_voxel_structure_at_position(Ref<VoxelStructure> structure,
}
Vector<Variant> VoxelWorld::get_voxel_structures() {
Vector<Variant> r;
for (int i = 0; i < _voxel_structures.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_voxel_structures[i].get_ref_ptr());
#else
r.push_back(_voxel_structures[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_voxel_structures);
}
void VoxelWorld::set_voxel_structures(const Vector<Variant> &structures) {
clear_voxel_structures();
@ -454,7 +442,6 @@ bool VoxelWorld::can_chunk_do_build_step() {
}
bool VoxelWorld::is_position_walkable(const Vector3 &p_pos) {
int x = static_cast<int>(Math::floor(p_pos.x / (_chunk_size_x * _voxel_scale)));
int y = static_cast<int>(Math::floor(p_pos.y / (_chunk_size_y * _voxel_scale)));
int z = static_cast<int>(Math::floor(p_pos.z / (_chunk_size_z * _voxel_scale)));
@ -472,19 +459,10 @@ void VoxelWorld::on_chunk_mesh_generation_finished(Ref<VoxelChunk> p_chunk) {
}
Vector<Variant> VoxelWorld::get_chunks() {
Vector<Variant> r;
for (int i = 0; i < _chunks_vector.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_chunks_vector[i].get_ref_ptr());
#else
r.push_back(_chunks_vector[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_chunks_vector);
}
void VoxelWorld::set_chunks(const Vector<Variant> &chunks) {
if (is_inside_tree()) {
for (int i = 0; i < _chunks_vector.size(); ++i) {
Ref<VoxelChunk> chunk = Ref<VoxelChunk>(_chunks_vector[i]);
@ -562,7 +540,6 @@ int VoxelWorld::get_light_count() const {
}
void VoxelWorld::clear_lights() {
for (int i = 0; i < _lights.size(); ++i) {
Ref<VoxelLight> light = _lights[i];
if (!light.is_valid())
@ -581,15 +558,7 @@ void VoxelWorld::clear_lights() {
}
Vector<Variant> VoxelWorld::get_lights() {
Vector<Variant> r;
for (int i = 0; i < _lights.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_lights[i].get_ref_ptr());
#else
r.push_back(_lights[i]);
#endif
}
return r;
VARIANT_ARRAY_GET(_lights);
}
void VoxelWorld::set_lights(const Vector<Variant> &chunks) {
clear_lights();

View File

@ -23,18 +23,9 @@ SOFTWARE.
#ifndef VOXEL_WORLD_H
#define VOXEL_WORLD_H
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "scene/3d/navigation.h"
#include "scene/3d/spatial.h"
#else
#include "scene/3d/navigation_3d.h"
#include "scene/3d/node_3d.h"
typedef class Navigation3D Navigation;
typedef class Node3D Spatial;
#endif
#include navigation_h
#include "core/engine.h"
#include "core/hash_map.h"
@ -248,23 +239,23 @@ private:
int _chunk_spawn_range;
HashMap<IntPos, Ref<VoxelChunk>, IntPosHasher> _chunks;
Vector<Ref<VoxelChunk> > _chunks_vector;
Vector<Ref<VoxelChunk>> _chunks_vector;
Vector<Ref<WorldArea> > _world_areas;
Vector<Ref<WorldArea>> _world_areas;
Vector<Ref<VoxelStructure> > _voxel_structures;
Vector<Ref<VoxelStructure>> _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<VoxelChunk>> _generation_queue;
Vector<Ref<VoxelChunk>> _generating;
int _max_frame_chunk_build_steps;
int _num_frame_chunk_build_steps;
Vector<Ref<VoxelLight> > _lights;
Vector<Ref<VoxelLight>> _lights;
};
_FORCE_INLINE_ bool operator==(const VoxelWorld::IntPos &a, const VoxelWorld::IntPos &b) {

View File

@ -37,26 +37,11 @@ SOFTWARE.
#include "../library/voxel_surface.h"
#include "../library/voxelman_library.h"
#include "core/version.h"
#include "../defines.h"
#if VERSION_MAJOR < 4
#include "core/os/input.h"
#include "editor/plugins/spatial_editor_plugin.h"
#include "scene/3d/camera.h"
#else
#include "core/input/input_event.h"
#include "editor/plugins/node_3d_editor_plugin.h"
#include "scene/3d/camera_3d.h"
#define PhysicsDirectSpaceState PhysicsDirectSpaceState3D
#define SpatialEditor Node3DEditor
#define SpatialEditorPlugin Node3DEditorPlugin
#define SpatialEditorViewport Node3DEditorViewport
#endif
#include core_input_h
#include spatial_editor_plugin_h
#include camera_h
bool VoxelWorldEditor::forward_spatial_input_event(Camera *p_camera, const Ref<InputEvent> &p_event) {
if (!_world || !_world->get_editable()) {
@ -97,11 +82,7 @@ bool VoxelWorldEditor::do_input_action(Camera *p_camera, const Point2 &p_point,
from = local_xform.xform(from);
to = local_xform.xform(to);
#if VERSION_MAJOR < 4
PhysicsDirectSpaceState *ss = _world->get_world()->get_direct_space_state();
#else
PhysicsDirectSpaceState *ss = _world->get_world_3d()->get_direct_space_state();
#endif
PhysicsDirectSpaceState *ss = _world->GET_WORLD()->get_direct_space_state();
PhysicsDirectSpaceState::RayResult res;
@ -174,11 +155,8 @@ void VoxelWorldEditor::edit(VoxelWorld *p_world) {
button->set_button_group(_surfaces_button_group);
button->set_h_size_flags(SIZE_EXPAND_FILL);
#if VERSION_MAJOR < 4
button->connect("button_up", this, "_on_surface_button_pressed");
#else
button->connect("button_up", callable_mp(this, &VoxelWorldEditor::_on_surface_button_pressed));
#endif
button->CONNECT("button_up", this, VoxelWorldEditor, _on_surface_button_pressed);
_surfaces_vbox_container->add_child(button);
if (!f) {
@ -216,11 +194,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
add_button->set_button_group(_tool_button_group);
add_button->set_meta("tool_mode", TOOL_MODE_ADD);
#if VERSION_MAJOR < 4
add_button->connect("button_up", this, "_on_tool_button_pressed");
#else
add_button->connect("button_up", callable_mp(this, &VoxelWorldEditor::_on_tool_button_pressed));
#endif
add_button->CONNECT("button_up", this, VoxelWorldEditor, _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);
@ -231,11 +205,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
remove_button->set_button_group(_tool_button_group);
remove_button->set_meta("tool_mode", TOOL_MODE_REMOVE);
#if VERSION_MAJOR < 4
remove_button->connect("button_up", this, "_on_tool_button_pressed");
#else
remove_button->connect("button_up", callable_mp(this, &VoxelWorldEditor::_on_tool_button_pressed));
#endif
remove_button->CONNECT("button_up", this, VoxelWorldEditor, _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);
@ -243,11 +213,7 @@ VoxelWorldEditor::VoxelWorldEditor(EditorNode *p_editor) {
ToolButton *insert_buton = memnew(ToolButton);
insert_buton->set_text("Insert");
#if VERSION_MAJOR < 4
insert_buton->connect("button_up", this, "_on_insert_block_at_camera_button_pressed");
#else
insert_buton->connect("button_up", callable_mp(this, &VoxelWorldEditor::_on_insert_block_at_camera_button_pressed));
#endif
insert_buton->CONNECT("button_up", this, VoxelWorldEditor, _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);

View File

@ -26,14 +26,7 @@ SOFTWARE.
#include "editor/editor_node.h"
#include "editor/editor_plugin.h"
#include "core/version.h"
#if VERSION_MAJOR >= 4
#define Camera Camera3D
#define PhysicsDirectSpaceState PhysicsDirectSpaceState3D
#define SpatialEditor Node3DEditor
#define SpatialEditorPlugin Node3DEditorPlugin
#endif
#include "../defines.h"
class VoxelWorld;
class SpatialEditorPlugin;
@ -84,7 +77,6 @@ private:
};
class VoxelWorldEditorPlugin : public EditorPlugin {
GDCLASS(VoxelWorldEditorPlugin, EditorPlugin);
VoxelWorldEditor *voxel_world_editor;