Work on fixing compile.

This commit is contained in:
Relintai 2023-01-09 14:10:10 +01:00
parent 7ccb1b7819
commit 0fd63f6cb6
26 changed files with 268 additions and 357 deletions

View File

@ -54,14 +54,14 @@ GroundClutter::~GroundClutter() {
void GroundClutter::_bind_methods() { void GroundClutter::_bind_methods() {
#ifdef TEXTURE_PACKER_PRESENT #ifdef TEXTURE_PACKER_PRESENT
BIND_VMETHOD(MethodInfo("_add_textures_to", PropertyInfo(Variant::OBJECT, "packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker"))); //BIND_VMETHOD(MethodInfo("_add_textures_to", PropertyInfo(Variant::OBJECT, "packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker")));
ClassDB::bind_method(D_METHOD("add_textures_to", "packer"), &GroundClutter::add_textures_to); ClassDB::bind_method(D_METHOD("add_textures_to", "packer"), &GroundClutter::add_textures_to);
#endif #endif
#ifdef VOXELMAN_PRESENT #ifdef VOXELMAN_PRESENT
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "should"), "_should_spawn", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk"), PropertyInfo(Variant::INT, "x"), PropertyInfo(Variant::INT, "y"), PropertyInfo(Variant::INT, "z"))); //BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "should"), "_should_spawn", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk"), PropertyInfo(Variant::INT, "x"), PropertyInfo(Variant::INT, "y"), PropertyInfo(Variant::INT, "z")));
BIND_VMETHOD(MethodInfo("_add_meshes_to", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "VoxelMesher"), PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk"), PropertyInfo(Variant::INT, "x"), PropertyInfo(Variant::INT, "y"), PropertyInfo(Variant::INT, "z"))); //BIND_VMETHOD(MethodInfo("_add_meshes_to", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "VoxelMesher"), PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk"), PropertyInfo(Variant::INT, "x"), PropertyInfo(Variant::INT, "y"), PropertyInfo(Variant::INT, "z")));
ClassDB::bind_method(D_METHOD("should_spawn", "chunk", "x", "y", "z"), &GroundClutter::should_spawn); ClassDB::bind_method(D_METHOD("should_spawn", "chunk", "x", "y", "z"), &GroundClutter::should_spawn);
ClassDB::bind_method(D_METHOD("add_meshes_to", "mesher", "chunk", "x", "y", "z"), &GroundClutter::add_meshes_to); ClassDB::bind_method(D_METHOD("add_meshes_to", "mesher", "chunk", "x", "y", "z"), &GroundClutter::add_meshes_to);

View File

@ -25,6 +25,11 @@ SOFTWARE.
#include "../props/prop_data.h" #include "../props/prop_data.h"
#include "../singleton/prop_utils.h" #include "../singleton/prop_utils.h"
#include "core/os/keyboard.h" #include "core/os/keyboard.h"
#include "scene/gui/box_container.h"
#include "scene/gui/separator.h"
#include "editor/editor_settings.h"
#include "editor/editor_node.h"
#include "core/version.h" #include "core/version.h"
@ -72,12 +77,12 @@ void PropEditorPlugin::convert_scene(Node *root, const String &path) {
res->copy_from(data); res->copy_from(data);
ResourceSaver s; ResourceSaver s;
s.save(path, res); s.save(res, path);
res.unref(); res.unref();
} else { } else {
ResourceSaver s; ResourceSaver s;
s.save(path, data); s.save(data, path);
} }
} }
@ -106,9 +111,7 @@ void PropEditorPlugin::_convert_selected_scene_to_prop_data(Variant param) {
convert_selected_scene_to_prop_data(); convert_selected_scene_to_prop_data();
} }
PropEditorPlugin::PropEditorPlugin(EditorNode *p_node) { PropEditorPlugin::PropEditorPlugin() {
editor = p_node;
#if VERSION_MAJOR < 4 #if VERSION_MAJOR < 4
editor->add_tool_menu_item("Convert active scene to PropData", this, "convert_active_scene_to_prop_data"); editor->add_tool_menu_item("Convert active scene to PropData", this, "convert_active_scene_to_prop_data");
editor->add_tool_menu_item("Convert selected scene(s) to PropData", this, "convert_selected_scene_to_prop_data"); editor->add_tool_menu_item("Convert selected scene(s) to PropData", this, "convert_selected_scene_to_prop_data");
@ -128,7 +131,7 @@ PropEditorPlugin::PropEditorPlugin(EditorNode *p_node) {
b->CONNECT("pressed", this, PropEditorPlugin, _quick_convert_button_pressed); b->CONNECT("pressed", this, PropEditorPlugin, _quick_convert_button_pressed);
b->set_text("To Prop"); b->set_text("To Prop");
b->set_shortcut(ED_SHORTCUT("spatial_editor/quick_prop_convert", "Quick convert scene to PropData.", KEY_MASK_ALT + KEY_U)); b->set_shortcut(ED_SHORTCUT("spatial_editor/quick_prop_convert", "Quick convert scene to PropData.", KeyModifierMask::ALT + Key::U));
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, container); add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, container);
} }

View File

@ -23,7 +23,6 @@ SOFTWARE.
#ifndef PROP_EDITOR_PLUGIN_H #ifndef PROP_EDITOR_PLUGIN_H
#define PROP_EDITOR_PLUGIN_H #define PROP_EDITOR_PLUGIN_H
#include "editor/editor_node.h"
#include "editor/editor_plugin.h" #include "editor/editor_plugin.h"
#include "core/version.h" #include "core/version.h"
@ -31,7 +30,6 @@ SOFTWARE.
class PropEditorPlugin : public EditorPlugin { class PropEditorPlugin : public EditorPlugin {
GDCLASS(PropEditorPlugin, EditorPlugin); GDCLASS(PropEditorPlugin, EditorPlugin);
EditorNode *editor;
protected: protected:
static void _bind_methods(); static void _bind_methods();
@ -53,7 +51,7 @@ public:
void _convert_selected_scene_to_prop_data(Variant param); void _convert_selected_scene_to_prop_data(Variant param);
void _quick_convert_button_pressed(); void _quick_convert_button_pressed();
PropEditorPlugin(EditorNode *p_node); PropEditorPlugin();
~PropEditorPlugin(); ~PropEditorPlugin();
}; };

View File

@ -102,7 +102,7 @@ void PropMesherJobStep::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_simplification_step_ratio"), &PropMesherJobStep::get_simplification_step_ratio); ClassDB::bind_method(D_METHOD("get_simplification_step_ratio"), &PropMesherJobStep::get_simplification_step_ratio);
ClassDB::bind_method(D_METHOD("set_simplification_step_ratio", "value"), &PropMesherJobStep::set_simplification_step_ratio); ClassDB::bind_method(D_METHOD("set_simplification_step_ratio", "value"), &PropMesherJobStep::set_simplification_step_ratio);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "simplification_step_ratio"), "set_simplification_step_ratio", "get_simplification_step_ratio"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "simplification_step_ratio"), "set_simplification_step_ratio", "get_simplification_step_ratio");
ClassDB::bind_method(D_METHOD("get_simplification_steps"), &PropMesherJobStep::get_simplification_steps); ClassDB::bind_method(D_METHOD("get_simplification_steps"), &PropMesherJobStep::get_simplification_steps);
ClassDB::bind_method(D_METHOD("set_simplification_steps", "value"), &PropMesherJobStep::set_simplification_steps); ClassDB::bind_method(D_METHOD("set_simplification_steps", "value"), &PropMesherJobStep::set_simplification_steps);
@ -110,7 +110,7 @@ void PropMesherJobStep::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_simplification_agressiveness"), &PropMesherJobStep::get_simplification_agressiveness); ClassDB::bind_method(D_METHOD("get_simplification_agressiveness"), &PropMesherJobStep::get_simplification_agressiveness);
ClassDB::bind_method(D_METHOD("set_simplification_agressiveness", "value"), &PropMesherJobStep::set_simplification_agressiveness); ClassDB::bind_method(D_METHOD("set_simplification_agressiveness", "value"), &PropMesherJobStep::set_simplification_agressiveness);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "simplification_agressiveness"), "set_simplification_agressiveness", "get_simplification_agressiveness"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "simplification_agressiveness"), "set_simplification_agressiveness", "get_simplification_agressiveness");
#endif #endif
BIND_ENUM_CONSTANT(TYPE_NORMAL); BIND_ENUM_CONSTANT(TYPE_NORMAL);

View File

@ -96,7 +96,7 @@ void PropTextureJob::_bind_methods() {
ClassDB::bind_method(D_METHOD("should_do", "just_check"), &PropTextureJob::should_do, DEFVAL(false)); ClassDB::bind_method(D_METHOD("should_do", "just_check"), &PropTextureJob::should_do, DEFVAL(false));
ClassDB::bind_method(D_METHOD("should_return"), &PropTextureJob::should_return); ClassDB::bind_method(D_METHOD("should_return"), &PropTextureJob::should_return);
BIND_VMETHOD(MethodInfo("_execute")); //BIND_VMETHOD(MethodInfo("_execute"));
ClassDB::bind_method(D_METHOD("execute"), &PropTextureJob::execute); ClassDB::bind_method(D_METHOD("execute"), &PropTextureJob::execute);
ADD_SIGNAL(MethodInfo("completed")); ADD_SIGNAL(MethodInfo("completed"));

View File

@ -143,10 +143,10 @@ void PropMaterialCache::materials_set(const Vector<Variant> &materials) {
} }
} }
void PropMaterialCache::texture_add(const Ref<Texture> &texture) { void PropMaterialCache::texture_add(const Ref<Texture2D> &texture) {
_textures.push_back(texture); _textures.push_back(texture);
} }
void PropMaterialCache::texture_remove(const Ref<Texture> &texture) { void PropMaterialCache::texture_remove(const Ref<Texture2D> &texture) {
for (int i = 0; i < _textures.size(); ++i) { for (int i = 0; i < _textures.size(); ++i) {
if (_textures[i] == texture) { if (_textures[i] == texture) {
_textures.remove_at(i); _textures.remove_at(i);
@ -165,8 +165,8 @@ void PropMaterialCache::textures_clear() {
int PropMaterialCache::texture_count() { int PropMaterialCache::texture_count() {
return _textures.size(); return _textures.size();
} }
Ref<Texture> PropMaterialCache::texture_get(const int index) { Ref<Texture2D> PropMaterialCache::texture_get(const int index) {
ERR_FAIL_INDEX_V(index, _textures.size(), Ref<Texture>()); ERR_FAIL_INDEX_V(index, _textures.size(), Ref<Texture2D>());
return _textures[index]; return _textures[index];
} }
@ -175,10 +175,10 @@ Ref<AtlasTexture> PropMaterialCache::texture_get_atlas(const int index) {
return texture_get_atlas_tex(_textures[index]); return texture_get_atlas_tex(_textures[index]);
} }
Ref<AtlasTexture> PropMaterialCache::texture_get_atlas_tex(const Ref<Texture> &texture) { Ref<AtlasTexture> PropMaterialCache::texture_get_atlas_tex(const Ref<Texture2D> &texture) {
return Ref<AtlasTexture>(); return Ref<AtlasTexture>();
} }
Rect2 PropMaterialCache::texture_get_uv_rect(const Ref<Texture> &texture) { Rect2 PropMaterialCache::texture_get_uv_rect(const Ref<Texture2D> &texture) {
return Rect2(0, 0, 1, 1); return Rect2(0, 0, 1, 1);
} }
@ -192,7 +192,7 @@ void PropMaterialCache::prop_add_textures(const Ref<PropData> &prop) {
Ref<PropDataMeshData> pdm = prop->get_prop(i); Ref<PropDataMeshData> pdm = prop->get_prop(i);
if (pdm.is_valid()) { if (pdm.is_valid()) {
Ref<Texture> tex = pdm->get_texture(); Ref<Texture2D> tex = pdm->get_texture();
if (!tex.is_valid()) if (!tex.is_valid())
continue; continue;
@ -233,7 +233,7 @@ void PropMaterialCache::prop_remove_textures(const Ref<PropData> &prop) {
Ref<PropDataMeshData> pdm = prop->get_prop(i); Ref<PropDataMeshData> pdm = prop->get_prop(i);
if (pdm.is_valid()) { if (pdm.is_valid()) {
Ref<Texture> tex = pdm->get_texture(); Ref<Texture2D> tex = pdm->get_texture();
if (!tex.is_valid()) if (!tex.is_valid())
continue; continue;
@ -251,7 +251,7 @@ void PropMaterialCache::prop_remove_textures(const Ref<PropData> &prop) {
continue; continue;
for (int j = 0; j < twd->get_texture_count(); ++j) { for (int j = 0; j < twd->get_texture_count(); ++j) {
const Ref<Texture> &tex = twd->get_texture(j); const Ref<Texture2D> &tex = twd->get_texture(j);
if (tex.is_valid()) { if (tex.is_valid()) {
texture_remove(tex); texture_remove(tex);
@ -259,7 +259,7 @@ void PropMaterialCache::prop_remove_textures(const Ref<PropData> &prop) {
} }
for (int j = 0; j < twd->get_flavour_texture_count(); ++j) { for (int j = 0; j < twd->get_flavour_texture_count(); ++j) {
const Ref<Texture> &tex = twd->get_flavour_texture(j); const Ref<Texture2D> &tex = twd->get_flavour_texture(j);
if (tex.is_valid()) { if (tex.is_valid()) {
texture_remove(tex); texture_remove(tex);
@ -300,7 +300,7 @@ void PropMaterialCache::initial_setup_default() {
} }
} }
void PropMaterialCache::setup_material_albedo(Ref<Texture> texture) { void PropMaterialCache::setup_material_albedo(Ref<Texture2D> texture) {
if (has_method("_setup_material_albedo")) if (has_method("_setup_material_albedo"))
call("_setup_material_albedo", texture); call("_setup_material_albedo", texture);
} }

View File

@ -68,15 +68,15 @@ public:
Vector<Variant> materials_get(); Vector<Variant> materials_get();
void materials_set(const Vector<Variant> &materials); void materials_set(const Vector<Variant> &materials);
virtual void texture_add(const Ref<Texture> &texture); virtual void texture_add(const Ref<Texture2D> &texture);
virtual void texture_remove(const Ref<Texture> &texture); virtual void texture_remove(const Ref<Texture2D> &texture);
virtual void texture_remove_index(const int index); virtual void texture_remove_index(const int index);
virtual void textures_clear(); virtual void textures_clear();
virtual int texture_count(); virtual int texture_count();
virtual Ref<Texture> texture_get(const int index); virtual Ref<Texture2D> texture_get(const int index);
virtual Ref<AtlasTexture> texture_get_atlas(const int index); virtual Ref<AtlasTexture> texture_get_atlas(const int index);
virtual Ref<AtlasTexture> texture_get_atlas_tex(const Ref<Texture> &texture); virtual Ref<AtlasTexture> texture_get_atlas_tex(const Ref<Texture2D> &texture);
virtual Rect2 texture_get_uv_rect(const Ref<Texture> &texture); virtual Rect2 texture_get_uv_rect(const Ref<Texture2D> &texture);
void prop_add_textures(const Ref<PropData> &prop); void prop_add_textures(const Ref<PropData> &prop);
void prop_remove_textures(const Ref<PropData> &prop); void prop_remove_textures(const Ref<PropData> &prop);
@ -85,7 +85,7 @@ public:
virtual void initial_setup_default(); virtual void initial_setup_default();
void setup_material_albedo(Ref<Texture> texture); void setup_material_albedo(Ref<Texture2D> texture);
PropMaterialCache(); PropMaterialCache();
~PropMaterialCache(); ~PropMaterialCache();
@ -97,7 +97,7 @@ protected:
bool _initialized; bool _initialized;
Vector<Ref<Material>> _materials; Vector<Ref<Material>> _materials;
Vector<Ref<Texture>> _textures; Vector<Ref<Texture2D>> _textures;
int _ref_count; int _ref_count;

View File

@ -61,14 +61,14 @@ void PropMaterialCachePCM::set_margin(const int margin) {
_packer->set_margin(margin); _packer->set_margin(margin);
} }
Ref<AtlasTexture> PropMaterialCachePCM::texture_get_atlas_tex(const Ref<Texture> &texture) { Ref<AtlasTexture> PropMaterialCachePCM::texture_get_atlas_tex(const Ref<Texture2D> &texture) {
if (!_packer->contains_texture(texture)) { if (!_packer->contains_texture(texture)) {
return Ref<AtlasTexture>(); return Ref<AtlasTexture>();
} }
return _packer->get_texture(texture); return _packer->get_texture(texture);
} }
Rect2 PropMaterialCachePCM::texture_get_uv_rect(const Ref<Texture> &texture) { Rect2 PropMaterialCachePCM::texture_get_uv_rect(const Ref<Texture2D> &texture) {
if (!texture.is_valid()) { if (!texture.is_valid()) {
return Rect2(0, 0, 1, 1); return Rect2(0, 0, 1, 1);
} }
@ -81,13 +81,13 @@ Rect2 PropMaterialCachePCM::texture_get_uv_rect(const Ref<Texture> &texture) {
Rect2 region = at->get_region(); Rect2 region = at->get_region();
Ref<Texture> tex = at->get_atlas(); Ref<Texture2D> tex = at->get_atlas();
if (!tex.is_valid()) { if (!tex.is_valid()) {
return Rect2(0, 0, 1, 1); return Rect2(0, 0, 1, 1);
} }
Ref<Image> image = tex->get_data(); Ref<Image> image = tex->get_image();
if (!image.is_valid()) { if (!image.is_valid()) {
return Rect2(0, 0, 1, 1); return Rect2(0, 0, 1, 1);
@ -106,7 +106,7 @@ void PropMaterialCachePCM::refresh_rects() {
bool texture_added = false; bool texture_added = false;
for (int i = 0; i < _textures.size(); i++) { for (int i = 0; i < _textures.size(); i++) {
Ref<Texture> tex = _textures.get(i); Ref<Texture2D> tex = _textures.get(i);
ERR_CONTINUE(!tex.is_valid()); ERR_CONTINUE(!tex.is_valid());
@ -121,7 +121,7 @@ void PropMaterialCachePCM::refresh_rects() {
ERR_FAIL_COND(_packer->get_texture_count() == 0); ERR_FAIL_COND(_packer->get_texture_count() == 0);
Ref<Texture> tex = _packer->get_generated_texture(0); Ref<Texture2D> tex = _packer->get_generated_texture(0);
setup_material_albedo(tex); setup_material_albedo(tex);
} }
@ -141,7 +141,7 @@ void PropMaterialCachePCM::initial_setup_default() {
set_margin(pc->get_margin()); set_margin(pc->get_margin());
} }
void PropMaterialCachePCM::_setup_material_albedo(Ref<Texture> texture) { void PropMaterialCachePCM::_setup_material_albedo(Ref<Texture2D> texture) {
int count = material_get_num(); int count = material_get_num();
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
@ -157,7 +157,7 @@ void PropMaterialCachePCM::_setup_material_albedo(Ref<Texture> texture) {
Ref<ShaderMaterial> shmat = m; Ref<ShaderMaterial> shmat = m;
if (shmat.is_valid()) { if (shmat.is_valid()) {
shmat->set_shader_param("texture_albedo", texture); shmat->set_shader_parameter("texture_albedo", texture);
} }
} }
} }

View File

@ -62,14 +62,14 @@ public:
int get_margin() const; int get_margin() const;
void set_margin(const int margin); void set_margin(const int margin);
Ref<AtlasTexture> texture_get_atlas_tex(const Ref<Texture> &texture); Ref<AtlasTexture> texture_get_atlas_tex(const Ref<Texture2D> &texture);
Rect2 texture_get_uv_rect(const Ref<Texture> &texture); Rect2 texture_get_uv_rect(const Ref<Texture2D> &texture);
void refresh_rects(); void refresh_rects();
void initial_setup_default(); void initial_setup_default();
void _setup_material_albedo(Ref<Texture> texture); void _setup_material_albedo(Ref<Texture2D> texture);
PropMaterialCachePCM(); PropMaterialCachePCM();
~PropMaterialCachePCM(); ~PropMaterialCachePCM();

View File

@ -37,7 +37,7 @@ SOFTWARE.
class PropESSEntity : public Spatial { class PropESSEntity : public Spatial {
GDCLASS(PropESSEntity, Spatial); GDCLASS(PropESSEntity, Spatial);
OBJ_CATEGORY("Props"); //OBJ_CATEGORY("Props");
public: public:
PropESSEntity(); PropESSEntity();

View File

@ -108,7 +108,7 @@ void PropInstance::_build() {
//this way we won't delete the user's nodes //this way we won't delete the user's nodes
if (n->get_owner() == NULL) { if (n->get_owner() == NULL) {
n->queue_delete(); n->queue_free();
} }
} }
@ -182,7 +182,7 @@ void PropInstance::_prop_preprocess(Transform transform, const Ref<PropData> &pr
if (!sc.is_valid()) if (!sc.is_valid())
continue; continue;
Node *n = sc->instance(); Node *n = sc->instantiate();
add_child(n); add_child(n);
Spatial *sp = Object::cast_to<Spatial>(n); Spatial *sp = Object::cast_to<Spatial>(n);
@ -235,7 +235,7 @@ void PropInstance::_prop_preprocess(Transform transform, const Ref<PropData> &pr
Ref<ShaderMaterial> shmat = mat; Ref<ShaderMaterial> shmat = mat;
if (shmat.is_valid()) { if (shmat.is_valid()) {
shmat->set_shader_param("texture_albedo", texture); shmat->set_shader_parameter("texture_albedo", texture);
} }
} }
} }
@ -294,15 +294,15 @@ void PropInstance::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer"); ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask"); ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
BIND_VMETHOD(MethodInfo("_prop_preprocess", //BIND_VMETHOD(MethodInfo("_prop_preprocess",
PropertyInfo(Variant::TRANSFORM, "tarnsform"), // PropertyInfo(Variant::TRANSFORM, "tarnsform"),
PropertyInfo(Variant::OBJECT, "prop_data", PROPERTY_HINT_RESOURCE_TYPE, "PropData"))); // PropertyInfo(Variant::OBJECT, "prop_data", PROPERTY_HINT_RESOURCE_TYPE, "PropData")));
ClassDB::bind_method(D_METHOD("prop_preprocess", "tarnsform", "prop"), &PropInstance::prop_preprocess); ClassDB::bind_method(D_METHOD("prop_preprocess", "tarnsform", "prop"), &PropInstance::prop_preprocess);
ClassDB::bind_method(D_METHOD("_prop_preprocess", "tarnsform", "prop"), &PropInstance::_prop_preprocess); ClassDB::bind_method(D_METHOD("_prop_preprocess", "tarnsform", "prop"), &PropInstance::_prop_preprocess);
//--- //---
BIND_VMETHOD(MethodInfo("_init_materials")); //BIND_VMETHOD(MethodInfo("_init_materials"));
ClassDB::bind_method(D_METHOD("init_materials"), &PropInstance::init_materials); ClassDB::bind_method(D_METHOD("init_materials"), &PropInstance::init_materials);
ClassDB::bind_method(D_METHOD("_init_materials"), &PropInstance::_init_materials); ClassDB::bind_method(D_METHOD("_init_materials"), &PropInstance::_init_materials);
@ -312,8 +312,8 @@ void PropInstance::_bind_methods() {
ClassDB::bind_method(D_METHOD("queue_build"), &PropInstance::queue_build); ClassDB::bind_method(D_METHOD("queue_build"), &PropInstance::queue_build);
ClassDB::bind_method(D_METHOD("build_finished"), &PropInstance::build_finished); ClassDB::bind_method(D_METHOD("build_finished"), &PropInstance::build_finished);
BIND_VMETHOD(MethodInfo("_build")); //BIND_VMETHOD(MethodInfo("_build"));
BIND_VMETHOD(MethodInfo("_build_finished")); //BIND_VMETHOD(MethodInfo("_build_finished"));
ClassDB::bind_method(D_METHOD("_build"), &PropInstance::_build); ClassDB::bind_method(D_METHOD("_build"), &PropInstance::_build);
ClassDB::bind_method(D_METHOD("_build_finished"), &PropInstance::_build_finished); ClassDB::bind_method(D_METHOD("_build_finished"), &PropInstance::_build_finished);

View File

@ -26,8 +26,6 @@ SOFTWARE.
#include "./props/prop_data.h" #include "./props/prop_data.h"
#include "../opensimplex/open_simplex_noise.h"
const String PropInstanceJob::BINDING_STRING_ACTIVE_BUILD_PHASE_TYPE = "Normal,Process,Physics Process"; const String PropInstanceJob::BINDING_STRING_ACTIVE_BUILD_PHASE_TYPE = "Normal,Process,Physics Process";
PropInstanceJob::ActiveBuildPhaseType PropInstanceJob::get_build_phase_type() { PropInstanceJob::ActiveBuildPhaseType PropInstanceJob::get_build_phase_type() {
@ -149,8 +147,8 @@ PropInstanceJob::~PropInstanceJob() {
} }
void PropInstanceJob::_bind_methods() { void PropInstanceJob::_bind_methods() {
BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta"))); //BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta")));
BIND_VMETHOD(MethodInfo("_physics_process", PropertyInfo(Variant::REAL, "delta"))); //BIND_VMETHOD(MethodInfo("_physics_process", PropertyInfo(Variant::REAL, "delta")));
ClassDB::bind_method(D_METHOD("get_build_phase_type"), &PropInstanceJob::get_build_phase_type); ClassDB::bind_method(D_METHOD("get_build_phase_type"), &PropInstanceJob::get_build_phase_type);
ClassDB::bind_method(D_METHOD("set_build_phase_type", "value"), &PropInstanceJob::set_build_phase_type); ClassDB::bind_method(D_METHOD("set_build_phase_type", "value"), &PropInstanceJob::set_build_phase_type);
@ -168,14 +166,14 @@ void PropInstanceJob::_bind_methods() {
ClassDB::bind_method(D_METHOD("finished"), &PropInstanceJob::finished); ClassDB::bind_method(D_METHOD("finished"), &PropInstanceJob::finished);
BIND_VMETHOD(MethodInfo("_reset")); //BIND_VMETHOD(MethodInfo("_reset"));
ClassDB::bind_method(D_METHOD("reset"), &PropInstanceJob::reset); ClassDB::bind_method(D_METHOD("reset"), &PropInstanceJob::reset);
ClassDB::bind_method(D_METHOD("_reset"), &PropInstanceJob::_reset); ClassDB::bind_method(D_METHOD("_reset"), &PropInstanceJob::_reset);
ClassDB::bind_method(D_METHOD("_execute"), &PropInstanceJob::_execute); ClassDB::bind_method(D_METHOD("_execute"), &PropInstanceJob::_execute);
BIND_VMETHOD(MethodInfo("_execute_phase")); //BIND_VMETHOD(MethodInfo("_execute_phase"));
ClassDB::bind_method(D_METHOD("execute_phase"), &PropInstanceJob::execute_phase); ClassDB::bind_method(D_METHOD("execute_phase"), &PropInstanceJob::execute_phase);
ClassDB::bind_method(D_METHOD("_execute_phase"), &PropInstanceJob::_execute_phase); ClassDB::bind_method(D_METHOD("_execute_phase"), &PropInstanceJob::_execute_phase);
@ -204,7 +202,7 @@ void PropInstanceJob::_bind_methods() {
ClassDB::bind_method(D_METHOD("should_do", "just_check"), &PropInstanceJob::should_do, DEFVAL(false)); ClassDB::bind_method(D_METHOD("should_do", "just_check"), &PropInstanceJob::should_do, DEFVAL(false));
ClassDB::bind_method(D_METHOD("should_return"), &PropInstanceJob::should_return); ClassDB::bind_method(D_METHOD("should_return"), &PropInstanceJob::should_return);
BIND_VMETHOD(MethodInfo("_execute")); //BIND_VMETHOD(MethodInfo("_execute"));
ClassDB::bind_method(D_METHOD("execute"), &PropInstanceJob::execute); ClassDB::bind_method(D_METHOD("execute"), &PropInstanceJob::execute);
ADD_SIGNAL(MethodInfo("completed")); ADD_SIGNAL(MethodInfo("completed"));

View File

@ -51,7 +51,9 @@ typedef class RenderingServer VS;
#include "jobs/prop_mesher_job_step.h" #include "jobs/prop_mesher_job_step.h"
#include "lights/prop_light.h" #include "lights/prop_light.h"
#include "material_cache/prop_material_cache.h" #include "material_cache/prop_material_cache.h"
#include "scene/3d/camera.h" #include "scene/3d/camera_3d.h"
#include "scene/main/window.h"
#if TEXTURE_PACKER_PRESENT #if TEXTURE_PACKER_PRESENT
#include "./singleton/prop_cache.h" #include "./singleton/prop_cache.h"
@ -65,7 +67,7 @@ typedef class RenderingServer VS;
#include "tiled_wall/tiled_wall_data.h" #include "tiled_wall/tiled_wall_data.h"
#include "scene/resources/box_shape.h" #include "scene/resources/box_shape_3d.h"
const float PropInstanceMerger::LOD_CHECK_INTERVAL = 2; const float PropInstanceMerger::LOD_CHECK_INTERVAL = 2;
@ -263,8 +265,8 @@ RID PropInstanceMerger::collider_body_get(const int index) {
return _colliders[index].body; return _colliders[index].body;
} }
Ref<Shape> PropInstanceMerger::collider_shape_get(const int index) { Ref<Shape3D> PropInstanceMerger::collider_shape_get(const int index) {
ERR_FAIL_INDEX_V(index, _colliders.size(), Ref<Shape>()); ERR_FAIL_INDEX_V(index, _colliders.size(), Ref<Shape3D>());
return _colliders[index].shape; return _colliders[index].shape;
} }
@ -275,7 +277,7 @@ RID PropInstanceMerger::collider_shape_rid_get(const int index) {
return _colliders[index].shape_rid; return _colliders[index].shape_rid;
} }
int PropInstanceMerger::collider_add(const Transform &local_transform, const Ref<Shape> &shape, const RID &shape_rid, const RID &body, const bool owns_shape) { int PropInstanceMerger::collider_add(const Transform &local_transform, const Ref<Shape3D> &shape, const RID &shape_rid, const RID &body, const bool owns_shape) {
ERR_FAIL_COND_V(!shape.is_valid() && shape_rid == RID(), 0); ERR_FAIL_COND_V(!shape.is_valid() && shape_rid == RID(), 0);
int index = _colliders.size(); int index = _colliders.size();
@ -346,7 +348,7 @@ void PropInstanceMerger::apply_lod_level() {
return; return;
} }
VisualServer *vs = VisualServer::get_singleton(); RenderingServer *vs = RenderingServer::get_singleton();
for (int i = 0; i < _meshes.size(); ++i) { for (int i = 0; i < _meshes.size(); ++i) {
RID mi = _meshes[i].mesh_instance; RID mi = _meshes[i].mesh_instance;
@ -383,11 +385,11 @@ void PropInstanceMerger::apply_lod_level() {
void PropInstanceMerger::debug_mesh_allocate() { void PropInstanceMerger::debug_mesh_allocate() {
if (_debug_mesh_rid == RID()) { if (_debug_mesh_rid == RID()) {
_debug_mesh_rid = VisualServer::get_singleton()->mesh_create(); _debug_mesh_rid = RenderingServer::get_singleton()->mesh_create();
} }
if (_debug_mesh_instance == RID()) { if (_debug_mesh_instance == RID()) {
_debug_mesh_instance = VisualServer::get_singleton()->instance_create(); _debug_mesh_instance = RenderingServer::get_singleton()->instance_create();
if (GET_WORLD().is_valid()) if (GET_WORLD().is_valid())
VS::get_singleton()->instance_set_scenario(_debug_mesh_instance, GET_WORLD()->get_scenario()); VS::get_singleton()->instance_set_scenario(_debug_mesh_instance, GET_WORLD()->get_scenario());
@ -399,11 +401,11 @@ void PropInstanceMerger::debug_mesh_allocate() {
} }
void PropInstanceMerger::debug_mesh_free() { void PropInstanceMerger::debug_mesh_free() {
if (_debug_mesh_instance != RID()) { if (_debug_mesh_instance != RID()) {
VisualServer::get_singleton()->free(_debug_mesh_instance); RenderingServer::get_singleton()->free(_debug_mesh_instance);
} }
if (_debug_mesh_rid != RID()) { if (_debug_mesh_rid != RID()) {
VisualServer::get_singleton()->free(_debug_mesh_rid); RenderingServer::get_singleton()->free(_debug_mesh_rid);
} }
} }
bool PropInstanceMerger::debug_mesh_has() { bool PropInstanceMerger::debug_mesh_has() {
@ -411,13 +413,13 @@ bool PropInstanceMerger::debug_mesh_has() {
} }
void PropInstanceMerger::debug_mesh_clear() { void PropInstanceMerger::debug_mesh_clear() {
if (_debug_mesh_rid != RID()) { if (_debug_mesh_rid != RID()) {
VisualServer::get_singleton()->mesh_clear(_debug_mesh_rid); RenderingServer::get_singleton()->mesh_clear(_debug_mesh_rid);
} }
} }
void PropInstanceMerger::debug_mesh_array_clear() { void PropInstanceMerger::debug_mesh_array_clear() {
_debug_mesh_array.resize(0); _debug_mesh_array.resize(0);
} }
void PropInstanceMerger::debug_mesh_add_vertices_to(const PoolVector3Array &arr) { void PropInstanceMerger::debug_mesh_add_vertices_to(const PackedVector3Array &arr) {
_debug_mesh_array.append_array(arr); _debug_mesh_array.append_array(arr);
if (_debug_mesh_array.size() % 2 == 1) { if (_debug_mesh_array.size() % 2 == 1) {
@ -434,13 +436,13 @@ void PropInstanceMerger::debug_mesh_send() {
SceneTree *st = SceneTree::get_singleton(); SceneTree *st = SceneTree::get_singleton();
Array arr; Array arr;
arr.resize(VisualServer::ARRAY_MAX); arr.resize(RenderingServer::ARRAY_MAX);
arr[VisualServer::ARRAY_VERTEX] = _debug_mesh_array; arr[RenderingServer::ARRAY_VERTEX] = _debug_mesh_array;
VisualServer::get_singleton()->mesh_add_surface_from_arrays(_debug_mesh_rid, VisualServer::PRIMITIVE_LINES, arr); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(_debug_mesh_rid, RenderingServer::PRIMITIVE_LINES, arr);
if (st) { if (st) {
VisualServer::get_singleton()->mesh_surface_set_material(_debug_mesh_rid, 0, SceneTree::get_singleton()->get_debug_collision_material()->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(_debug_mesh_rid, 0, SceneTree::get_singleton()->get_debug_collision_material()->get_rid());
} }
debug_mesh_array_clear(); debug_mesh_array_clear();
@ -489,7 +491,7 @@ void PropInstanceMerger::free_colliders() {
for (int i = 0; i < _colliders.size(); ++i) { for (int i = 0; i < _colliders.size(); ++i) {
ColliderBody &e = _colliders.write[i]; ColliderBody &e = _colliders.write[i];
PhysicsServer::get_singleton()->free(e.body); PhysicsServer3D::get_singleton()->free(e.body);
e.body = RID(); e.body = RID();
@ -508,7 +510,7 @@ void PropInstanceMerger::_build() {
return; return;
} }
if (!is_inside_tree() || !get_world().is_valid()) { if (!is_inside_tree() || !get_world_3d().is_valid()) {
queue_build(); queue_build();
return; return;
} }
@ -527,7 +529,7 @@ void PropInstanceMerger::_build() {
//this way we won't delete the user's nodes //this way we won't delete the user's nodes
if (n->get_owner() == NULL) { if (n->get_owner() == NULL) {
n->queue_delete(); n->queue_free();
} }
} }
@ -623,17 +625,17 @@ void PropInstanceMerger::_prop_preprocess(Transform transform, const Ref<PropDat
_job->add_tiled_wall(tiled_wall_data, t); _job->add_tiled_wall(tiled_wall_data, t);
if (tiled_wall_data->get_collision()) { if (tiled_wall_data->get_collision()) {
Ref<BoxShape> tws; Ref<BoxShape3D> tws;
tws.instantiate(); tws.instantiate();
float hew = tiled_wall_data->get_width() / 2.0; float hew = tiled_wall_data->get_width() / 2.0;
float heh = tiled_wall_data->get_heigth() / 2.0; float heh = tiled_wall_data->get_heigth() / 2.0;
tws->set_extents(Vector3(hew, heh, 0.01)); tws->set_size(Vector3(hew, heh, 0.01));
Transform tt = t; Transform tt = t;
//tt.origin += Vector3(hew, heh, 0); //tt.origin += Vector3(hew, heh, 0);
tt.translate(hew, heh, 0); tt.translate_local(hew, heh, 0);
_job->add_collision_shape(tws, tt, true); _job->add_collision_shape(tws, tt, true);
} }
@ -649,7 +651,7 @@ void PropInstanceMerger::_prop_preprocess(Transform transform, const Ref<PropDat
if (!sc.is_valid()) if (!sc.is_valid())
continue; continue;
Node *n = sc->instance(); Node *n = sc->instantiate();
add_child(n); add_child(n);
n->set_owner(this); n->set_owner(this);
@ -705,7 +707,7 @@ void PropInstanceMerger::collision_layer_changed() {
const ColliderBody &c = _colliders[i]; const ColliderBody &c = _colliders[i];
if (c.body != RID()) { if (c.body != RID()) {
PhysicsServer::get_singleton()->body_set_collision_layer(c.body, _collision_layer); PhysicsServer3D::get_singleton()->body_set_collision_layer(c.body, _collision_layer);
} }
} }
} }
@ -714,7 +716,7 @@ void PropInstanceMerger::collision_mask_changed() {
const ColliderBody &c = _colliders[i]; const ColliderBody &c = _colliders[i];
if (c.body != RID()) { if (c.body != RID()) {
PhysicsServer::get_singleton()->body_set_collision_mask(c.body, _collision_mask); PhysicsServer3D::get_singleton()->body_set_collision_mask(c.body, _collision_mask);
} }
} }
} }
@ -861,7 +863,7 @@ void PropInstanceMerger::_notification(int p_what) {
Viewport *vp = st->get_root(); Viewport *vp = st->get_root();
if (vp) { if (vp) {
Camera *cam = vp->get_camera(); Camera3D *cam = vp->get_camera_3d();
if (cam) { if (cam) {
Vector3 cam_world_pos = cam->get_global_transform().xform(Vector3()); Vector3 cam_world_pos = cam->get_global_transform().xform(Vector3());
@ -900,7 +902,7 @@ void PropInstanceMerger::_notification(int p_what) {
_last_transform = new_transform; _last_transform = new_transform;
VisualServer *vs = VisualServer::get_singleton(); RenderingServer *vs = RenderingServer::get_singleton();
for (int i = 0; i < _meshes.size(); ++i) { for (int i = 0; i < _meshes.size(); ++i) {
RID mir = _meshes[i].mesh_instance; RID mir = _meshes[i].mesh_instance;
@ -918,7 +920,7 @@ void PropInstanceMerger::_notification(int p_what) {
const ColliderBody &c = _colliders[i]; const ColliderBody &c = _colliders[i];
if (c.body != RID()) { if (c.body != RID()) {
PhysicsServer::get_singleton()->body_set_shape_transform(c.body, 0, new_transform * c.transform); PhysicsServer3D::get_singleton()->body_set_shape_transform(c.body, 0, new_transform * c.transform);
} }
} }
@ -932,7 +934,7 @@ void PropInstanceMerger::_notification(int p_what) {
} }
void PropInstanceMerger::_bind_methods() { void PropInstanceMerger::_bind_methods() {
BIND_VMETHOD(MethodInfo("_create_job")); //BIND_VMETHOD(MethodInfo("_create_job"));
ClassDB::bind_method(D_METHOD("_create_job"), &PropInstanceMerger::_create_job); ClassDB::bind_method(D_METHOD("_create_job"), &PropInstanceMerger::_create_job);
ClassDB::bind_method(D_METHOD("get_job"), &PropInstanceMerger::get_job); ClassDB::bind_method(D_METHOD("get_job"), &PropInstanceMerger::get_job);
@ -949,11 +951,11 @@ void PropInstanceMerger::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_first_lod_distance_squared"), &PropInstanceMerger::get_first_lod_distance_squared); ClassDB::bind_method(D_METHOD("get_first_lod_distance_squared"), &PropInstanceMerger::get_first_lod_distance_squared);
ClassDB::bind_method(D_METHOD("set_first_lod_distance_squared", "value"), &PropInstanceMerger::set_first_lod_distance_squared); ClassDB::bind_method(D_METHOD("set_first_lod_distance_squared", "value"), &PropInstanceMerger::set_first_lod_distance_squared);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "first_lod_distance_squared"), "set_first_lod_distance_squared", "get_first_lod_distance_squared"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "first_lod_distance_squared"), "set_first_lod_distance_squared", "get_first_lod_distance_squared");
ClassDB::bind_method(D_METHOD("get_lod_reduction_distance_squared"), &PropInstanceMerger::get_lod_reduction_distance_squared); ClassDB::bind_method(D_METHOD("get_lod_reduction_distance_squared"), &PropInstanceMerger::get_lod_reduction_distance_squared);
ClassDB::bind_method(D_METHOD("set_lod_reduction_distance_squared", "value"), &PropInstanceMerger::set_lod_reduction_distance_squared); ClassDB::bind_method(D_METHOD("set_lod_reduction_distance_squared", "value"), &PropInstanceMerger::set_lod_reduction_distance_squared);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "lod_reduction_distance_squared"), "set_lod_reduction_distance_squared", "get_lod_reduction_distance_squared"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "lod_reduction_distance_squared"), "set_lod_reduction_distance_squared", "get_lod_reduction_distance_squared");
///Materials ///Materials
ClassDB::bind_method(D_METHOD("material_get", "index"), &PropInstanceMerger::material_get); ClassDB::bind_method(D_METHOD("material_get", "index"), &PropInstanceMerger::material_get);

View File

@ -90,9 +90,9 @@ public:
//Colliders //Colliders
Transform collider_local_transform_get(const int index); Transform collider_local_transform_get(const int index);
RID collider_body_get(const int index); RID collider_body_get(const int index);
Ref<Shape> collider_shape_get(const int index); Ref<Shape3D> collider_shape_get(const int index);
RID collider_shape_rid_get(const int index); RID collider_shape_rid_get(const int index);
int collider_add(const Transform &local_transform, const Ref<Shape> &shape, const RID &shape_rid, const RID &body, const bool owns_shape = false); int collider_add(const Transform &local_transform, const Ref<Shape3D> &shape, const RID &shape_rid, const RID &body, const bool owns_shape = false);
int collider_get_num() const; int collider_get_num() const;
void colliders_clear(); void colliders_clear();
@ -108,7 +108,7 @@ public:
bool debug_mesh_has(); bool debug_mesh_has();
void debug_mesh_clear(); void debug_mesh_clear();
void debug_mesh_array_clear(); void debug_mesh_array_clear();
void debug_mesh_add_vertices_to(const PoolVector3Array &arr); void debug_mesh_add_vertices_to(const PackedVector3Array &arr);
void debug_mesh_send(); void debug_mesh_send();
void draw_debug_mdr_colliders(); void draw_debug_mdr_colliders();
@ -138,7 +138,7 @@ protected:
struct ColliderBody { struct ColliderBody {
Transform transform; Transform transform;
RID body; RID body;
Ref<Shape> shape; Ref<Shape3D> shape;
RID shape_rid; RID shape_rid;
bool owns_shape; bool owns_shape;
@ -175,7 +175,7 @@ private:
//debug //debug
RID _debug_mesh_rid; RID _debug_mesh_rid;
RID _debug_mesh_instance; RID _debug_mesh_instance;
PoolVector3Array _debug_mesh_array; PackedVector3Array _debug_mesh_array;
}; };
#endif #endif

View File

@ -36,7 +36,7 @@ SOFTWARE.
#include "prop_instance.h" #include "prop_instance.h"
#include "prop_instance_merger.h" #include "prop_instance_merger.h"
#include "prop_mesher.h" #include "prop_mesher.h"
#include "scene/resources/shape.h" #include "scene/resources/shape_3d.h"
#include "singleton/prop_cache.h" #include "singleton/prop_cache.h"
#ifdef MESH_DATA_RESOURCE_PRESENT #ifdef MESH_DATA_RESOURCE_PRESENT
@ -82,7 +82,7 @@ void PropInstancePropJob::set_jobs_step(int index, const Ref<PropMesherJobStep>
void PropInstancePropJob::remove_jobs_step(const int index) { void PropInstancePropJob::remove_jobs_step(const int index) {
ERR_FAIL_INDEX(index, _job_steps.size()); ERR_FAIL_INDEX(index, _job_steps.size());
_job_steps.remove(index); _job_steps.remove_at(index);
} }
void PropInstancePropJob::add_jobs_step(const Ref<PropMesherJobStep> &step) { void PropInstancePropJob::add_jobs_step(const Ref<PropMesherJobStep> &step) {
_job_steps.push_back(step); _job_steps.push_back(step);
@ -136,7 +136,7 @@ void PropInstancePropJob::clear_meshes() {
} }
#endif #endif
void PropInstancePropJob::add_tiled_wall(const Ref<PropDataTiledWall> &data, const Transform &base_transform) { void PropInstancePropJob::add_tiled_wall(const Ref<PropDataTiledWall> &data, const Transform3D &base_transform) {
PTWEntry e; PTWEntry e;
e.data = data; e.data = data;
e.base_transform = base_transform; e.base_transform = base_transform;
@ -229,19 +229,20 @@ void PropInstancePropJob::phase_physics_process() {
continue; continue;
} }
RID body = PhysicsServer::get_singleton()->body_create(PhysicsServer::BODY_MODE_STATIC); RID body = PhysicsServer3D::get_singleton()->body_create();
PhysicsServer3D::get_singleton()->body_set_mode(body, PhysicsServer3D::BODY_MODE_STATIC);
PhysicsServer::get_singleton()->body_add_shape(body, e.shape->get_rid()); PhysicsServer3D::get_singleton()->body_add_shape(body, e.shape->get_rid());
//TODO store the layer mask somewhere //TODO store the layer mask somewhere
PhysicsServer::get_singleton()->body_set_collision_layer(body, _prop_instace->get_collision_layer()); PhysicsServer3D::get_singleton()->body_set_collision_layer(body, _prop_instace->get_collision_layer());
PhysicsServer::get_singleton()->body_set_collision_mask(body, _prop_instace->get_collision_mask()); PhysicsServer3D::get_singleton()->body_set_collision_mask(body, _prop_instace->get_collision_mask());
if (_prop_instace->is_inside_tree() && _prop_instace->is_inside_world()) { if (_prop_instace->is_inside_tree() && _prop_instace->is_inside_world()) {
Ref<World> world = _prop_instace->GET_WORLD(); Ref<World3D> world = _prop_instace->get_world_3d();
if (world.is_valid() && world->get_space() != RID()) { if (world.is_valid() && world->get_space() != RID()) {
PhysicsServer::get_singleton()->body_set_space(body, world->get_space()); PhysicsServer3D::get_singleton()->body_set_space(body, world->get_space());
} }
} }
@ -422,12 +423,8 @@ void PropInstancePropJob::phase_steps() {
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
RID mesh_rid = _prop_instace->mesh_get(i); RID mesh_rid = _prop_instace->mesh_get(i);
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0) if (RS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
#if !GODOT4 RS::get_singleton()->mesh_clear(mesh_rid);
VS::get_singleton()->mesh_remove_surface(mesh_rid, 0);
#else
VS::get_singleton()->mesh_clear(mesh_rid);
#endif
} }
} }
} }
@ -481,12 +478,12 @@ void PropInstancePropJob::step_type_normal() {
RID mesh_rid = _prop_instace->mesh_get(_current_mesh); RID mesh_rid = _prop_instace->mesh_get(_current_mesh);
VS::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr); RS::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh); Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh);
if (lmat.is_valid()) { if (lmat.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid());
} }
++_current_mesh; ++_current_mesh;
@ -501,14 +498,14 @@ void PropInstancePropJob::step_type_normal_lod() {
void PropInstancePropJob::step_type_drop_uv2() { void PropInstancePropJob::step_type_drop_uv2() {
RID mesh_rid = _prop_instace->mesh_get(_current_mesh); RID mesh_rid = _prop_instace->mesh_get(_current_mesh);
temp_mesh_arr[VisualServer::ARRAY_TEX_UV2] = Variant(); temp_mesh_arr[RenderingServer::ARRAY_TEX_UV2] = Variant();
VisualServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh); Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh);
if (lmat.is_valid()) { if (lmat.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid());
} }
++_current_mesh; ++_current_mesh;
@ -520,12 +517,12 @@ void PropInstancePropJob::step_type_merge_verts() {
RID mesh_rid = _prop_instace->mesh_get(_current_mesh); RID mesh_rid = _prop_instace->mesh_get(_current_mesh);
VisualServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh); Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh);
if (lmat.is_valid()) { if (lmat.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid());
} }
++_current_mesh; ++_current_mesh;
@ -537,23 +534,23 @@ void PropInstancePropJob::step_type_bake_texture() {
Ref<Texture> tex; Ref<Texture> tex;
if (mat.is_valid()) { if (mat.is_valid()) {
tex = mat->get_shader_param("texture_albedo"); tex = mat->get_shader_parameter("texture_albedo");
} else if (spmat.is_valid()) { } else if (spmat.is_valid()) {
tex = spmat->get_texture(StandardMaterial3D::TEXTURE_ALBEDO); tex = spmat->get_texture(StandardMaterial3D::TEXTURE_ALBEDO);
} }
if (tex.is_valid()) { if (tex.is_valid()) {
temp_mesh_arr = bake_mesh_array_uv(temp_mesh_arr, tex); temp_mesh_arr = bake_mesh_array_uv(temp_mesh_arr, tex);
temp_mesh_arr[VisualServer::ARRAY_TEX_UV] = Variant(); temp_mesh_arr[RenderingServer::ARRAY_TEX_UV] = Variant();
RID mesh_rid = _prop_instace->mesh_get(_current_mesh); RID mesh_rid = _prop_instace->mesh_get(_current_mesh);
VisualServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh); Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh);
if (lmat.is_valid()) { if (lmat.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid());
} }
} }
@ -576,12 +573,12 @@ void PropInstancePropJob::step_type_simplify_mesh() {
RID mesh_rid = _prop_instace->mesh_get(_current_mesh); RID mesh_rid = _prop_instace->mesh_get(_current_mesh);
VisualServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh); Ref<Material> lmat = _material_cache->material_lod_get(_current_mesh);
if (lmat.is_valid()) { if (lmat.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(mesh_rid, 0, lmat->get_rid());
} }
++_current_mesh; ++_current_mesh;
@ -591,13 +588,13 @@ void PropInstancePropJob::step_type_simplify_mesh() {
} }
Array PropInstancePropJob::merge_mesh_array(Array arr) const { Array PropInstancePropJob::merge_mesh_array(Array arr) const {
ERR_FAIL_COND_V(arr.size() != VisualServer::ARRAY_MAX, arr); ERR_FAIL_COND_V(arr.size() != RenderingServer::ARRAY_MAX, arr);
PoolVector3Array verts = arr[VisualServer::ARRAY_VERTEX]; PackedVector3Array verts = arr[RenderingServer::ARRAY_VERTEX];
PoolVector3Array normals = arr[VisualServer::ARRAY_NORMAL]; PackedVector3Array normals = arr[RenderingServer::ARRAY_NORMAL];
PoolVector2Array uvs = arr[VisualServer::ARRAY_TEX_UV]; PackedVector2Array uvs = arr[RenderingServer::ARRAY_TEX_UV];
PoolColorArray colors = arr[VisualServer::ARRAY_COLOR]; PackedColorArray colors = arr[RenderingServer::ARRAY_COLOR];
PoolIntArray indices = arr[VisualServer::ARRAY_INDEX]; PackedInt32Array indices = arr[RenderingServer::ARRAY_INDEX];
bool has_normals = normals.size() > 0; bool has_normals = normals.size() > 0;
bool has_uvs = uvs.size() > 0; bool has_uvs = uvs.size() > 0;
@ -619,14 +616,14 @@ Array PropInstancePropJob::merge_mesh_array(Array arr) const {
int rem = equals[k]; int rem = equals[k];
int remk = rem - k; int remk = rem - k;
verts.remove(remk); verts.remove_at(remk);
if (has_normals) if (has_normals)
normals.remove(remk); normals.remove_at(remk);
if (has_uvs) if (has_uvs)
uvs.remove(remk); uvs.remove_at(remk);
if (has_colors) if (has_colors)
colors.remove(remk); colors.remove_at(remk);
for (int j = 0; j < indices.size(); ++j) { for (int j = 0; j < indices.size(); ++j) {
int indx = indices[j]; int indx = indices[j];
@ -641,39 +638,35 @@ Array PropInstancePropJob::merge_mesh_array(Array arr) const {
++i; ++i;
} }
arr[VisualServer::ARRAY_VERTEX] = verts; arr[RenderingServer::ARRAY_VERTEX] = verts;
if (has_normals) if (has_normals)
arr[VisualServer::ARRAY_NORMAL] = normals; arr[RenderingServer::ARRAY_NORMAL] = normals;
if (has_uvs) if (has_uvs)
arr[VisualServer::ARRAY_TEX_UV] = uvs; arr[RenderingServer::ARRAY_TEX_UV] = uvs;
if (has_colors) if (has_colors)
arr[VisualServer::ARRAY_COLOR] = colors; arr[RenderingServer::ARRAY_COLOR] = colors;
arr[VisualServer::ARRAY_INDEX] = indices; arr[RenderingServer::ARRAY_INDEX] = indices;
return arr; return arr;
} }
Array PropInstancePropJob::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const float mul_color) const { Array PropInstancePropJob::bake_mesh_array_uv(Array arr, Ref<Texture2D> tex, const float mul_color) const {
ERR_FAIL_COND_V(arr.size() != VisualServer::ARRAY_MAX, arr); ERR_FAIL_COND_V(arr.size() != RenderingServer::ARRAY_MAX, arr);
ERR_FAIL_COND_V(!tex.is_valid(), arr); ERR_FAIL_COND_V(!tex.is_valid(), arr);
Ref<Image> img = tex->get_data(); Ref<Image> img = tex->get_image();
ERR_FAIL_COND_V(!img.is_valid(), arr); ERR_FAIL_COND_V(!img.is_valid(), arr);
Vector2 imgsize = img->get_size(); Vector2 imgsize = img->get_size();
PoolVector2Array uvs = arr[VisualServer::ARRAY_TEX_UV]; PackedVector2Array uvs = arr[RenderingServer::ARRAY_TEX_UV];
PoolColorArray colors = arr[VisualServer::ARRAY_COLOR]; PackedColorArray colors = arr[RenderingServer::ARRAY_COLOR];
if (colors.size() < uvs.size()) if (colors.size() < uvs.size())
colors.resize(uvs.size()); colors.resize(uvs.size());
#if !GODOT4
img->lock();
#endif
for (int i = 0; i < uvs.size(); ++i) { for (int i = 0; i < uvs.size(); ++i) {
Vector2 uv = uvs[i]; Vector2 uv = uvs[i];
uv *= imgsize; uv *= imgsize;
@ -686,11 +679,7 @@ Array PropInstancePropJob::bake_mesh_array_uv(Array arr, Ref<Texture> tex, const
colors.set(i, colors[i] * c * mul_color); colors.set(i, colors[i] * c * mul_color);
} }
#if !GODOT4 arr[RenderingServer::ARRAY_COLOR] = colors;
img->unlock();
#endif
arr[VisualServer::ARRAY_COLOR] = colors;
return arr; return arr;
} }
@ -707,12 +696,8 @@ void PropInstancePropJob::reset_meshes() {
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
RID mesh_rid = _prop_instace->mesh_get(i); RID mesh_rid = _prop_instace->mesh_get(i);
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0) if (RS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
#if !GODOT4 RS::get_singleton()->mesh_clear(mesh_rid);
VS::get_singleton()->mesh_remove_surface(mesh_rid, 0);
#else
VS::get_singleton()->mesh_clear(mesh_rid);
#endif
} }
} }
} }

View File

@ -30,7 +30,7 @@ class PropInstance;
class PropInstanceMerger; class PropInstanceMerger;
class PropMesherJobStep; class PropMesherJobStep;
class PropMaterialCache; class PropMaterialCache;
class Shape; class Shape3D;
class PropLight; class PropLight;
class PropDataTiledWall; class PropDataTiledWall;
@ -51,7 +51,7 @@ public:
void add_jobs_step(const Ref<PropMesherJobStep> &step); void add_jobs_step(const Ref<PropMesherJobStep> &step);
int get_jobs_step_count() const; int get_jobs_step_count() const;
void add_collision_shape(const Ref<Shape> &shape, const Transform &transform, const bool owns_shape = false); void add_collision_shape(const Ref<Shape3D> &shape, const Transform3D &transform, const bool owns_shape = false);
void clear_collision_shapes(); void clear_collision_shapes();
PropInstanceMerger *get_prop_instace(); PropInstanceMerger *get_prop_instace();
@ -62,11 +62,11 @@ public:
void set_prop_mesher(const Ref<PropMesher> &mesher); void set_prop_mesher(const Ref<PropMesher> &mesher);
#if MESH_DATA_RESOURCE_PRESENT #if MESH_DATA_RESOURCE_PRESENT
void add_mesh(const Ref<PropDataMeshData> &mesh_data, const Transform &base_transform); void add_mesh(const Ref<PropDataMeshData> &mesh_data, const Transform3D &base_transform);
void clear_meshes(); void clear_meshes();
#endif #endif
void add_tiled_wall(const Ref<PropDataTiledWall> &data, const Transform &base_transform); void add_tiled_wall(const Ref<PropDataTiledWall> &data, const Transform3D &base_transform);
void clear_tiled_walls(); void clear_tiled_walls();
void add_light(const Ref<PropLight> &light); void add_light(const Ref<PropLight> &light);
@ -89,7 +89,7 @@ public:
void step_type_simplify_mesh(); void step_type_simplify_mesh();
Array merge_mesh_array(Array arr) const; Array merge_mesh_array(Array arr) const;
Array bake_mesh_array_uv(Array arr, Ref<Texture> tex, float mul_color = 0.7) const; Array bake_mesh_array_uv(Array arr, Ref<Texture2D> tex, float mul_color = 0.7) const;
void reset_meshes(); void reset_meshes();
@ -103,18 +103,18 @@ protected:
#if MESH_DATA_RESOURCE_PRESENT #if MESH_DATA_RESOURCE_PRESENT
struct PMDREntry { struct PMDREntry {
Ref<PropDataMeshData> mesh_data; Ref<PropDataMeshData> mesh_data;
Transform base_transform; Transform3D base_transform;
}; };
#endif #endif
struct PTWEntry { struct PTWEntry {
Ref<PropDataTiledWall> data; Ref<PropDataTiledWall> data;
Transform base_transform; Transform3D base_transform;
}; };
struct CollisionShapeEntry { struct CollisionShapeEntry {
Ref<Shape> shape; Ref<Shape3D> shape;
Transform transform; Transform3D transform;
bool owns_shape; bool owns_shape;
CollisionShapeEntry() { CollisionShapeEntry() {

View File

@ -23,7 +23,7 @@ SOFTWARE.
#include "prop_mesher.h" #include "prop_mesher.h"
#include "lights/prop_light.h" #include "lights/prop_light.h"
#include "modules/opensimplex/open_simplex_noise.h" #include "modules/noise/fastnoise_lite.h"
#include "material_cache/prop_material_cache.h" #include "material_cache/prop_material_cache.h"
#include "tiled_wall/tiled_wall_data.h" #include "tiled_wall/tiled_wall_data.h"
@ -155,15 +155,15 @@ _FORCE_INLINE_ void PropMesher::set_build_flags(const int flags) {
_build_flags = flags; _build_flags = flags;
if ((_build_flags & PropMesher::BUILD_FLAG_USE_LIGHTING) != 0) { if ((_build_flags & PropMesher::BUILD_FLAG_USE_LIGHTING) != 0) {
_format |= VisualServer::ARRAY_FORMAT_COLOR; _format |= RenderingServer::ARRAY_FORMAT_COLOR;
} else { } else {
_format ^= VisualServer::ARRAY_FORMAT_COLOR; _format ^= RenderingServer::ARRAY_FORMAT_COLOR;
} }
} }
Array PropMesher::build_mesh() { Array PropMesher::build_mesh() {
Array a; Array a;
a.resize(VisualServer::ARRAY_MAX); a.resize(RenderingServer::ARRAY_MAX);
if (_vertices.size() == 0) { if (_vertices.size() == 0) {
//Nothing to do //Nothing to do
@ -173,133 +173,70 @@ Array PropMesher::build_mesh() {
{ {
PoolVector<Vector3> array; PoolVector<Vector3> array;
array.resize(_vertices.size()); array.resize(_vertices.size());
#if !GODOT4
PoolVector<Vector3>::Write w = array.write();
#endif
for (int i = 0; i < _vertices.size(); ++i) { for (int i = 0; i < _vertices.size(); ++i) {
#if !GODOT4
w[i] = _vertices[i].vertex;
#else
array.set(i, _vertices[i].vertex); array.set(i, _vertices[i].vertex);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_VERTEX] = array;
w.release();
#endif
a[VisualServer::ARRAY_VERTEX] = array;
} }
if ((_format & VisualServer::ARRAY_FORMAT_NORMAL) == 0) { if ((_format & RenderingServer::ARRAY_FORMAT_NORMAL) == 0) {
generate_normals(); generate_normals();
} }
{ {
PoolVector<Vector3> array; PoolVector<Vector3> array;
array.resize(_vertices.size()); array.resize(_vertices.size());
#if !GODOT4
PoolVector<Vector3>::Write w = array.write();
#endif
for (int i = 0; i < _vertices.size(); ++i) { for (int i = 0; i < _vertices.size(); ++i) {
#if !GODOT4
w[i] = _vertices[i].normal;
#else
array.set(i, _vertices[i].normal); array.set(i, _vertices[i].normal);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_NORMAL] = array;
w.release();
#endif
a[VisualServer::ARRAY_NORMAL] = array;
} }
if ((_format & VisualServer::ARRAY_FORMAT_COLOR) != 0) { if ((_format & RenderingServer::ARRAY_FORMAT_COLOR) != 0) {
PoolVector<Color> array; PoolVector<Color> array;
array.resize(_vertices.size()); array.resize(_vertices.size());
#if !GODOT4
PoolVector<Color>::Write w = array.write();
#endif
for (int i = 0; i < _vertices.size(); ++i) { for (int i = 0; i < _vertices.size(); ++i) {
#if !GODOT4
w[i] = _vertices[i].color;
#else
array.set(i, _vertices[i].color); array.set(i, _vertices[i].color);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_COLOR] = array;
w.release();
#endif
a[VisualServer::ARRAY_COLOR] = array;
} }
if ((_format & VisualServer::ARRAY_FORMAT_TEX_UV) != 0) { if ((_format & RenderingServer::ARRAY_FORMAT_TEX_UV) != 0) {
PoolVector<Vector2> array; PoolVector<Vector2> array;
array.resize(_vertices.size()); array.resize(_vertices.size());
#if !GODOT4
PoolVector<Vector2>::Write w = array.write();
#endif
for (int i = 0; i < _vertices.size(); ++i) { for (int i = 0; i < _vertices.size(); ++i) {
#if !GODOT4
w[i] = _vertices[i].uv;
#else
array.set(i, _vertices[i].uv); array.set(i, _vertices[i].uv);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_TEX_UV] = array;
w.release();
#endif
a[VisualServer::ARRAY_TEX_UV] = array;
} }
if ((_format & VisualServer::ARRAY_FORMAT_TEX_UV2) != 0) { if ((_format & RenderingServer::ARRAY_FORMAT_TEX_UV2) != 0) {
PoolVector<Vector2> array; PoolVector<Vector2> array;
array.resize(_vertices.size()); array.resize(_vertices.size());
#if !GODOT4
PoolVector<Vector2>::Write w = array.write();
#endif
for (int i = 0; i < _vertices.size(); ++i) { for (int i = 0; i < _vertices.size(); ++i) {
#if !GODOT4
w[i] = _vertices[i].uv2;
#else
array.set(i, _vertices[i].uv2); array.set(i, _vertices[i].uv2);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_TEX_UV2] = array;
w.release();
#endif
a[VisualServer::ARRAY_TEX_UV2] = array;
} }
if (_indices.size() > 0) { if (_indices.size() > 0) {
PoolVector<int> array; PoolVector<int> array;
array.resize(_indices.size()); array.resize(_indices.size());
#if !GODOT4
PoolVector<int>::Write w = array.write();
#endif
for (int i = 0; i < _indices.size(); ++i) { for (int i = 0; i < _indices.size(); ++i) {
#if !GODOT4
w[i] = _indices[i];
#else
array.set(i, _indices[i]); array.set(i, _indices[i]);
#endif
} }
#if !GODOT4 a[RenderingServer::ARRAY_INDEX] = array;
w.release();
#endif
a[VisualServer::ARRAY_INDEX] = array;
} }
return a; return a;
@ -308,7 +245,7 @@ Array PropMesher::build_mesh() {
void PropMesher::build_mesh_into(RID mesh) { void PropMesher::build_mesh_into(RID mesh) {
ERR_FAIL_COND(mesh == RID()); ERR_FAIL_COND(mesh == RID());
VS::get_singleton()->mesh_clear(mesh); RS::get_singleton()->mesh_clear(mesh);
if (_vertices.size() == 0) { if (_vertices.size() == 0) {
//Nothing to do //Nothing to do
@ -317,14 +254,14 @@ void PropMesher::build_mesh_into(RID mesh) {
Array arr = build_mesh(); Array arr = build_mesh();
VS::get_singleton()->mesh_add_surface_from_arrays(mesh, VisualServer::PRIMITIVE_TRIANGLES, arr); RS::get_singleton()->mesh_add_surface_from_arrays(mesh, RenderingServer::PRIMITIVE_TRIANGLES, arr);
if (_material.is_valid()) if (_material.is_valid())
VS::get_singleton()->mesh_surface_set_material(mesh, 0, _material->get_rid()); RS::get_singleton()->mesh_surface_set_material(mesh, 0, _material->get_rid());
} }
void PropMesher::generate_normals(bool p_flip) { void PropMesher::generate_normals(bool p_flip) {
_format = _format | VisualServer::ARRAY_FORMAT_NORMAL; _format = _format | RenderingServer::ARRAY_FORMAT_NORMAL;
for (int i = 0; i < _indices.size(); i += 3) { for (int i = 0; i < _indices.size(); i += 3) {
int i0 = _indices[i]; int i0 = _indices[i];
@ -426,7 +363,7 @@ void PropMesher::remove_doubles_hashed() {
for (int j = 0; j < indices.size(); ++j) { for (int j = 0; j < indices.size(); ++j) {
int index = indices[j]; int index = indices[j];
hashes.remove(index); hashes.remove_at(index);
_vertices.remove_at(index); _vertices.remove_at(index);
//make all indices that were bigger than the one we replaced one lower //make all indices that were bigger than the one we replaced one lower
@ -466,7 +403,7 @@ void PropMesher::reset() {
_last_tangent = Plane(); _last_tangent = Plane();
} }
void PropMesher::add_tiled_wall_simple(const int width, const int height, const Transform &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache) { void PropMesher::add_tiled_wall_simple(const int width, const int height, const Transform3D &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache) {
ERR_FAIL_COND(!tiled_wall_data.is_valid()); ERR_FAIL_COND(!tiled_wall_data.is_valid());
ERR_FAIL_COND(!cache.is_valid()); ERR_FAIL_COND(!cache.is_valid());
ERR_FAIL_COND(width < 0); ERR_FAIL_COND(width < 0);
@ -610,7 +547,7 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
} }
} }
void PropMesher::add_tiled_wall_mesh_rect_simple(const int x, const int y, const Transform &transform, const Rect2 &texture_rect) { void PropMesher::add_tiled_wall_mesh_rect_simple(const int x, const int y, const Transform3D &transform, const Rect2 &texture_rect) {
int vc = get_vertex_count(); int vc = get_vertex_count();
//x + 1, y //x + 1, y
@ -703,7 +640,7 @@ void PropMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, co
} }
} }
void PropMesher::add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform transform, const PoolColorArray &colors, const Rect2 uv_rect) { void PropMesher::add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform transform, const PackedColorArray &colors, const Rect2 uv_rect) {
if (mesh->get_array().size() == 0) if (mesh->get_array().size() == 0)
return; return;
@ -1001,7 +938,7 @@ void PropMesher::bake_colors_lights() {
} }
#ifdef TERRAMAN_PRESENT #ifdef TERRAMAN_PRESENT
void PropMesher::bake_lights(MeshInstance *node, Vector<Ref<TerrainLight>> &lights) { void PropMesher::bake_lights(MeshInstance3D *node, Vector<Ref<TerrainLight>> &lights) {
ERR_FAIL_COND(node == NULL); ERR_FAIL_COND(node == NULL);
Color darkColor(0, 0, 0, 1); Color darkColor(0, 0, 0, 1);
@ -1137,7 +1074,7 @@ Vector3 PropMesher::get_vertex(const int idx) const {
} }
void PropMesher::remove_vertex(const int idx) { void PropMesher::remove_vertex(const int idx) {
_vertices.remove(idx); _vertices.remove_at(idx);
} }
PoolVector<Vector3> PropMesher::get_normals() const { PoolVector<Vector3> PropMesher::get_normals() const {
@ -1285,7 +1222,7 @@ int PropMesher::get_index(const int idx) const {
} }
void PropMesher::remove_index(const int idx) { void PropMesher::remove_index(const int idx) {
_indices.remove(idx); _indices.remove_at(idx);
} }
PropMesher::PropMesher() { PropMesher::PropMesher() {
@ -1301,13 +1238,13 @@ PropMesher::PropMesher() {
_build_flags = 0; _build_flags = 0;
_format = VisualServer::ARRAY_FORMAT_NORMAL | VisualServer::ARRAY_FORMAT_TEX_UV; _format = RenderingServer::ARRAY_FORMAT_NORMAL | RenderingServer::ARRAY_FORMAT_TEX_UV;
_noise.instantiate(); _noise.instantiate();
//todo add properties for these if needed //todo add properties for these if needed
_noise->set_octaves(4); _noise->set_fractal_octaves(4);
_noise->set_period(30); _noise->set_frequency(30);
_noise->set_persistence(0.3); _noise->set_fractal_lacunarity(0.3);
_rao_scale_factor = 0.6; _rao_scale_factor = 0.6;
_rao_seed = 2134; _rao_seed = 2134;
@ -1343,15 +1280,15 @@ void PropMesher::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_voxel_scale"), &PropMesher::get_voxel_scale); ClassDB::bind_method(D_METHOD("get_voxel_scale"), &PropMesher::get_voxel_scale);
ClassDB::bind_method(D_METHOD("set_voxel_scale", "value"), &PropMesher::set_voxel_scale); ClassDB::bind_method(D_METHOD("set_voxel_scale", "value"), &PropMesher::set_voxel_scale);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "voxel_scale"), "set_voxel_scale", "get_voxel_scale"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "voxel_scale"), "set_voxel_scale", "get_voxel_scale");
ClassDB::bind_method(D_METHOD("get_ao_strength"), &PropMesher::get_ao_strength); ClassDB::bind_method(D_METHOD("get_ao_strength"), &PropMesher::get_ao_strength);
ClassDB::bind_method(D_METHOD("set_ao_strength", "value"), &PropMesher::set_ao_strength); ClassDB::bind_method(D_METHOD("set_ao_strength", "value"), &PropMesher::set_ao_strength);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "ao_strength"), "set_ao_strength", "get_ao_strength"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ao_strength"), "set_ao_strength", "get_ao_strength");
ClassDB::bind_method(D_METHOD("get_base_light_value"), &PropMesher::get_base_light_value); ClassDB::bind_method(D_METHOD("get_base_light_value"), &PropMesher::get_base_light_value);
ClassDB::bind_method(D_METHOD("set_base_light_value", "value"), &PropMesher::set_base_light_value); ClassDB::bind_method(D_METHOD("set_base_light_value", "value"), &PropMesher::set_base_light_value);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "base_light_value"), "set_base_light_value", "get_base_light_value"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "base_light_value"), "set_base_light_value", "get_base_light_value");
ClassDB::bind_method(D_METHOD("get_uv_margin"), &PropMesher::get_uv_margin); ClassDB::bind_method(D_METHOD("get_uv_margin"), &PropMesher::get_uv_margin);
ClassDB::bind_method(D_METHOD("set_uv_margin", "value"), &PropMesher::set_uv_margin); ClassDB::bind_method(D_METHOD("set_uv_margin", "value"), &PropMesher::set_uv_margin);
@ -1374,7 +1311,7 @@ void PropMesher::_bind_methods() {
ClassDB::bind_method(D_METHOD("generate_ao"), &PropMesher::generate_ao); ClassDB::bind_method(D_METHOD("generate_ao"), &PropMesher::generate_ao);
ClassDB::bind_method(D_METHOD("get_random_ao", "position"), &PropMesher::get_random_ao); ClassDB::bind_method(D_METHOD("get_random_ao", "position"), &PropMesher::get_random_ao);
BIND_VMETHOD(MethodInfo("_add_mesher", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "PropMesher"))); //BIND_VMETHOD(MethodInfo("_add_mesher", PropertyInfo(Variant::OBJECT, "mesher", PROPERTY_HINT_RESOURCE_TYPE, "PropMesher")));
ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &PropMesher::add_mesher); ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &PropMesher::add_mesher);
ClassDB::bind_method(D_METHOD("_add_mesher", "mesher"), &PropMesher::_add_mesher); ClassDB::bind_method(D_METHOD("_add_mesher", "mesher"), &PropMesher::_add_mesher);

View File

@ -60,7 +60,7 @@ using PoolVector = Vector<N>;
#include "../terraman/data/terrain_light.h" #include "../terraman/data/terrain_light.h"
#endif #endif
class OpenSimplexNoise; class FastNoiseLite;
class PropLight; class PropLight;
class PropMaterialCache; class PropMaterialCache;
class TiledWallData; class TiledWallData;
@ -145,14 +145,14 @@ public:
void reset(); void reset();
void add_tiled_wall_simple(const int width, const int height, const Transform &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache); void add_tiled_wall_simple(const int width, const int height, const Transform3D &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache);
void add_tiled_wall_mesh_rect_simple(const int x, const int y, const Transform &transform, const Rect2 &texture_rect); void add_tiled_wall_mesh_rect_simple(const int x, const int y, const Transform3D &transform, const Rect2 &texture_rect);
Vector2 transform_uv(const Vector2 &uv, const Rect2 &rect) const; Vector2 transform_uv(const Vector2 &uv, const Rect2 &rect) const;
#ifdef MESH_DATA_RESOURCE_PRESENT #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)); 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));
void add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, const Transform transform, const Rect2 uv_rect = Rect2(0, 0, 1, 1)); void add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, const Transform3D transform, const Rect2 uv_rect = Rect2(0, 0, 1, 1));
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)); void add_mesh_data_resource_transform_colored(Ref<MeshDataResource> mesh, const Transform3D transform, const PackedColorArray &colors, const Rect2 uv_rect = Rect2(0, 0, 1, 1));
#endif #endif
void generate_ao(); void generate_ao();
@ -173,7 +173,7 @@ public:
void bake_colors_lights(); void bake_colors_lights();
#ifdef TERRAMAN_PRESENT #ifdef TERRAMAN_PRESENT
void bake_lights(MeshInstance *node, Vector<Ref<TerrainLight>> &lights); void bake_lights(MeshInstance3D *node, Vector<Ref<TerrainLight>> &lights);
#endif #endif
Array build_mesh(); Array build_mesh();
@ -253,7 +253,7 @@ protected:
Rect2 _uv_margin; Rect2 _uv_margin;
int _build_flags; int _build_flags;
Ref<OpenSimplexNoise> _noise; Ref<FastNoiseLite> _noise;
float _rao_scale_factor; float _rao_scale_factor;
int _rao_seed; int _rao_seed;
}; };

View File

@ -44,14 +44,14 @@ void PropSceneInstance::build() {
//this way we won't delete the user's nodes //this way we won't delete the user's nodes
if (n->get_owner() == NULL) { if (n->get_owner() == NULL) {
n->queue_delete(); n->queue_free();
} }
} }
if (!_scene.is_valid()) if (!_scene.is_valid())
return; return;
Node *n = _scene->instance(); Node *n = _scene->instantiate();
add_child(n); add_child(n);

View File

@ -61,7 +61,7 @@ void PropDataEntry::processor_process(Ref<PropData> prop_data, Node *node, const
call("_processor_process", prop_data, node, transform); call("_processor_process", prop_data, node, transform);
} }
Node *PropDataEntry::processor_get_node_for(const Transform &transform) { Node *PropDataEntry::processor_get_node_for(const Transform &transform) {
return call("_processor_get_node_for", transform); return Object::cast_to<Node>(call("_processor_get_node_for", transform));
} }
bool PropDataEntry::processor_evaluate_children() { bool PropDataEntry::processor_evaluate_children() {
return call("_processor_evaluate_children"); return call("_processor_evaluate_children");
@ -87,24 +87,24 @@ PropDataEntry::~PropDataEntry() {
void PropDataEntry::_bind_methods() { void PropDataEntry::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_transform"), &PropDataEntry::get_transform); ClassDB::bind_method(D_METHOD("get_transform"), &PropDataEntry::get_transform);
ClassDB::bind_method(D_METHOD("set_transform", "value"), &PropDataEntry::set_transform); ClassDB::bind_method(D_METHOD("set_transform", "value"), &PropDataEntry::set_transform);
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "transform"), "set_transform", "get_transform"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform"), "set_transform", "get_transform");
#if TEXTURE_PACKER_PRESENT #if TEXTURE_PACKER_PRESENT
BIND_VMETHOD(MethodInfo("_add_textures_into", PropertyInfo(Variant::OBJECT, "texture_packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker"))); //BIND_VMETHOD(MethodInfo("_add_textures_into", PropertyInfo(Variant::OBJECT, "texture_packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker")));
ClassDB::bind_method(D_METHOD("add_textures_into", "texture_packer"), &PropDataEntry::add_textures_into); ClassDB::bind_method(D_METHOD("add_textures_into", "texture_packer"), &PropDataEntry::add_textures_into);
#endif #endif
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "handles"), "_processor_handles")); //BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "handles"), "_processor_handles"));
BIND_VMETHOD(MethodInfo("_processor_process", //BIND_VMETHOD(MethodInfo("_processor_process",
PropertyInfo(Variant::OBJECT, "prop_data", PROPERTY_HINT_RESOURCE_TYPE, "PropData"), // PropertyInfo(Variant::OBJECT, "prop_data", PROPERTY_HINT_RESOURCE_TYPE, "PropData"),
PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "Node"), // PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "Node"),
PropertyInfo(Variant::TRANSFORM, "transform"))); // PropertyInfo(Variant::TRANSFORM3D, "transform")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "Node"), "_processor_get_node_for", //BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "Node"), "_processor_get_node_for",
PropertyInfo(Variant::TRANSFORM, "transform"))); // PropertyInfo(Variant::TRANSFORM3D, "transform")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "evaluate"), "_processor_evaluate_children")); //BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "evaluate"), "_processor_evaluate_children"));
ClassDB::bind_method(D_METHOD("processor_handles", "node"), &PropDataEntry::processor_handles); ClassDB::bind_method(D_METHOD("processor_handles", "node"), &PropDataEntry::processor_handles);
ClassDB::bind_method(D_METHOD("processor_process", "prop_data", "node", "transform"), &PropDataEntry::processor_process); ClassDB::bind_method(D_METHOD("processor_process", "prop_data", "node", "transform"), &PropDataEntry::processor_process);

View File

@ -44,7 +44,7 @@ SOFTWARE.
#include "../material_cache/prop_material_cache.h" #include "../material_cache/prop_material_cache.h"
#include "../tiled_wall/tiled_wall_data.h" #include "../tiled_wall/tiled_wall_data.h"
#include "core/hashfuncs.h" #include "core/templates/hashfuncs.h"
#if VERSION_MAJOR > 3 #if VERSION_MAJOR > 3
@ -116,10 +116,10 @@ void PropCache::set_margin(const int margin) {
} }
#endif #endif
PoolStringArray PropCache::material_paths_get() const { PackedStringArray PropCache::material_paths_get() const {
return _material_paths; return _material_paths;
} }
void PropCache::material_paths_set(const PoolStringArray &value) { void PropCache::material_paths_set(const PackedStringArray &value) {
_material_paths = value; _material_paths = value;
} }
@ -193,7 +193,7 @@ Ref<PropMaterialCache> PropCache::material_cache_get(const Ref<PropData> &prop)
ERR_FAIL_COND_V(!prop.is_valid(), Ref<PropMaterialCache>()); ERR_FAIL_COND_V(!prop.is_valid(), Ref<PropMaterialCache>());
//get pointer's value as uint64 //get pointer's value as uint64
uint64_t k = make_uint64_t<const PropData *>(*prop); uint64_t k = hash_make_uint64_t<const PropData *>(*prop);
_material_cache_mutex.lock(); _material_cache_mutex.lock();
@ -207,7 +207,7 @@ Ref<PropMaterialCache> PropCache::material_cache_get(const Ref<PropData> &prop)
return m; return m;
} }
PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instance(_default_prop_material_cache_class)); PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instantiate(_default_prop_material_cache_class));
if (!p) { if (!p) {
ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class)); ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class));
@ -223,7 +223,7 @@ Ref<PropMaterialCache> PropCache::material_cache_get(const Ref<PropData> &prop)
} }
void PropCache::material_cache_unref(const Ref<PropData> &prop) { void PropCache::material_cache_unref(const Ref<PropData> &prop) {
//get pointer's value as uint64 //get pointer's value as uint64
uint64_t k = make_uint64_t<const PropData *>(*prop); uint64_t k = hash_make_uint64_t<const PropData *>(*prop);
_material_cache_mutex.lock(); _material_cache_mutex.lock();
@ -249,7 +249,7 @@ Ref<PropMaterialCache> PropCache::tiled_wall_material_cache_get(const Ref<TiledW
ERR_FAIL_COND_V(!twd.is_valid(), Ref<PropMaterialCache>()); ERR_FAIL_COND_V(!twd.is_valid(), Ref<PropMaterialCache>());
//get pointer's value as uint64 //get pointer's value as uint64
uint64_t k = make_uint64_t<const TiledWallData *>(*twd); uint64_t k = hash_make_uint64_t<const TiledWallData *>(*twd);
_tiled_wall_material_cache_mutex.lock(); _tiled_wall_material_cache_mutex.lock();
@ -263,7 +263,7 @@ Ref<PropMaterialCache> PropCache::tiled_wall_material_cache_get(const Ref<TiledW
return m; return m;
} }
PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instance(_default_prop_material_cache_class)); PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instantiate(_default_prop_material_cache_class));
if (!p) { if (!p) {
ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class)); ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class));
@ -279,7 +279,7 @@ Ref<PropMaterialCache> PropCache::tiled_wall_material_cache_get(const Ref<TiledW
} }
void PropCache::tiled_wall_material_cache_unref(const Ref<TiledWallData> &twd) { void PropCache::tiled_wall_material_cache_unref(const Ref<TiledWallData> &twd) {
//get pointer's value as uint64 //get pointer's value as uint64
uint64_t k = make_uint64_t<const TiledWallData *>(*twd); uint64_t k = hash_make_uint64_t<const TiledWallData *>(*twd);
_tiled_wall_material_cache_mutex.lock(); _tiled_wall_material_cache_mutex.lock();
@ -314,7 +314,7 @@ Ref<PropMaterialCache> PropCache::material_cache_custom_key_get(const uint64_t k
return m; return m;
} }
PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instance(_default_prop_material_cache_class)); PropMaterialCache *p = Object::cast_to<PropMaterialCache>(ClassDB::instantiate(_default_prop_material_cache_class));
if (!p) { if (!p) {
ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class)); ERR_PRINT("Can't instance the given PropMaterialCache! class_name: " + String(_default_prop_material_cache_class));
@ -350,19 +350,7 @@ void PropCache::material_cache_custom_key_unref(const uint64_t key) {
} }
Ref<Resource> PropCache::load_resource(const String &path, const String &type_hint) { Ref<Resource> PropCache::load_resource(const String &path, const String &type_hint) {
_ResourceLoader *rl = _ResourceLoader::get_singleton(); return ResourceLoader::load(path, type_hint);
#if VERSION_MAJOR < 4
Ref<ResourceInteractiveLoader> resl = rl->load_interactive(path, type_hint);
ERR_FAIL_COND_V(!resl.is_valid(), Ref<Resource>());
resl->wait();
return resl->get_resource();
#else
return rl->load(path, type_hint);
#endif
} }
PropCache::PropCache() { PropCache::PropCache() {
@ -387,7 +375,7 @@ PropCache::PropCache() {
_margin = GLOBAL_DEF("props/margin", 0); _margin = GLOBAL_DEF("props/margin", 0);
#endif #endif
_material_paths = GLOBAL_DEF("props/material_paths", PoolStringArray()); _material_paths = GLOBAL_DEF("props/material_paths", PackedStringArray());
} }
PropCache::~PropCache() { PropCache::~PropCache() {
@ -423,7 +411,7 @@ void PropCache::_bind_methods() {
ClassDB::bind_method(D_METHOD("material_paths_get"), &PropCache::material_paths_get); ClassDB::bind_method(D_METHOD("material_paths_get"), &PropCache::material_paths_get);
ClassDB::bind_method(D_METHOD("material_paths_set", "value"), &PropCache::material_paths_set); ClassDB::bind_method(D_METHOD("material_paths_set", "value"), &PropCache::material_paths_set);
ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "material_paths"), "material_paths_set", "material_paths_get"); ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "material_paths"), "material_paths_set", "material_paths_get");
ClassDB::bind_method(D_METHOD("material_add", "value"), &PropCache::material_add); ClassDB::bind_method(D_METHOD("material_add", "value"), &PropCache::material_add);
ClassDB::bind_method(D_METHOD("material_get", "index"), &PropCache::material_get); ClassDB::bind_method(D_METHOD("material_get", "index"), &PropCache::material_get);

View File

@ -76,8 +76,8 @@ public:
void set_margin(const int margin); void set_margin(const int margin);
#endif #endif
PoolStringArray material_paths_get() const; PackedStringArray material_paths_get() const;
void material_paths_set(const PoolStringArray &array); void material_paths_set(const PackedStringArray &array);
void material_add(const Ref<Material> &value); void material_add(const Ref<Material> &value);
Ref<Material> material_get(const int index); Ref<Material> material_get(const int index);
@ -114,9 +114,9 @@ protected:
StringName _default_prop_material_cache_class; StringName _default_prop_material_cache_class;
Map<uint64_t, Ref<PropMaterialCache>> _material_cache; HashMap<uint64_t, Ref<PropMaterialCache>> _material_cache;
Map<uint64_t, Ref<PropMaterialCache>> _tiled_wall_material_cache; HashMap<uint64_t, Ref<PropMaterialCache>> _tiled_wall_material_cache;
Map<uint64_t, Ref<PropMaterialCache>> _custom_keyed_material_cache; HashMap<uint64_t, Ref<PropMaterialCache>> _custom_keyed_material_cache;
Mutex _material_cache_mutex; Mutex _material_cache_mutex;
Mutex _tiled_wall_material_cache_mutex; Mutex _tiled_wall_material_cache_mutex;
@ -130,7 +130,7 @@ protected:
int _margin; int _margin;
#endif #endif
PoolStringArray _material_paths; PackedStringArray _material_paths;
Vector<Ref<Material>> _materials; Vector<Ref<Material>> _materials;
}; };

View File

@ -34,7 +34,9 @@ SOFTWARE.
#include "scene/3d/room_manager.h" #include "scene/3d/room_manager.h"
#endif #endif
#include "scene/3d/mesh_instance.h" #include "scene/3d/mesh_instance_3d.h"
#include "scene/3d/node_3d.h"
#if MESH_DATA_RESOURCE_PRESENT #if MESH_DATA_RESOURCE_PRESENT
#include "../../mesh_data_resource/nodes/mesh_data_instance.h" #include "../../mesh_data_resource/nodes/mesh_data_instance.h"
@ -67,7 +69,7 @@ Ref<PropData> PropUtils::convert_tree(Node *root) {
return data; return data;
} }
void PropUtils::_convert_tree(Ref<PropData> prop_data, Node *node, const Transform &transform) { void PropUtils::_convert_tree(Ref<PropData> prop_data, Node *node, const Transform3D &transform) {
#if VERSION_MAJOR < 4 #if VERSION_MAJOR < 4
ERR_FAIL_COND(!ObjectDB::instance_validate(node)); ERR_FAIL_COND(!ObjectDB::instance_validate(node));
#endif #endif
@ -88,7 +90,7 @@ void PropUtils::_convert_tree(Ref<PropData> prop_data, Node *node, const Transfo
} }
} }
Spatial *sp = Object::cast_to<Spatial>(node); Node3D *sp = Object::cast_to<Node3D>(node);
if (!sp) { if (!sp) {
//reset transform //reset transform
@ -485,7 +487,7 @@ void PropUtils::swap_processors(const int index1, const int index2) {
void PropUtils::remove_processor(const int index) { void PropUtils::remove_processor(const int index) {
ERR_FAIL_INDEX(index, PropUtils::_processors.size()); ERR_FAIL_INDEX(index, PropUtils::_processors.size());
PropUtils::_processors.remove(index); PropUtils::_processors.remove_at(index);
} }
int PropUtils::get_processor_count() { int PropUtils::get_processor_count() {
return PropUtils::_processors.size(); return PropUtils::_processors.size();

View File

@ -53,7 +53,7 @@ public:
static PropUtils *get_singleton(); static PropUtils *get_singleton();
Ref<PropData> convert_tree(Node *root); Ref<PropData> convert_tree(Node *root);
void _convert_tree(Ref<PropData> prop_data, Node *node, const Transform &transform); void _convert_tree(Ref<PropData> prop_data, Node *node, const Transform3D &transform);
#if VERSION_MINOR >= 4 #if VERSION_MINOR >= 4
bool generate_room_points_node(Node *node); bool generate_room_points_node(Node *node);

View File

@ -50,13 +50,13 @@ Ref<TiledWallData> TiledWall::get_data() {
} }
void TiledWall::set_data(const Ref<TiledWallData> &data) { void TiledWall::set_data(const Ref<TiledWallData> &data) {
if (_data.is_valid()) { if (_data.is_valid()) {
_data->disconnect(CoreStringNames::get_singleton()->changed, this, "refresh"); _data->disconnect(CoreStringNames::get_singleton()->changed, Callable(this, "refresh"));
} }
_data = data; _data = data;
if (_data.is_valid()) { if (_data.is_valid()) {
_data->connect(CoreStringNames::get_singleton()->changed, this, "refresh"); _data->connect(CoreStringNames::get_singleton()->changed, Callable(this, "refresh"));
} }
call_deferred("refresh"); call_deferred("refresh");
@ -88,7 +88,7 @@ void TiledWall::set_collision_layer(uint32_t p_layer) {
_collision_layer = p_layer; _collision_layer = p_layer;
if (_physics_body_rid != RID()) { if (_physics_body_rid != RID()) {
PhysicsServer::get_singleton()->area_set_collision_layer(_physics_body_rid, p_layer); PhysicsServer3D::get_singleton()->area_set_collision_layer(_physics_body_rid, p_layer);
} }
} }
@ -100,7 +100,7 @@ void TiledWall::set_collision_mask(uint32_t p_mask) {
_collision_mask = p_mask; _collision_mask = p_mask;
if (_physics_body_rid != RID()) { if (_physics_body_rid != RID()) {
PhysicsServer::get_singleton()->area_set_collision_mask(_physics_body_rid, p_mask); PhysicsServer3D::get_singleton()->area_set_collision_mask(_physics_body_rid, p_mask);
} }
} }
@ -108,22 +108,21 @@ AABB TiledWall::get_aabb() const {
return AABB(); return AABB();
} }
PoolVector<Face3> TiledWall::get_faces(uint32_t p_usage_flags) const { Vector<Face3> TiledWall::get_faces(uint32_t p_usage_flags) const {
PoolVector<Face3> faces; Vector<Face3> faces;
if (_mesh_array.size() != Mesh::ARRAY_MAX) { if (_mesh_array.size() != Mesh::ARRAY_MAX) {
return faces; return faces;
} }
PoolVector<Vector3> vertices = _mesh_array[Mesh::ARRAY_VERTEX]; Vector<Vector3> vertices = _mesh_array[Mesh::ARRAY_VERTEX];
PoolVector<int> indices = _mesh_array[Mesh::ARRAY_INDEX]; Vector<int> indices = _mesh_array[Mesh::ARRAY_INDEX];
int ts = indices.size() / 3; int ts = indices.size() / 3;
faces.resize(ts); faces.resize(ts);
PoolVector<Face3>::Write w = faces.write(); Face3 *w = faces.ptrw();
PoolVector<Vector3>::Read rv = vertices.read(); const Vector3 *rv = vertices.ptr();
PoolVector<int>::Read ri = indices.read();
for (int i = 0; i < ts; i++) { for (int i = 0; i < ts; i++) {
int im3 = (i * 3); int im3 = (i * 3);
@ -133,8 +132,6 @@ PoolVector<Face3> TiledWall::get_faces(uint32_t p_usage_flags) const {
} }
} }
w.release();
return faces; return faces;
} }
@ -158,9 +155,9 @@ void TiledWall::refresh() {
} }
if (_mesh_rid == RID()) { if (_mesh_rid == RID()) {
_mesh_rid = VisualServer::get_singleton()->mesh_create(); _mesh_rid = RenderingServer::get_singleton()->mesh_create();
VS::get_singleton()->instance_set_base(get_instance(), _mesh_rid); RS::get_singleton()->instance_set_base(get_instance(), _mesh_rid);
} }
Ref<PropMaterialCache> old_cache; Ref<PropMaterialCache> old_cache;
@ -223,12 +220,12 @@ void TiledWall::generate_mesh() {
return; return;
} }
VisualServer::get_singleton()->mesh_add_surface_from_arrays(_mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, _mesh_array); RenderingServer::get_singleton()->mesh_add_surface_from_arrays(_mesh_rid, RenderingServer::PRIMITIVE_TRIANGLES, _mesh_array);
Ref<Material> material = _cache->material_lod_get(0); Ref<Material> material = _cache->material_lod_get(0);
if (material.is_valid()) { if (material.is_valid()) {
VisualServer::get_singleton()->mesh_surface_set_material(_mesh_rid, 0, material->get_rid()); RenderingServer::get_singleton()->mesh_surface_set_material(_mesh_rid, 0, material->get_rid());
} }
_aabb.size = Vector3(_width, _height, 0); _aabb.size = Vector3(_width, _height, 0);
@ -240,19 +237,19 @@ void TiledWall::clear_mesh() {
_mesh_array.clear(); _mesh_array.clear();
if (_mesh_rid != RID()) { if (_mesh_rid != RID()) {
if (VS::get_singleton()->mesh_get_surface_count(_mesh_rid) > 0) if (RS::get_singleton()->mesh_get_surface_count(_mesh_rid) > 0)
#if VERSION_MAJOR < 4 #if VERSION_MAJOR < 4
VS::get_singleton()->mesh_remove_surface(_mesh_rid, 0); VS::get_singleton()->mesh_remove_surface(_mesh_rid, 0);
#else #else
VS::get_singleton()->mesh_clear(_mesh_rid); RS::get_singleton()->mesh_clear(_mesh_rid);
#endif #endif
} }
} }
void TiledWall::free_mesh() { void TiledWall::free_mesh() {
if (_mesh_rid != RID()) { if (_mesh_rid != RID()) {
VS::get_singleton()->instance_set_base(get_instance(), RID()); RS::get_singleton()->instance_set_base(get_instance(), RID());
VS::get_singleton()->free(_mesh_rid); RS::get_singleton()->free(_mesh_rid);
_mesh_rid = RID(); _mesh_rid = RID();
} }
} }
@ -264,17 +261,17 @@ void TiledWall::create_colliders() {
free_colliders(); free_colliders();
ERR_FAIL_COND(!get_world().is_valid() && get_world()->get_space() == RID()); ERR_FAIL_COND(!get_world_3d().is_valid() && get_world_3d()->get_space() == RID());
_physics_shape_rid = PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_BOX); _physics_shape_rid = PhysicsServer3D::get_singleton()->shape_create(PhysicsServer3D::SHAPE_BOX);
PhysicsServer::get_singleton()->shape_set_data(_physics_shape_rid, Vector3(_width / 2.0, _height / 2.0, 0.01)); PhysicsServer3D::get_singleton()->shape_set_data(_physics_shape_rid, Vector3(_width / 2.0, _height / 2.0, 0.01));
PhysicsServer::get_singleton()->body_add_shape(_physics_body_rid, _physics_shape_rid); PhysicsServer3D::get_singleton()->body_add_shape(_physics_body_rid, _physics_shape_rid);
} }
void TiledWall::free_colliders() { void TiledWall::free_colliders() {
if (_physics_shape_rid != RID()) { if (_physics_shape_rid != RID()) {
PhysicsServer::get_singleton()->free(_physics_shape_rid); PhysicsServer3D::get_singleton()->free(_physics_shape_rid);
_physics_shape_rid = RID(); _physics_shape_rid = RID();
} }
@ -287,7 +284,8 @@ TiledWall::TiledWall() {
_collision_layer = 1; _collision_layer = 1;
_collision_mask = 1; _collision_mask = 1;
_physics_body_rid = PhysicsServer::get_singleton()->body_create(PhysicsServer::BODY_MODE_STATIC); _physics_body_rid = PhysicsServer3D::get_singleton()->body_create();
PhysicsServer3D::get_singleton()->body_set_mode(_physics_body_rid, PhysicsServer3D::BODY_MODE_STATIC);
#if VERSION_MINOR >= 4 #if VERSION_MINOR >= 4
//temporary //temporary
@ -301,7 +299,7 @@ TiledWall::~TiledWall() {
_cache.unref(); _cache.unref();
_mesher.unref(); _mesher.unref();
PhysicsServer::get_singleton()->free(_physics_body_rid); PhysicsServer3D::get_singleton()->free(_physics_body_rid);
_physics_body_rid = RID(); _physics_body_rid = RID();
@ -313,27 +311,27 @@ void TiledWall::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_WORLD: { case NOTIFICATION_ENTER_WORLD: {
Transform t = get_global_transform(); Transform t = get_global_transform();
t.translate(Vector3(_width / 2.0, _height / 2.0, 0)); t.translate_local(Vector3(_width / 2.0, _height / 2.0, 0));
PhysicsServer::get_singleton()->body_set_state(_physics_body_rid, PhysicsServer::BODY_STATE_TRANSFORM, t); PhysicsServer3D::get_singleton()->body_set_state(_physics_body_rid, PhysicsServer3D::BODY_STATE_TRANSFORM, t);
RID space = get_world()->get_space(); RID space = get_world_3d()->get_space();
PhysicsServer::get_singleton()->body_set_space(_physics_body_rid, space); PhysicsServer3D::get_singleton()->body_set_space(_physics_body_rid, space);
refresh(); refresh();
break; break;
} }
case NOTIFICATION_EXIT_WORLD: { case NOTIFICATION_EXIT_WORLD: {
PhysicsServer::get_singleton()->body_set_space(_physics_body_rid, RID()); PhysicsServer3D::get_singleton()->body_set_space(_physics_body_rid, RID());
break; break;
} }
case NOTIFICATION_TRANSFORM_CHANGED: { case NOTIFICATION_TRANSFORM_CHANGED: {
if (_collision) { if (_collision) {
Transform t = get_global_transform(); Transform t = get_global_transform();
t.translate(Vector3(_width / 2.0, _height / 2.0, 0)); t.translate_local(Vector3(_width / 2.0, _height / 2.0, 0));
PhysicsServer::get_singleton()->body_set_state(_physics_body_rid, PhysicsServer::BODY_STATE_TRANSFORM, t); PhysicsServer3D::get_singleton()->body_set_state(_physics_body_rid, PhysicsServer3D::BODY_STATE_TRANSFORM, t);
} }
break; break;

View File

@ -65,7 +65,7 @@ public:
void set_collision_mask(uint32_t p_mask); void set_collision_mask(uint32_t p_mask);
AABB get_aabb() const; AABB get_aabb() const;
PoolVector<Face3> get_faces(uint32_t p_usage_flags) const; Vector<Face3> get_faces(uint32_t p_usage_flags) const;
void refresh(); void refresh();
void generate_mesh(); void generate_mesh();