2019-05-25 16:16:03 +01:00
|
|
|
#include "voxel_stream.h"
|
2019-04-28 17:58:29 +01:00
|
|
|
#include <core/script_language.h>
|
2017-01-02 02:15:57 +01:00
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
void VoxelStream::emerge_block(Ref<VoxelBuffer> out_buffer, Vector3i origin_in_voxels, int lod) {
|
2017-01-02 02:15:57 +01:00
|
|
|
ERR_FAIL_COND(out_buffer.is_null());
|
2017-08-13 01:19:39 +02:00
|
|
|
ScriptInstance *script = get_script_instance();
|
|
|
|
if (script) {
|
2017-01-02 02:15:57 +01:00
|
|
|
// Call script to generate buffer
|
|
|
|
Variant arg1 = out_buffer;
|
2017-08-28 15:42:54 +02:00
|
|
|
Variant arg2 = origin_in_voxels.to_vec3();
|
2019-04-29 21:57:39 +01:00
|
|
|
Variant arg3 = lod;
|
|
|
|
const Variant *args[3] = { &arg1, &arg2, &arg3 };
|
2019-06-18 18:53:32 +09:00
|
|
|
Variant::CallError err;
|
|
|
|
script->call("emerge_block", args, 3, err);
|
|
|
|
if (err.error != Variant::CallError::CALL_OK) {
|
|
|
|
ERR_EXPLAIN(String("voxel_stream.cpp:emerge_block gave an error: ") + String::num(err.error)
|
|
|
|
+ String(" Argument: ") + String::num(err.argument)
|
|
|
|
+ String(" Expected type: ") + String(Variant::get_type_name(err.expected)));
|
|
|
|
ERR_FAIL();
|
|
|
|
// This had to be explicitely logged due to the usual GD debugger not working with threads
|
|
|
|
}
|
2017-01-02 02:15:57 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
void VoxelStream::immerge_block(Ref<VoxelBuffer> buffer, Vector3i origin_in_voxels, int lod) {
|
2017-01-02 02:15:57 +01:00
|
|
|
ERR_FAIL_COND(buffer.is_null());
|
2017-08-13 01:19:39 +02:00
|
|
|
ScriptInstance *script = get_script_instance();
|
|
|
|
if (script) {
|
2017-01-02 02:15:57 +01:00
|
|
|
// Call script to save buffer
|
|
|
|
Variant arg1 = buffer;
|
2017-08-28 15:42:54 +02:00
|
|
|
Variant arg2 = origin_in_voxels.to_vec3();
|
2019-04-29 21:57:39 +01:00
|
|
|
Variant arg3 = lod;
|
|
|
|
const Variant *args[3] = { &arg1, &arg2, &arg3 };
|
2019-06-18 18:53:32 +09:00
|
|
|
Variant::CallError err;
|
|
|
|
script->call("immerge_block", args, 3, err);
|
|
|
|
if (err.error != Variant::CallError::CALL_OK) {
|
|
|
|
ERR_EXPLAIN(String("voxel_stream.cpp:immerge_block gave an error: ") + String::num(err.error)
|
|
|
|
+ String(" Argument: ") + String::num(err.argument)
|
|
|
|
+ String(" Expected type: ") + String(Variant::get_type_name(err.expected)));
|
|
|
|
ERR_FAIL();
|
|
|
|
// This had to be explicitely logged due to the usual GD debugger not working with threads
|
|
|
|
}
|
2017-01-02 02:15:57 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
void VoxelStream::_emerge_block(Ref<VoxelBuffer> out_buffer, Vector3 origin_in_voxels, int lod) {
|
2019-04-29 21:57:39 +01:00
|
|
|
ERR_FAIL_COND(lod < 0);
|
|
|
|
emerge_block(out_buffer, Vector3i(origin_in_voxels), lod);
|
2017-01-02 02:15:57 +01:00
|
|
|
}
|
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
void VoxelStream::_immerge_block(Ref<VoxelBuffer> buffer, Vector3 origin_in_voxels, int lod) {
|
2019-04-29 21:57:39 +01:00
|
|
|
ERR_FAIL_COND(lod < 0);
|
|
|
|
immerge_block(buffer, Vector3i(origin_in_voxels), lod);
|
2017-01-02 02:15:57 +01:00
|
|
|
}
|
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
void VoxelStream::_bind_methods() {
|
2018-09-28 01:11:28 +01:00
|
|
|
// Note: C++ inheriting classes don't need to re-bind these, because they are bindings that call the actual virtual methods
|
2017-01-02 02:15:57 +01:00
|
|
|
|
2019-05-25 16:07:38 +01:00
|
|
|
ClassDB::bind_method(D_METHOD("emerge_block", "out_buffer", "origin_in_voxels", "lod"), &VoxelStream::_emerge_block);
|
|
|
|
ClassDB::bind_method(D_METHOD("immerge_block", "buffer", "origin_in_voxels", "lod"), &VoxelStream::_immerge_block);
|
2017-01-02 02:15:57 +01:00
|
|
|
}
|