mirror of
https://github.com/Relintai/voxelman.git
synced 2024-11-14 10:17:20 +01:00
Moved everything that is prop related to a new repository (props). It is required for this to compile for a short wile, while I rework things.
This commit is contained in:
parent
6cae9a0494
commit
bf211fd430
18
SCsub
18
SCsub
@ -38,29 +38,11 @@ sources = [
|
|||||||
"meshers/cubic_mesher/voxel_mesher_cubic.cpp",
|
"meshers/cubic_mesher/voxel_mesher_cubic.cpp",
|
||||||
"meshers/cubic_mesher/voxel_cube_points.cpp",
|
"meshers/cubic_mesher/voxel_cube_points.cpp",
|
||||||
|
|
||||||
"props/prop_data.cpp",
|
|
||||||
"props/prop_data_entry.cpp",
|
|
||||||
"props/prop_data_scene.cpp",
|
|
||||||
"props/prop_data_mesh.cpp",
|
|
||||||
"props/prop_data_light.cpp",
|
|
||||||
"props/prop_data_prop.cpp",
|
|
||||||
"props/prop_data_entity.cpp",
|
|
||||||
|
|
||||||
"level_generator/voxelman_level_generator.cpp",
|
"level_generator/voxelman_level_generator.cpp",
|
||||||
|
|
||||||
"areas/world_area.cpp",
|
"areas/world_area.cpp",
|
||||||
|
|
||||||
"clutter/ground_clutter.cpp",
|
|
||||||
"clutter/ground_clutter_foliage.cpp",
|
|
||||||
|
|
||||||
"world/voxel_world_editor.cpp",
|
"world/voxel_world_editor.cpp",
|
||||||
|
|
||||||
"prop_tool/prop_tool.cpp",
|
|
||||||
"prop_tool/prop_tool_entity.cpp",
|
|
||||||
"prop_tool/prop_tool_prop.cpp",
|
|
||||||
"prop_tool/prop_tool_scene.cpp",
|
|
||||||
"prop_tool/prop_tool_light.cpp",
|
|
||||||
"prop_tool/prop_tool_mesh.cpp",
|
|
||||||
|
|
||||||
"thirdparty/lz4/lz4.c"
|
"thirdparty/lz4/lz4.c"
|
||||||
]
|
]
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ground_clutter.h"
|
|
||||||
|
|
||||||
#include "../world/voxel_chunk.h"
|
|
||||||
|
|
||||||
bool GroundClutter::should_spawn(Ref<VoxelChunk> chunk, int x, int y, int z) {
|
|
||||||
if (has_method("_should_spawn"))
|
|
||||||
return call("_should_spawn", chunk, x, y, z);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GroundClutter::add_meshes_to(Ref<VoxelMesher> mesher, Ref<VoxelChunk> chunk, int x, int y, int z) {
|
|
||||||
if (has_method("_add_meshes_to"))
|
|
||||||
call("_add_meshes_to", mesher, chunk, x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GroundClutter::add_textures_to(Ref<TexturePacker> packer) {
|
|
||||||
if (has_method("_add_textures_to"))
|
|
||||||
call("_add_textures_to", packer);
|
|
||||||
}
|
|
||||||
|
|
||||||
GroundClutter::GroundClutter() {
|
|
||||||
}
|
|
||||||
|
|
||||||
GroundClutter::~GroundClutter() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void GroundClutter::_bind_methods() {
|
|
||||||
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_textures_to", PropertyInfo(Variant::OBJECT, "packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker")));
|
|
||||||
|
|
||||||
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_textures_to", "packer"), &GroundClutter::add_textures_to);
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GROUND_CLUTTER_H
|
|
||||||
#define GROUND_CLUTTER_H
|
|
||||||
|
|
||||||
#include "core/resource.h"
|
|
||||||
|
|
||||||
#include "../../texture_packer/texture_packer.h"
|
|
||||||
#include "../meshers/voxel_mesher.h"
|
|
||||||
|
|
||||||
class VoxelChunk;
|
|
||||||
class VoxelMesher;
|
|
||||||
|
|
||||||
class GroundClutter : public Resource {
|
|
||||||
GDCLASS(GroundClutter, Resource);
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool should_spawn(Ref<VoxelChunk> chunk, int x, int y, int z);
|
|
||||||
|
|
||||||
void add_meshes_to(Ref<VoxelMesher> mesher, Ref<VoxelChunk> chunk, int x, int y, int z);
|
|
||||||
void add_textures_to(Ref<TexturePacker> packer);
|
|
||||||
|
|
||||||
GroundClutter();
|
|
||||||
~GroundClutter();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ground_clutter_foliage.h"
|
|
||||||
|
|
||||||
int GroundClutterFoliage::get_texture_count() const {
|
|
||||||
return _textures.size();
|
|
||||||
}
|
|
||||||
Ref<Texture> GroundClutterFoliage::get_texture(const int index) {
|
|
||||||
ERR_FAIL_INDEX_V(index, _textures.size(), Ref<Texture>());
|
|
||||||
|
|
||||||
return _textures.get(index);
|
|
||||||
}
|
|
||||||
void GroundClutterFoliage::remove_texture(const int index) {
|
|
||||||
ERR_FAIL_INDEX(index, _textures.size());
|
|
||||||
|
|
||||||
_textures.remove(index);
|
|
||||||
}
|
|
||||||
void GroundClutterFoliage::add_texture(Ref<Texture> texture) {
|
|
||||||
_textures.push_back(texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
GroundClutterFoliage::GroundClutterFoliage() {
|
|
||||||
}
|
|
||||||
|
|
||||||
GroundClutterFoliage::~GroundClutterFoliage() {
|
|
||||||
_textures.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GroundClutterFoliage::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_texture_count"), &GroundClutterFoliage::get_texture_count);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_texture", "index"), &GroundClutterFoliage::get_texture);
|
|
||||||
ClassDB::bind_method(D_METHOD("remove_texture", "index"), &GroundClutterFoliage::remove_texture);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_texture", "texture"), &GroundClutterFoliage::add_texture);
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GROUND_CLUTTER_FOLIAGE_H
|
|
||||||
#define GROUND_CLUTTER_FOLIAGE_H
|
|
||||||
|
|
||||||
#include "ground_clutter.h"
|
|
||||||
|
|
||||||
#include "core/vector.h"
|
|
||||||
|
|
||||||
#include "scene/resources/texture.h"
|
|
||||||
|
|
||||||
class GroundClutterFoliage : public GroundClutter {
|
|
||||||
GDCLASS(GroundClutterFoliage, GroundClutter);
|
|
||||||
|
|
||||||
public:
|
|
||||||
int get_texture_count() const;
|
|
||||||
Ref<Texture> get_texture(const int index);
|
|
||||||
void remove_texture(const int index);
|
|
||||||
void add_texture(Ref<Texture> texture);
|
|
||||||
|
|
||||||
GroundClutterFoliage();
|
|
||||||
~GroundClutterFoliage();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Vector<Ref<Texture> > _textures;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
18
config.py
18
config.py
@ -12,9 +12,6 @@ def get_doc_classes():
|
|||||||
return [
|
return [
|
||||||
"WorldArea",
|
"WorldArea",
|
||||||
|
|
||||||
"GroundClutterFoliage",
|
|
||||||
"GroundClutter",
|
|
||||||
|
|
||||||
"VoxelLight",
|
"VoxelLight",
|
||||||
|
|
||||||
"VoxelmanLevelGenerator",
|
"VoxelmanLevelGenerator",
|
||||||
@ -33,14 +30,6 @@ def get_doc_classes():
|
|||||||
"VoxelMesherTransvoxel",
|
"VoxelMesherTransvoxel",
|
||||||
"VoxelMesher",
|
"VoxelMesher",
|
||||||
|
|
||||||
"PropDataEntity",
|
|
||||||
"PropDataEntry",
|
|
||||||
"PropDataLight",
|
|
||||||
"PropDataMesh",
|
|
||||||
"PropDataProp",
|
|
||||||
"PropDataScene",
|
|
||||||
"PropData",
|
|
||||||
|
|
||||||
"EnvironmentData",
|
"EnvironmentData",
|
||||||
"VoxelChunkPropData",
|
"VoxelChunkPropData",
|
||||||
"VoxelChunk",
|
"VoxelChunk",
|
||||||
@ -48,13 +37,6 @@ def get_doc_classes():
|
|||||||
"VoxelStructure",
|
"VoxelStructure",
|
||||||
"BlockVoxelStructure",
|
"BlockVoxelStructure",
|
||||||
"VoxelWorld",
|
"VoxelWorld",
|
||||||
|
|
||||||
"PropTool",
|
|
||||||
"PropToolEntity",
|
|
||||||
"PropToolLight",
|
|
||||||
"PropToolMesh",
|
|
||||||
"PropToolProp",
|
|
||||||
"PropToolScene",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_doc_path():
|
def get_doc_path():
|
||||||
|
@ -30,7 +30,7 @@ SOFTWARE.
|
|||||||
#include "core/vector.h"
|
#include "core/vector.h"
|
||||||
#include "scene/resources/material.h"
|
#include "scene/resources/material.h"
|
||||||
|
|
||||||
#include "../clutter/ground_clutter.h"
|
#include "../../props/clutter/ground_clutter.h"
|
||||||
#include "voxelman_library.h"
|
#include "voxelman_library.h"
|
||||||
|
|
||||||
class VoxelmanLibrary;
|
class VoxelmanLibrary;
|
||||||
|
@ -1,213 +0,0 @@
|
|||||||
#include "prop_tool.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
#include "../props/prop_data.h"
|
|
||||||
#include "../props/prop_data_entity.h"
|
|
||||||
#include "../props/prop_data_light.h"
|
|
||||||
#include "../props/prop_data_mesh.h"
|
|
||||||
#include "../props/prop_data_prop.h"
|
|
||||||
#include "../props/prop_data_scene.h"
|
|
||||||
|
|
||||||
#include "prop_tool_entity.h"
|
|
||||||
#include "prop_tool_light.h"
|
|
||||||
#include "prop_tool_mesh.h"
|
|
||||||
#include "prop_tool_prop.h"
|
|
||||||
#include "prop_tool_scene.h"
|
|
||||||
|
|
||||||
#include "core/io/resource_saver.h"
|
|
||||||
#include "prop_tool_editor_plugin.h"
|
|
||||||
|
|
||||||
void PropTool::edit(const Ref<PropData> &prop) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::save() {
|
|
||||||
if (!_target_prop.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
print_verbose("save " + _target_prop->get_path());
|
|
||||||
|
|
||||||
while (_target_prop->get_prop_count() > 0)
|
|
||||||
_target_prop->remove_prop(0);
|
|
||||||
|
|
||||||
for (int i = 0; i < get_child_count(); ++i) {
|
|
||||||
save_node(get_child(i), get_transform());
|
|
||||||
}
|
|
||||||
|
|
||||||
_target_prop->set_snap_to_mesh(_snap_to_mesh);
|
|
||||||
_target_prop->set_snap_axis(_snap_axis);
|
|
||||||
|
|
||||||
ResourceSaver::save(_target_prop->get_path(), _target_prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::save_node(Node *node, Transform parent_transform) {
|
|
||||||
Spatial *snode = Object::cast_to<Spatial>(node);
|
|
||||||
|
|
||||||
if (ObjectDB::instance_validate(snode) && snode->has_method("get_data")) {
|
|
||||||
Ref<PropDataEntry> prop = node->call("get_data");
|
|
||||||
|
|
||||||
if (prop.is_valid()) {
|
|
||||||
prop->set_transform(parent_transform * snode->get_transform());
|
|
||||||
|
|
||||||
_target_prop->add_prop(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snode->has_method("evaluate_children") && !snode->call("evaluate_children"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i < get_child_count(); ++i) {
|
|
||||||
save_node(get_child(i), parent_transform * snode->get_transform());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (node->has_method("set_target_prop") && node->has_method("get_target_prop")) {
|
|
||||||
Ref<PropData> tprop = node->call("get_target_prop");
|
|
||||||
|
|
||||||
if (tprop.is_valid()) {
|
|
||||||
Ref<PropDataProp> prop;
|
|
||||||
prop.instance();
|
|
||||||
|
|
||||||
prop->set_prop(tprop);
|
|
||||||
|
|
||||||
prop->set_transform(parent_transform * snode->get_transform());
|
|
||||||
|
|
||||||
_target_prop->add_prop(prop);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < get_child_count(); ++i) {
|
|
||||||
save_node(get_child(i), parent_transform * snode->get_transform());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::rebuild_hierarchy() {
|
|
||||||
for (int i = 0; i < get_child_count(); ++i)
|
|
||||||
get_child(i)->queue_delete();
|
|
||||||
|
|
||||||
if (!_target_prop.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_snap_to_mesh = _target_prop->get_snap_to_mesh();
|
|
||||||
_snap_axis = _target_prop->get_snap_axis();
|
|
||||||
|
|
||||||
for (int i = 0; i < _target_prop->get_prop_count(); ++i) {
|
|
||||||
Ref<PropDataEntry> prop = _target_prop->get_prop(i);
|
|
||||||
|
|
||||||
Ref<PropDataLight> prop_light = prop;
|
|
||||||
Ref<PropDataMesh> prop_mesh = prop;
|
|
||||||
Ref<PropDataScene> prop_scene = prop;
|
|
||||||
Ref<PropDataProp> prop_prop = prop;
|
|
||||||
Ref<PropDataEntity> prop_entity = prop;
|
|
||||||
|
|
||||||
if (prop_light.is_valid()) {
|
|
||||||
PropToolLight *l = memnew(PropToolLight);
|
|
||||||
|
|
||||||
add_child(l);
|
|
||||||
l->set_owner(this);
|
|
||||||
l->set_transform(prop->get_transform());
|
|
||||||
|
|
||||||
l->set_data(prop_light);
|
|
||||||
} else if (prop_mesh.is_valid()) {
|
|
||||||
PropToolMesh *m = memnew(PropToolMesh);
|
|
||||||
|
|
||||||
add_child(m);
|
|
||||||
m->set_owner(this);
|
|
||||||
m->set_transform(prop->get_transform());
|
|
||||||
|
|
||||||
m->set_data(prop_mesh);
|
|
||||||
} else if (prop_scene.is_valid()) {
|
|
||||||
PropToolScene *s = memnew(PropToolScene);
|
|
||||||
|
|
||||||
add_child(s);
|
|
||||||
s->set_owner(this);
|
|
||||||
s->set_transform(prop->get_transform());
|
|
||||||
|
|
||||||
s->set_data(prop_scene);
|
|
||||||
} else if (prop_prop.is_valid()) {
|
|
||||||
PropTool *s = _plugin->create_or_get_scene(prop_prop->get_prop());
|
|
||||||
|
|
||||||
add_child(s);
|
|
||||||
s->set_owner(this);
|
|
||||||
s->set_transform(prop->get_transform());
|
|
||||||
s->set_target_prop(prop_prop->get_prop());
|
|
||||||
} else if (prop_entity.is_valid()) {
|
|
||||||
PropToolEntity *s = memnew(PropToolEntity);
|
|
||||||
|
|
||||||
add_child(s);
|
|
||||||
s->set_owner(this);
|
|
||||||
s->set_transform(prop->get_transform());
|
|
||||||
|
|
||||||
s->set_data(prop_entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::refresh_set(bool value) {
|
|
||||||
if (value)
|
|
||||||
rebuild_hierarchy();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::set_target_prop(const Ref<PropData> &prop) {
|
|
||||||
_target_prop = prop;
|
|
||||||
|
|
||||||
rebuild_hierarchy();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::target_prop_set(const Ref<PropData> &prop) {
|
|
||||||
_target_prop = prop;
|
|
||||||
|
|
||||||
if (!prop.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
PropTool *last_prop_tool = this;
|
|
||||||
Node *root = this;
|
|
||||||
|
|
||||||
while (root->get_parent() != NULL) {
|
|
||||||
root = root->get_parent();
|
|
||||||
|
|
||||||
if (root && root->has_method("target_prop_set"))
|
|
||||||
last_prop_tool = Object::cast_to<PropTool>(root);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last_prop_tool == this)
|
|
||||||
return;
|
|
||||||
|
|
||||||
last_prop_tool->load_scene_for(this, prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::load_scene_for(PropTool *t, const Ref<PropData> &prop) {
|
|
||||||
if (_plugin == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
t->queue_delete();
|
|
||||||
|
|
||||||
Node *s = _plugin->create_or_get_scene(prop);
|
|
||||||
|
|
||||||
add_child(s);
|
|
||||||
//s->set_owner(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolEditorPlugin *PropTool::get_plugin() {
|
|
||||||
return _plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::set_plugin(PropToolEditorPlugin *plugin) {
|
|
||||||
_plugin = plugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropTool::PropTool() {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropTool::PropTool(EditorNode *p_editor) {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropTool::~PropTool() {
|
|
||||||
_target_prop.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropTool::_bind_methods() {
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_H
|
|
||||||
#define PROP_TOOL_H
|
|
||||||
|
|
||||||
class EditorNode;
|
|
||||||
class EditorPlugin;
|
|
||||||
class PropData;
|
|
||||||
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
#include "core/reference.h"
|
|
||||||
#include "scene/3d/spatial.h"
|
|
||||||
|
|
||||||
class propData;
|
|
||||||
class PropToolEditorPlugin;
|
|
||||||
|
|
||||||
class PropTool : public Spatial {
|
|
||||||
GDCLASS(PropTool, Spatial);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
void edit(const Ref<PropData> &prop);
|
|
||||||
|
|
||||||
void save();
|
|
||||||
void save_node(Node *node, Transform parent_transform);
|
|
||||||
void rebuild_hierarchy();
|
|
||||||
void refresh_set(bool value);
|
|
||||||
void set_target_prop(const Ref<PropData> &prop);
|
|
||||||
void target_prop_set(const Ref<PropData> &prop);
|
|
||||||
void load_scene_for(PropTool *t, const Ref<PropData> &prop);
|
|
||||||
|
|
||||||
PropToolEditorPlugin *get_plugin();
|
|
||||||
void set_plugin(PropToolEditorPlugin *plugin);
|
|
||||||
|
|
||||||
PropTool();
|
|
||||||
PropTool(EditorNode *p_editor);
|
|
||||||
~PropTool();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool _refresh;
|
|
||||||
Ref<PropData> _target_prop;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
PropToolEditorPlugin *_plugin;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,340 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_editor_plugin.h"
|
|
||||||
|
|
||||||
#include "core/os/dir_access.h"
|
|
||||||
#include "core/os/file_access.h"
|
|
||||||
#include "editor/editor_scale.h"
|
|
||||||
#include "editor/editor_settings.h"
|
|
||||||
#include "scene/resources/packed_scene.h"
|
|
||||||
|
|
||||||
#include "../props/prop_data.h"
|
|
||||||
|
|
||||||
#include "prop_tool.h"
|
|
||||||
#include "prop_tool_entity.h"
|
|
||||||
#include "prop_tool_light.h"
|
|
||||||
#include "prop_tool_mesh.h"
|
|
||||||
#include "prop_tool_scene.h"
|
|
||||||
|
|
||||||
#include "editor/plugins/spatial_editor_plugin.h"
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::edit(Object *p_object) {
|
|
||||||
Ref<PropData> pedited_prop(Object::cast_to<PropData>(p_object));
|
|
||||||
|
|
||||||
String p = create_or_get_scene_path(pedited_prop);
|
|
||||||
|
|
||||||
get_editor_interface()->open_scene_from_path(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolEditorPlugin::handles(Object *p_object) const {
|
|
||||||
|
|
||||||
bool handles = p_object->is_class("PropData");
|
|
||||||
|
|
||||||
return handles;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::make_visible(bool p_visible) {
|
|
||||||
}
|
|
||||||
|
|
||||||
String PropToolEditorPlugin::create_or_get_scene_path(const Ref<PropData> &data) {
|
|
||||||
ERR_FAIL_COND_V(!data.is_valid(), "");
|
|
||||||
|
|
||||||
String temp_path = EditorSettings::get_singleton()->get("editors/prop_tool/temp_path");
|
|
||||||
|
|
||||||
String path = temp_path + data->get_path().get_file().get_basename() + ".tscn";
|
|
||||||
|
|
||||||
if (!FileAccess::exists(path))
|
|
||||||
create_scene(data);
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
PropTool *PropToolEditorPlugin::create_or_get_scene(const Ref<PropData> &data) {
|
|
||||||
ERR_FAIL_COND_V(!data.is_valid(), NULL);
|
|
||||||
|
|
||||||
String temp_path = EditorSettings::get_singleton()->get("editors/prop_tool/temp_path");
|
|
||||||
|
|
||||||
String path = temp_path + data->get_path().get_file().get_basename() + ".tscn";
|
|
||||||
|
|
||||||
Ref<PackedScene> ps;
|
|
||||||
|
|
||||||
if (!FileAccess::exists(path))
|
|
||||||
ps = create_scene(data);
|
|
||||||
else
|
|
||||||
ps = ResourceLoader::load(path, "PackedScene");
|
|
||||||
|
|
||||||
if (!ps.is_valid())
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
PropTool *pt = Object::cast_to<PropTool>(ps->instance());
|
|
||||||
pt->set_plugin(this);
|
|
||||||
return pt;
|
|
||||||
}
|
|
||||||
Ref<PackedScene> PropToolEditorPlugin::create_scene(const Ref<PropData> &data) {
|
|
||||||
PropTool *pt = memnew(PropTool);
|
|
||||||
|
|
||||||
pt->set_plugin(this);
|
|
||||||
pt->set_target_prop(data);
|
|
||||||
|
|
||||||
Ref<PackedScene> ps;
|
|
||||||
ps.instance();
|
|
||||||
ps->pack(pt);
|
|
||||||
|
|
||||||
String temp_path = EditorSettings::get_singleton()->get("editors/prop_tool/temp_path");
|
|
||||||
|
|
||||||
Error err = ResourceSaver::save(temp_path + data->get_path().get_file().get_basename() + ".tscn", ps);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
print_error("PropTool: create_scene failed! Error_code:" + String::num(err));
|
|
||||||
|
|
||||||
pt->queue_delete();
|
|
||||||
return ps;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::on_scene_changed(Node *scene) {
|
|
||||||
PropTool *pt = Object::cast_to<PropTool>(scene);
|
|
||||||
|
|
||||||
if (ObjectDB::instance_validate(pt)) {
|
|
||||||
pt->set_plugin(this);
|
|
||||||
|
|
||||||
light_button->show();
|
|
||||||
mesh_button->show();
|
|
||||||
prop_button->show();
|
|
||||||
scene_button->show();
|
|
||||||
entity_button->show();
|
|
||||||
} else {
|
|
||||||
light_button->hide();
|
|
||||||
mesh_button->hide();
|
|
||||||
prop_button->hide();
|
|
||||||
scene_button->hide();
|
|
||||||
entity_button->hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::apply_changes() {
|
|
||||||
Node *scene = get_editor_interface()->get_edited_scene_root();
|
|
||||||
PropTool *pt = Object::cast_to<PropTool>(scene);
|
|
||||||
|
|
||||||
if (ObjectDB::instance_validate(pt)) {
|
|
||||||
pt->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::add_light() {
|
|
||||||
Array selection = get_editor_interface()->get_selection()->get_selected_nodes();
|
|
||||||
|
|
||||||
Node *selected;
|
|
||||||
|
|
||||||
if (selection.size() != 1)
|
|
||||||
selected = get_editor_interface()->get_edited_scene_root();
|
|
||||||
else
|
|
||||||
selected = selection[0];
|
|
||||||
|
|
||||||
Node *s = selected;
|
|
||||||
PropToolLight *n = memnew(PropToolLight);
|
|
||||||
|
|
||||||
UndoRedo u = get_undo_redo();
|
|
||||||
u.create_action("Add Light");
|
|
||||||
u.add_do_method(s, "add_child", n);
|
|
||||||
u.add_do_property(n, "owner", get_editor_interface()->get_edited_scene_root());
|
|
||||||
u.add_undo_method(s, "remove_child", n);
|
|
||||||
u.commit_action();
|
|
||||||
|
|
||||||
get_editor_interface()->get_selection()->clear();
|
|
||||||
get_editor_interface()->get_selection()->add_node(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::add_mesh() {
|
|
||||||
Array selected = get_editor_interface()->get_selection()->get_selected_nodes();
|
|
||||||
|
|
||||||
if (selected.size() != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Node *s = selected[0];
|
|
||||||
PropToolMesh *n = memnew(PropToolMesh);
|
|
||||||
|
|
||||||
UndoRedo u = get_undo_redo();
|
|
||||||
u.create_action("Add Mesh");
|
|
||||||
u.add_do_method(s, "add_child", n);
|
|
||||||
u.add_do_property(n, "owner", get_editor_interface()->get_edited_scene_root());
|
|
||||||
u.add_undo_method(s, "remove_child", n);
|
|
||||||
u.commit_action();
|
|
||||||
|
|
||||||
get_editor_interface()->get_selection()->clear();
|
|
||||||
get_editor_interface()->get_selection()->add_node(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::add_prop() {
|
|
||||||
|
|
||||||
Array selected = get_editor_interface()->get_selection()->get_selected_nodes();
|
|
||||||
|
|
||||||
if (selected.size() != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Node *s = selected[0];
|
|
||||||
PropTool *n = memnew(PropTool);
|
|
||||||
|
|
||||||
UndoRedo u = get_undo_redo();
|
|
||||||
u.create_action("Add Prop");
|
|
||||||
u.add_do_method(s, "add_child", n);
|
|
||||||
u.add_do_property(n, "owner", get_editor_interface()->get_edited_scene_root());
|
|
||||||
u.add_undo_method(s, "remove_child", n);
|
|
||||||
u.commit_action();
|
|
||||||
|
|
||||||
get_editor_interface()->get_selection()->clear();
|
|
||||||
get_editor_interface()->get_selection()->add_node(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::add_scene() {
|
|
||||||
Array selected = get_editor_interface()->get_selection()->get_selected_nodes();
|
|
||||||
|
|
||||||
if (selected.size() != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Node *s = selected[0];
|
|
||||||
PropToolScene *n = memnew(PropToolScene);
|
|
||||||
|
|
||||||
UndoRedo u = get_undo_redo();
|
|
||||||
u.create_action("Add Scene");
|
|
||||||
u.add_do_method(s, "add_child", n);
|
|
||||||
u.add_do_property(n, "owner", get_editor_interface()->get_edited_scene_root());
|
|
||||||
u.add_undo_method(s, "remove_child", n);
|
|
||||||
u.commit_action();
|
|
||||||
|
|
||||||
get_editor_interface()->get_selection()->clear();
|
|
||||||
get_editor_interface()->get_selection()->add_node(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::add_entity() {
|
|
||||||
Array selected = get_editor_interface()->get_selection()->get_selected_nodes();
|
|
||||||
|
|
||||||
if (selected.size() != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Node *s = selected[0];
|
|
||||||
PropToolEntity *n = memnew(PropToolEntity);
|
|
||||||
|
|
||||||
UndoRedo u = get_undo_redo();
|
|
||||||
u.create_action("Add Entity");
|
|
||||||
u.add_do_method(s, "add_child", n);
|
|
||||||
u.add_do_property(n, "owner", get_editor_interface()->get_edited_scene_root());
|
|
||||||
u.add_undo_method(s, "remove_child", n);
|
|
||||||
u.commit_action();
|
|
||||||
|
|
||||||
get_editor_interface()->get_selection()->clear();
|
|
||||||
get_editor_interface()->get_selection()->add_node(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolEditorPlugin::PropToolEditorPlugin(EditorNode *p_node) {
|
|
||||||
EDITOR_DEF("editors/prop_tool/temp_path", "res://.prop_tool_temp/");
|
|
||||||
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "editors/prop_tool/temp_path"));
|
|
||||||
|
|
||||||
String tp = EditorSettings::get_singleton()->get("editors/prop_tool/temp_path");
|
|
||||||
|
|
||||||
if (!tp.ends_with("/")) {
|
|
||||||
tp += "/";
|
|
||||||
EditorSettings::get_singleton()->set("editors/prop_tool/temp_path", tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DirAccess::exists(tp)) {
|
|
||||||
DirAccess *d = DirAccess::create_for_path(tp);
|
|
||||||
|
|
||||||
Error err = d->make_dir_recursive(tp);
|
|
||||||
|
|
||||||
memdelete(d);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
print_error("PropTool: Temporary directory creation failed: error code: " + String::num(err));
|
|
||||||
}
|
|
||||||
|
|
||||||
editor = p_node;
|
|
||||||
|
|
||||||
light_button = memnew(ToolButton);
|
|
||||||
light_button->set_text("Light");
|
|
||||||
light_button->connect("pressed", this, "add_light");
|
|
||||||
|
|
||||||
mesh_button = memnew(ToolButton);
|
|
||||||
mesh_button->set_text("Mesh");
|
|
||||||
mesh_button->connect("pressed", this, "add_mesh");
|
|
||||||
|
|
||||||
prop_button = memnew(ToolButton);
|
|
||||||
prop_button->set_text("Prop");
|
|
||||||
prop_button->connect("pressed", this, "add_prop");
|
|
||||||
|
|
||||||
scene_button = memnew(ToolButton);
|
|
||||||
scene_button->set_text("Scene");
|
|
||||||
scene_button->connect("pressed", this, "add_scene");
|
|
||||||
|
|
||||||
entity_button = memnew(ToolButton);
|
|
||||||
entity_button->set_text("Entity");
|
|
||||||
entity_button->connect("pressed", this, "add_entity");
|
|
||||||
|
|
||||||
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, light_button);
|
|
||||||
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, mesh_button);
|
|
||||||
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, prop_button);
|
|
||||||
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, scene_button);
|
|
||||||
add_control_to_container(EditorPlugin::CONTAINER_SPATIAL_EDITOR_MENU, entity_button);
|
|
||||||
|
|
||||||
light_button->hide();
|
|
||||||
mesh_button->hide();
|
|
||||||
prop_button->hide();
|
|
||||||
scene_button->hide();
|
|
||||||
entity_button->hide();
|
|
||||||
|
|
||||||
call_deferred("connect", "scene_changed", this, "on_scene_changed");
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolEditorPlugin::~PropToolEditorPlugin() {
|
|
||||||
_edited_prop.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::_notification(int p_what) {
|
|
||||||
if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
|
|
||||||
|
|
||||||
String tp = EditorSettings::get_singleton()->get("editors/prop_tool/temp_path");
|
|
||||||
|
|
||||||
if (!tp.ends_with("/")) {
|
|
||||||
tp += "/";
|
|
||||||
EditorSettings::get_singleton()->set("editors/prop_tool/temp_path", tp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DirAccess::exists(tp)) {
|
|
||||||
DirAccess *d = DirAccess::create_for_path(tp);
|
|
||||||
|
|
||||||
Error err = d->make_dir_recursive(tp);
|
|
||||||
|
|
||||||
memdelete(d);
|
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(err, "PropTool: Temporary directory creation failed: error code: " + String::num(err));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEditorPlugin::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("on_scene_changed", "scene_root"), &PropToolEditorPlugin::on_scene_changed);
|
|
||||||
ClassDB::bind_method(D_METHOD("apply_changes"), &PropToolEditorPlugin::apply_changes);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_light"), &PropToolEditorPlugin::add_light);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_mesh"), &PropToolEditorPlugin::add_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_prop"), &PropToolEditorPlugin::add_prop);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_scene"), &PropToolEditorPlugin::add_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_entity"), &PropToolEditorPlugin::add_entity);
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_EDITOR_PLUGIN_H
|
|
||||||
#define PROP_TOOL_EDITOR_PLUGIN_H
|
|
||||||
|
|
||||||
#include "editor/editor_node.h"
|
|
||||||
#include "editor/editor_plugin.h"
|
|
||||||
|
|
||||||
class PropData;
|
|
||||||
class PropTool;
|
|
||||||
|
|
||||||
class PropToolEditorPlugin : public EditorPlugin {
|
|
||||||
GDCLASS(PropToolEditorPlugin, EditorPlugin);
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual String get_name() const { return "PropData"; }
|
|
||||||
bool has_main_screen() const { return false; }
|
|
||||||
virtual void edit(Object *p_object);
|
|
||||||
virtual bool handles(Object *p_object) const;
|
|
||||||
virtual void make_visible(bool p_visible);
|
|
||||||
|
|
||||||
String create_or_get_scene_path(const Ref<PropData> &data);
|
|
||||||
PropTool *create_or_get_scene(const Ref<PropData> &data);
|
|
||||||
Ref<PackedScene> create_scene(const Ref<PropData> &data);
|
|
||||||
|
|
||||||
void on_scene_changed(Node *scene);
|
|
||||||
void apply_changes();
|
|
||||||
void add_light();
|
|
||||||
void add_mesh();
|
|
||||||
void add_prop();
|
|
||||||
void add_scene();
|
|
||||||
void add_entity();
|
|
||||||
|
|
||||||
PropToolEditorPlugin(EditorNode *p_node);
|
|
||||||
~PropToolEditorPlugin();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void _notification(int p_what);
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
ToolButton *light_button;
|
|
||||||
ToolButton *mesh_button;
|
|
||||||
ToolButton *prop_button;
|
|
||||||
ToolButton *scene_button;
|
|
||||||
ToolButton *entity_button;
|
|
||||||
|
|
||||||
ToolButton *edited_prop;
|
|
||||||
|
|
||||||
EditorNode *editor;
|
|
||||||
|
|
||||||
Ref<PropData> _edited_prop;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,152 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_entity.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
#include "../../entity_spell_system/entities/data/entity_data.h"
|
|
||||||
#include "../../entity_spell_system/entities/entity.h"
|
|
||||||
|
|
||||||
Ref<PropDataEntity> PropToolEntity::get_data() {
|
|
||||||
if (!is_visible() || !_entity_data.is_valid())
|
|
||||||
return Ref<PropDataEntity>();
|
|
||||||
|
|
||||||
if (!_prop_entity.is_valid())
|
|
||||||
_prop_entity.instance();
|
|
||||||
|
|
||||||
_prop_entity->set_entity_data_id(_entity_data_id);
|
|
||||||
_prop_entity->set_level(_level);
|
|
||||||
|
|
||||||
return _prop_entity;
|
|
||||||
}
|
|
||||||
void PropToolEntity::set_data(const Ref<PropDataEntity> &data) {
|
|
||||||
_prop_entity = data;
|
|
||||||
|
|
||||||
if (!_prop_entity.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_entity_data_id = _prop_entity->get_entity_data_id();
|
|
||||||
_level = _prop_entity->get_level();
|
|
||||||
|
|
||||||
/*
|
|
||||||
TODO generic solution
|
|
||||||
var dir = Directory.new()
|
|
||||||
if dir.open("res://data/entities/") == OK:
|
|
||||||
dir.list_dir_begin()
|
|
||||||
var file_name = dir.get_next()
|
|
||||||
|
|
||||||
while (file_name != ""):
|
|
||||||
if not dir.current_is_dir():
|
|
||||||
var ed : EntityData = ResourceLoader.load("res://data/entities/" + file_name, "EntityData")
|
|
||||||
|
|
||||||
if ed != null and ed.id == entity_data_id:
|
|
||||||
set_entity_data(ed)
|
|
||||||
return
|
|
||||||
|
|
||||||
file_name = dir.get_next()
|
|
||||||
|
|
||||||
print("PropToolEntity: Entity not found!")
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<EntityData> PropToolEntity::get_entity_data() {
|
|
||||||
return _entity_data;
|
|
||||||
}
|
|
||||||
void PropToolEntity::set_entity_data(const Ref<EntityData> &data) {
|
|
||||||
_entity_data = data;
|
|
||||||
|
|
||||||
if (!_entity_data.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_entity_data_id = _entity_data->get_id();
|
|
||||||
|
|
||||||
if (_entity == NULL) {
|
|
||||||
//TODO generic solutiuon
|
|
||||||
|
|
||||||
//var scene : PackedScene = load("res://addons/prop_tool/player/PropToolDisplayPlayer.tscn")
|
|
||||||
|
|
||||||
//_entity = scene.instance() as Entity
|
|
||||||
|
|
||||||
// add_child(_entity)
|
|
||||||
//_entity.owner = owner
|
|
||||||
|
|
||||||
//_entity.get_node(_entity.character_skeleton_path).owner = owner
|
|
||||||
//_entity.get_node(_entity.character_skeleton_path).refresh_in_editor = true
|
|
||||||
//_entity.get_character_skeleton().refresh_in_editor = true
|
|
||||||
|
|
||||||
// _entity.sentity_data = entity_data
|
|
||||||
|
|
||||||
//name = entity_data.text_name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int PropToolEntity::get_entity_data_id() const {
|
|
||||||
return _entity_data_id;
|
|
||||||
}
|
|
||||||
void PropToolEntity::set_entity_data_id(const int value) {
|
|
||||||
_entity_data_id = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
int PropToolEntity::get_level() const {
|
|
||||||
return _level;
|
|
||||||
}
|
|
||||||
void PropToolEntity::set_level(const int value) {
|
|
||||||
_level = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolEntity::evaluate_children() const {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolEntity::PropToolEntity() {
|
|
||||||
_entity_data_id = 0;
|
|
||||||
_level = 1;
|
|
||||||
|
|
||||||
_entity = NULL;
|
|
||||||
}
|
|
||||||
PropToolEntity::~PropToolEntity() {
|
|
||||||
_entity_data.unref();
|
|
||||||
_prop_entity.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolEntity::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &PropToolEntity::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "value"), &PropToolEntity::set_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "PropDataProp"), "set_data", "get_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_entity_data_id"), &PropToolEntity::get_entity_data_id);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_entity_data_id", "value"), &PropToolEntity::set_entity_data_id);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "entity_data_id"), "set_entity_data_id", "get_entity_data_id");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_level"), &PropToolEntity::get_level);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_level", "value"), &PropToolEntity::set_level);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "level"), "set_level", "get_level");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_entity_data"), &PropToolEntity::get_entity_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_entity_data", "value"), &PropToolEntity::set_entity_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "entity_data", PROPERTY_HINT_RESOURCE_TYPE, "EntityData"), "set_entity_data", "get_entity_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("evaluate_children"), &PropToolEntity::evaluate_children);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_ENTITY_H
|
|
||||||
#define PROP_TOOL_ENTITY_H
|
|
||||||
|
|
||||||
#include "scene/3d/spatial.h"
|
|
||||||
|
|
||||||
#include "../props/prop_data.h"
|
|
||||||
#include "../props/prop_data_entity.h"
|
|
||||||
|
|
||||||
class EntityData;
|
|
||||||
class Entity;
|
|
||||||
|
|
||||||
class PropToolEntity : public Spatial {
|
|
||||||
GDCLASS(PropToolEntity, Spatial);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
Ref<PropDataEntity> get_data();
|
|
||||||
void set_data(const Ref<PropDataEntity> &data);
|
|
||||||
|
|
||||||
Ref<EntityData> get_entity_data();
|
|
||||||
void set_entity_data(const Ref<EntityData> &data);
|
|
||||||
|
|
||||||
int get_entity_data_id() const;
|
|
||||||
void set_entity_data_id(const int value);
|
|
||||||
|
|
||||||
int get_level() const;
|
|
||||||
void set_level(const int value);
|
|
||||||
|
|
||||||
bool evaluate_children() const;
|
|
||||||
|
|
||||||
PropToolEntity();
|
|
||||||
~PropToolEntity();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ref<EntityData> _entity_data;
|
|
||||||
int _entity_data_id;
|
|
||||||
int _level;
|
|
||||||
|
|
||||||
Ref<PropDataEntity> _prop_entity;
|
|
||||||
Entity *_entity;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_light.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
Ref<PropDataLight> PropToolLight::get_data() {
|
|
||||||
|
|
||||||
if (!is_visible())
|
|
||||||
return Ref<PropDataLight>();
|
|
||||||
|
|
||||||
if (!_prop_light.is_valid())
|
|
||||||
_prop_light.instance();
|
|
||||||
|
|
||||||
_prop_light->set_light_color(get_color());
|
|
||||||
_prop_light->set_light_size(get_param(Light::PARAM_RANGE));
|
|
||||||
|
|
||||||
return _prop_light;
|
|
||||||
}
|
|
||||||
void PropToolLight::set_data(const Ref<PropDataLight> &data) {
|
|
||||||
_prop_light = data;
|
|
||||||
|
|
||||||
if (!_prop_light.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
set_color(_prop_light->get_light_color());
|
|
||||||
set_param(Light::PARAM_RANGE, _prop_light->get_light_size());
|
|
||||||
set_param(Light::PARAM_ENERGY, _prop_light->get_light_size());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolLight::get_snap_to_mesh() const {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropToolLight::set_snap_to_mesh(const bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolLight::PropToolLight() {
|
|
||||||
}
|
|
||||||
PropToolLight::~PropToolLight() {
|
|
||||||
_prop_light.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolLight::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &PropToolLight::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "value"), &PropToolLight::set_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "PropDataLight"), "set_data", "get_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropToolLight::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropToolLight::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_LIGHT_H
|
|
||||||
#define PROP_TOOL_LIGHT_H
|
|
||||||
|
|
||||||
class EditorNode;
|
|
||||||
class EditorPlugin;
|
|
||||||
class PropData;
|
|
||||||
|
|
||||||
#include "../props/prop_data_light.h"
|
|
||||||
#include "scene/3d/light.h"
|
|
||||||
|
|
||||||
class propData;
|
|
||||||
|
|
||||||
class PropToolLight : public OmniLight {
|
|
||||||
GDCLASS(PropToolLight, OmniLight);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
Ref<PropDataLight> get_data();
|
|
||||||
void set_data(const Ref<PropDataLight> &data);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh() const;
|
|
||||||
void set_snap_to_mesh(const bool value);
|
|
||||||
|
|
||||||
PropToolLight();
|
|
||||||
~PropToolLight();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ref<PropDataLight> _prop_light;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,183 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_mesh.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
Ref<MeshDataResource> PropToolMesh::get_mesh_data() {
|
|
||||||
return _mesh_data;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_mesh_data(const Ref<MeshDataResource> &data) {
|
|
||||||
_mesh_data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropDataMesh> PropToolMesh::get_data() {
|
|
||||||
return _prop_mesh;
|
|
||||||
|
|
||||||
if (!is_visible() || !_mesh_data.is_valid())
|
|
||||||
return Ref<PropDataMesh>();
|
|
||||||
|
|
||||||
if (!_prop_mesh.is_valid())
|
|
||||||
_prop_mesh.instance();
|
|
||||||
|
|
||||||
_prop_mesh->set_mesh(_mesh_data);
|
|
||||||
_prop_mesh->set_texture(_texture);
|
|
||||||
_prop_mesh->set_snap_to_mesh(_snap_to_mesh);
|
|
||||||
_prop_mesh->set_snap_axis(_snap_axis);
|
|
||||||
|
|
||||||
return _prop_mesh;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_data(const Ref<PropDataMesh> &data) {
|
|
||||||
_prop_mesh = data;
|
|
||||||
|
|
||||||
if (!_prop_mesh.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_texture = _prop_mesh->get_texture();
|
|
||||||
|
|
||||||
_snap_to_mesh = _prop_mesh->get_snap_to_mesh();
|
|
||||||
_snap_axis = _prop_mesh->get_snap_axis();
|
|
||||||
|
|
||||||
set_generate(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<Texture> PropToolMesh::get_texture() {
|
|
||||||
return _texture;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_texture(const Ref<Texture> &tex) {
|
|
||||||
_texture = tex;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolMesh::get_snap_to_mesh() const {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_snap_to_mesh(const bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropToolMesh::get_snap_axis() const {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_snap_axis(const Vector3 &value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<MeshDataResource> PropToolMesh::get_prop_mesh() {
|
|
||||||
return _prop_mesh;
|
|
||||||
}
|
|
||||||
void PropToolMesh::set_prop_mesh(const Ref<MeshDataResource> &data) {
|
|
||||||
_prop_mesh = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolMesh::generate() {
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolMesh::PropToolMesh() {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropToolMesh::~PropToolMesh() {
|
|
||||||
_prop_mesh.unref();
|
|
||||||
_material.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolMesh::set_generate(bool value) {
|
|
||||||
if (!value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!_mesh_data.is_valid()) {
|
|
||||||
mesh.unref();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<ArrayMesh> m;
|
|
||||||
m.instance();
|
|
||||||
|
|
||||||
Array arr;
|
|
||||||
arr.resize(ArrayMesh::ARRAY_MAX);
|
|
||||||
|
|
||||||
Array mda = _mesh_data->get_array();
|
|
||||||
|
|
||||||
PoolVector3Array v;
|
|
||||||
v.append_array(mda[Mesh::ARRAY_VERTEX]);
|
|
||||||
arr.set(Mesh::ARRAY_VERTEX, v);
|
|
||||||
|
|
||||||
PoolVector3Array norm;
|
|
||||||
norm.append_array(mda[Mesh::ARRAY_NORMAL]);
|
|
||||||
arr.set(Mesh::ARRAY_NORMAL, norm);
|
|
||||||
|
|
||||||
PoolVector2Array uv;
|
|
||||||
uv.append_array(mda[Mesh::ARRAY_TEX_UV]);
|
|
||||||
arr.set(Mesh::ARRAY_TEX_UV, uv);
|
|
||||||
|
|
||||||
PoolIntArray ind;
|
|
||||||
ind.append_array(mda[Mesh::ARRAY_INDEX]);
|
|
||||||
arr.set(Mesh::ARRAY_INDEX, ind);
|
|
||||||
|
|
||||||
m->add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr);
|
|
||||||
|
|
||||||
mesh = m;
|
|
||||||
|
|
||||||
if (_texture.is_valid()) {
|
|
||||||
if (!_material.is_valid())
|
|
||||||
_material.instance();
|
|
||||||
|
|
||||||
_material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, _texture);
|
|
||||||
|
|
||||||
set_material_override(_material);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolMesh::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_mesh_data"), &PropToolMesh::get_mesh_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_mesh_data", "value"), &PropToolMesh::set_mesh_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh_data", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh_data", "get_mesh_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &PropToolMesh::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "value"), &PropToolMesh::set_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "PropDataMesh"), "set_data", "get_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_texture"), &PropToolMesh::get_texture);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_texture", "value"), &PropToolMesh::set_texture);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropToolMesh::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropToolMesh::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropToolMesh::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropToolMesh::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_prop_mesh"), &PropToolMesh::get_prop_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_prop_mesh", "value"), &PropToolMesh::set_prop_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop_mesh", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_prop_mesh", "get_prop_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("generate"), &PropToolMesh::generate);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_generate"), &PropToolMesh::get_generate);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_generate"), &PropToolMesh::set_generate);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "generate"), "set_generate", "get_generate");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_MESH_H
|
|
||||||
#define PROP_TOOL_MESH_H
|
|
||||||
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
|
|
||||||
#include "../props/prop_data_mesh.h"
|
|
||||||
#include "scene/3d/mesh_instance.h"
|
|
||||||
|
|
||||||
class PropToolMesh : public MeshInstance {
|
|
||||||
GDCLASS(PropToolMesh, MeshInstance);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
Ref<MeshDataResource> get_mesh_data();
|
|
||||||
void set_mesh_data(const Ref<MeshDataResource> &data);
|
|
||||||
|
|
||||||
Ref<PropDataMesh> get_data();
|
|
||||||
void set_data(const Ref<PropDataMesh> &data);
|
|
||||||
|
|
||||||
Ref<Texture> get_texture();
|
|
||||||
void set_texture(const Ref<Texture> &tex);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh() const;
|
|
||||||
void set_snap_to_mesh(const bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis() const;
|
|
||||||
void set_snap_axis(const Vector3 &value);
|
|
||||||
|
|
||||||
Ref<MeshDataResource> get_prop_mesh();
|
|
||||||
void set_prop_mesh(const Ref<MeshDataResource> &data);
|
|
||||||
|
|
||||||
void generate();
|
|
||||||
|
|
||||||
PropToolMesh();
|
|
||||||
~PropToolMesh();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool get_generate() { return false; }
|
|
||||||
void set_generate(bool value);
|
|
||||||
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ref<MeshDataResource> _mesh_data;
|
|
||||||
Ref<PropDataMesh> _prop_mesh;
|
|
||||||
Ref<Texture> _texture;
|
|
||||||
Ref<SpatialMaterial> _material;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_prop.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
Ref<PropDataProp> PropToolProp::get_data() {
|
|
||||||
if (!is_visible() || !_prop_data.is_valid())
|
|
||||||
return Ref<PropDataProp>();
|
|
||||||
|
|
||||||
if (!_prop_data.is_valid())
|
|
||||||
_prop_data.instance();
|
|
||||||
|
|
||||||
_prop_prop->set_prop(_prop_data);
|
|
||||||
_prop_prop->set_snap_to_mesh(_snap_to_mesh);
|
|
||||||
_prop_prop->set_snap_axis(_snap_axis);
|
|
||||||
|
|
||||||
return _prop_prop;
|
|
||||||
}
|
|
||||||
void PropToolProp::set_data(const Ref<PropDataProp> &data) {
|
|
||||||
_prop_prop = data;
|
|
||||||
|
|
||||||
if (!_prop_prop.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_prop_data = _prop_prop->get_prop();
|
|
||||||
_snap_to_mesh = _prop_prop->get_snap_to_mesh();
|
|
||||||
_snap_axis = _prop_prop->get_snap_axis();
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropData> PropToolProp::get_prop_data() {
|
|
||||||
return _prop_data;
|
|
||||||
}
|
|
||||||
void PropToolProp::set_prop_data(const Ref<PropData> &data) {
|
|
||||||
_prop_data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolProp::get_snap_to_mesh() const {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropToolProp::set_snap_to_mesh(const bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropToolProp::get_snap_axis() const {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropToolProp::set_snap_axis(const Vector3 &value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolProp::PropToolProp() {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropToolProp::~PropToolProp() {
|
|
||||||
_prop_data.unref();
|
|
||||||
_prop_prop.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolProp::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &PropToolProp::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "value"), &PropToolProp::set_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "PropDataProp"), "set_data", "get_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropToolProp::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropToolProp::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropToolProp::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropToolProp::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_prop_data"), &PropToolProp::get_prop_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_prop_data", "value"), &PropToolProp::set_prop_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop_data", PROPERTY_HINT_RESOURCE_TYPE, "PropData"), "set_prop_data", "get_prop_data");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_PROP_H
|
|
||||||
#define PROP_TOOL_PROP_H
|
|
||||||
|
|
||||||
#include "scene/3d/spatial.h"
|
|
||||||
|
|
||||||
#include "../props/prop_data.h"
|
|
||||||
#include "../props/prop_data_prop.h"
|
|
||||||
|
|
||||||
class PropToolProp : public Spatial {
|
|
||||||
GDCLASS(PropToolProp, Spatial);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
Ref<PropDataProp> get_data();
|
|
||||||
void set_data(const Ref<PropDataProp> &data);
|
|
||||||
|
|
||||||
Ref<PropData> get_prop_data();
|
|
||||||
void set_prop_data(const Ref<PropData> &data);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh() const;
|
|
||||||
void set_snap_to_mesh(const bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis() const;
|
|
||||||
void set_snap_axis(const Vector3 &value);
|
|
||||||
|
|
||||||
PropToolProp();
|
|
||||||
~PropToolProp();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ref<PropData> _prop_data;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
Ref<PropDataProp> _prop_prop;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_tool_scene.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
|
|
||||||
Ref<PropDataScene> PropToolScene::get_data() {
|
|
||||||
if (!is_visible() || !_scene_data.is_valid())
|
|
||||||
return Ref<PropDataScene>();
|
|
||||||
|
|
||||||
if (!_prop_scene.is_valid())
|
|
||||||
_prop_scene.instance();
|
|
||||||
|
|
||||||
_prop_scene->set_scene(_scene_data);
|
|
||||||
_prop_scene->set_snap_to_mesh(_snap_to_mesh);
|
|
||||||
_prop_scene->set_snap_axis(_snap_axis);
|
|
||||||
|
|
||||||
return _prop_scene;
|
|
||||||
}
|
|
||||||
void PropToolScene::set_data(const Ref<PropDataScene> &data) {
|
|
||||||
_prop_scene = data;
|
|
||||||
|
|
||||||
if (!_prop_scene.is_valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
_scene_data = _prop_scene->get_scene();
|
|
||||||
_snap_to_mesh = _prop_scene->get_snap_to_mesh();
|
|
||||||
_snap_axis = _prop_scene->get_snap_axis();
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PackedScene> PropToolScene::get_scene_data() {
|
|
||||||
return _scene_data;
|
|
||||||
}
|
|
||||||
void PropToolScene::set_scene_data(const Ref<PackedScene> &data) {
|
|
||||||
_scene_data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropToolScene::get_snap_to_mesh() const {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropToolScene::set_snap_to_mesh(const bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropToolScene::get_snap_axis() const {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropToolScene::set_snap_axis(const Vector3 &value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropToolScene::PropToolScene() {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropToolScene::~PropToolScene() {
|
|
||||||
_scene_data.unref();
|
|
||||||
_prop_scene.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropToolScene::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &PropToolScene::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "value"), &PropToolScene::set_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "PropDataScene"), "set_data", "get_data");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropToolScene::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropToolScene::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropToolScene::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropToolScene::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_scene_data"), &PropToolScene::get_scene_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_scene_data", "value"), &PropToolScene::set_scene_data);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "scene_data", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_scene_data", "get_scene_data");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_TOOL_SCENE_H
|
|
||||||
#define PROP_TOOL_SCENE_H
|
|
||||||
|
|
||||||
#include "scene/3d/spatial.h"
|
|
||||||
|
|
||||||
#include "../props/prop_data_scene.h"
|
|
||||||
|
|
||||||
class PropToolScene : public Spatial {
|
|
||||||
GDCLASS(PropToolScene, Spatial);
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
public:
|
|
||||||
Ref<PropDataScene> get_data();
|
|
||||||
void set_data(const Ref<PropDataScene> &data);
|
|
||||||
|
|
||||||
Ref<PackedScene> get_scene_data();
|
|
||||||
void set_scene_data(const Ref<PackedScene> &data);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh() const;
|
|
||||||
void set_snap_to_mesh(const bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis() const;
|
|
||||||
void set_snap_axis(const Vector3 &value);
|
|
||||||
|
|
||||||
PropToolScene();
|
|
||||||
~PropToolScene();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ref<PackedScene> _scene_data;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
Ref<PropDataScene> _prop_scene;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,264 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data.h"
|
|
||||||
|
|
||||||
#include "../world/voxel_chunk.h"
|
|
||||||
#include "prop_data_prop.h"
|
|
||||||
|
|
||||||
int PropData::get_id() const {
|
|
||||||
return _id;
|
|
||||||
}
|
|
||||||
void PropData::set_id(const int value) {
|
|
||||||
_id = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropData::get_snap_to_mesh() const {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropData::set_snap_to_mesh(const bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropData::get_snap_axis() const {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropData::set_snap_axis(const Vector3 &value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropDataEntry> PropData::get_prop(const int index) const {
|
|
||||||
ERR_FAIL_INDEX_V(index, _props.size(), Ref<PropDataEntry>());
|
|
||||||
|
|
||||||
return _props.get(index);
|
|
||||||
}
|
|
||||||
void PropData::set_prop(const int index, const Ref<PropDataEntry> prop) {
|
|
||||||
ERR_FAIL_INDEX(index, _props.size());
|
|
||||||
|
|
||||||
_props.set(index, prop);
|
|
||||||
}
|
|
||||||
void PropData::add_prop(const Ref<PropDataEntry> prop) {
|
|
||||||
_props.push_back(prop);
|
|
||||||
}
|
|
||||||
void PropData::remove_prop(const int index) {
|
|
||||||
ERR_FAIL_INDEX(index, _props.size());
|
|
||||||
|
|
||||||
_props.remove(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
int PropData::get_prop_count() const {
|
|
||||||
return _props.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<Variant> PropData::get_props() {
|
|
||||||
Vector<Variant> r;
|
|
||||||
for (int i = 0; i < _props.size(); i++) {
|
|
||||||
r.push_back(_props[i].get_ref_ptr());
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
void PropData::set_props(const Vector<Variant> &props) {
|
|
||||||
_props.clear();
|
|
||||||
for (int i = 0; i < props.size(); i++) {
|
|
||||||
Ref<PropDataEntry> prop = Ref<PropDataEntry>(props[i]);
|
|
||||||
|
|
||||||
_props.push_back(prop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropData::add_textures_into(Ref<TexturePacker> texture_packer) {
|
|
||||||
ERR_FAIL_COND(!texture_packer.is_valid());
|
|
||||||
|
|
||||||
for (int i = 0; i < _props.size(); ++i) {
|
|
||||||
Ref<PropDataEntry> entry = _props.get(i);
|
|
||||||
|
|
||||||
Ref<PropDataMesh> pmesh = entry;
|
|
||||||
|
|
||||||
if (pmesh.is_valid() && pmesh->get_texture().is_valid()) {
|
|
||||||
texture_packer->add_texture(pmesh->get_texture());
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropDataProp> pdataprop = entry;
|
|
||||||
|
|
||||||
if (pdataprop.is_valid() && pdataprop->get_prop().is_valid()) {
|
|
||||||
pdataprop->get_prop()->add_textures_into(texture_packer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropData::add_prop_lights_into(Ref<VoxelChunk> chunk, Transform parent_transform, bool allow_snap) {
|
|
||||||
ERR_FAIL_COND(!chunk.is_valid());
|
|
||||||
|
|
||||||
for (int i = 0; i < _props.size(); ++i) {
|
|
||||||
Ref<PropDataEntry> entry = _props.get(i);
|
|
||||||
|
|
||||||
Ref<PropDataLight> pl = entry;
|
|
||||||
|
|
||||||
if (pl.is_valid()) {
|
|
||||||
Transform t = parent_transform * pl->get_transform();
|
|
||||||
|
|
||||||
Vector3 px = t.origin / chunk->get_voxel_scale();
|
|
||||||
|
|
||||||
Ref<VoxelLight> vl;
|
|
||||||
vl.instance();
|
|
||||||
vl->set_world_position(px.x + chunk->get_position_x() * chunk->get_size_x(), px.y + chunk->get_position_y() * chunk->get_size_y(), px.z + chunk->get_position_z() * chunk->get_size_z());
|
|
||||||
vl->set_color(pl->get_light_color());
|
|
||||||
vl->set_size(pl->get_light_size());
|
|
||||||
|
|
||||||
chunk->add_prop_light(vl);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropDataProp> pdataprop = entry;
|
|
||||||
|
|
||||||
if (pdataprop.is_valid() && pdataprop->get_prop().is_valid()) {
|
|
||||||
Ref<PropData> pd = pdataprop->get_prop();
|
|
||||||
|
|
||||||
if (allow_snap) {
|
|
||||||
if (pd->get_snap_to_mesh())
|
|
||||||
print_error(pd->get_name());
|
|
||||||
|
|
||||||
pd->add_prop_lights_into(chunk, get_next_snapped_prop_transform(chunk->get_voxel_world(), parent_transform * pdataprop->get_transform(), pd->get_snap_to_mesh(), pd->get_snap_axis()), allow_snap);
|
|
||||||
} else {
|
|
||||||
pd->add_prop_lights_into(chunk, parent_transform * pdataprop->get_transform(), allow_snap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropData::add_meshes_into(Ref<VoxelMesher> mesher, Ref<TexturePacker> texture_packer, Transform parent_transform, Spatial *snap_spatial) {
|
|
||||||
ERR_FAIL_COND(!mesher.is_valid());
|
|
||||||
ERR_FAIL_COND(!texture_packer.is_valid());
|
|
||||||
ERR_FAIL_COND(texture_packer->get_generated_texture_count() == 0);
|
|
||||||
ERR_FAIL_COND(snap_spatial != NULL && !ObjectDB::instance_validate(snap_spatial));
|
|
||||||
|
|
||||||
Vector2 texsize = texture_packer->get_generated_texture(0)->get_size();
|
|
||||||
|
|
||||||
for (int i = 0; i < _props.size(); ++i) {
|
|
||||||
Ref<PropDataEntry> entry = _props.get(i);
|
|
||||||
|
|
||||||
Ref<PropDataMesh> pmesh = entry;
|
|
||||||
|
|
||||||
if (pmesh.is_valid()) {
|
|
||||||
|
|
||||||
Rect2 reg = Rect2(0, 0, 1, 1);
|
|
||||||
|
|
||||||
if (pmesh->get_texture().is_valid()) {
|
|
||||||
|
|
||||||
Ref<AtlasTexture> at = texture_packer->get_texture(pmesh->get_texture());
|
|
||||||
|
|
||||||
reg = at->get_region();
|
|
||||||
|
|
||||||
reg.position.x /= texsize.x;
|
|
||||||
reg.position.y /= texsize.y;
|
|
||||||
reg.size.x /= texsize.x;
|
|
||||||
reg.size.y /= texsize.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snap_spatial != NULL)
|
|
||||||
mesher->add_mesh_data_resource_transform(pmesh->get_mesh(), get_next_snapped_prop_transform(snap_spatial, parent_transform * pmesh->get_transform(), pmesh->get_snap_to_mesh(), pmesh->get_snap_axis()), reg);
|
|
||||||
else
|
|
||||||
mesher->add_mesh_data_resource_transform(pmesh->get_mesh(), parent_transform * pmesh->get_transform(), reg);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<PropDataProp> pdataprop = entry;
|
|
||||||
|
|
||||||
if (pdataprop.is_valid() && pdataprop->get_prop().is_valid()) {
|
|
||||||
|
|
||||||
if (snap_spatial != NULL)
|
|
||||||
pdataprop->get_prop()->add_meshes_into(mesher, texture_packer, get_next_snapped_prop_transform(snap_spatial, parent_transform * pdataprop->get_transform(), pdataprop->get_snap_to_mesh(), pdataprop->get_snap_axis()), snap_spatial);
|
|
||||||
else
|
|
||||||
pdataprop->get_prop()->add_meshes_into(mesher, texture_packer, parent_transform * pmesh->get_transform(), snap_spatial);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void PropData::add_meshes_into_bind(Ref<VoxelMesher> mesher, Ref<TexturePacker> texture_packer, Transform parent_transform, Node *snap_spatial) {
|
|
||||||
Spatial *s = Object::cast_to<Spatial>(snap_spatial);
|
|
||||||
|
|
||||||
ERR_FAIL_COND(s != NULL && !ObjectDB::instance_validate(s));
|
|
||||||
|
|
||||||
add_meshes_into(mesher, texture_packer, parent_transform, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
Transform PropData::get_next_snapped_prop_transform(Spatial *s, Transform parent_transform, bool snap_to_mesh, Vector3 snap_axis) {
|
|
||||||
if (snap_to_mesh) {
|
|
||||||
Vector3 pos = s->to_global(parent_transform.origin);
|
|
||||||
Vector3 world_snap_axis = s->to_global(parent_transform.xform(snap_axis));
|
|
||||||
Vector3 world_snap_dir = world_snap_axis - pos;
|
|
||||||
world_snap_dir *= 100;
|
|
||||||
|
|
||||||
PhysicsDirectSpaceState *space_state = s->get_world()->get_direct_space_state();
|
|
||||||
|
|
||||||
ERR_FAIL_COND_V(space_state == NULL, parent_transform);
|
|
||||||
|
|
||||||
PhysicsDirectSpaceState::RayResult res;
|
|
||||||
|
|
||||||
if (space_state->intersect_ray(pos - world_snap_dir, pos + world_snap_dir, res, Set<RID>(), 1)) {
|
|
||||||
parent_transform.origin = s->to_local(res.position);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent_transform;
|
|
||||||
}
|
|
||||||
Transform PropData::get_next_snapped_prop_transform_bind(Node *spatial, Transform parent_transform, bool snap_to_mesh, Vector3 snap_axis) {
|
|
||||||
Spatial *s = Object::cast_to<Spatial>(spatial);
|
|
||||||
|
|
||||||
ERR_FAIL_COND_V(!ObjectDB::instance_validate(s), parent_transform);
|
|
||||||
|
|
||||||
return get_next_snapped_prop_transform(s, parent_transform, snap_to_mesh, snap_axis);
|
|
||||||
}
|
|
||||||
|
|
||||||
PropData::PropData() {
|
|
||||||
_id = 0;
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, -1, 0);
|
|
||||||
}
|
|
||||||
PropData::~PropData() {
|
|
||||||
_props.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropData::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropData::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropData::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropData::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropData::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_prop", "index"), &PropData::get_prop);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_prop", "index", "spell"), &PropData::set_prop);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_prop", "prop"), &PropData::add_prop);
|
|
||||||
ClassDB::bind_method(D_METHOD("remove_prop", "index"), &PropData::remove_prop);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_prop_count"), &PropData::get_prop_count);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_props"), &PropData::get_props);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_props", "props"), &PropData::set_props);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "props", PROPERTY_HINT_NONE, "17/17:PropDataEntry", PROPERTY_USAGE_DEFAULT, "PropDataEntry"), "set_props", "get_props");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("add_textures_into", "texture_packer"), &PropData::add_textures_into);
|
|
||||||
ClassDB::bind_method(D_METHOD("add_prop_lights_into", "chunk", "parent_transform", "allow_snap"), &PropData::add_prop_lights_into);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("add_meshes_into", "mesher", "texture_packer", "parent_transform", "snap_spatial"), &PropData::add_meshes_into_bind);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_next_snapped_prop_transform", "spatial", "parent_transform", "snap_to_mesh", "snap_axis"), &PropData::get_next_snapped_prop_transform_bind);
|
|
||||||
}
|
|
@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_H
|
|
||||||
#define PROP_DATA_H
|
|
||||||
|
|
||||||
#include "core/math/rect2.h"
|
|
||||||
#include "core/math/transform.h"
|
|
||||||
#include "core/math/vector2.h"
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
#include "core/reference.h"
|
|
||||||
#include "core/vector.h"
|
|
||||||
|
|
||||||
#include "servers/physics_server.h"
|
|
||||||
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
#include "prop_data_mesh.h"
|
|
||||||
|
|
||||||
#include "../meshers/voxel_mesher.h"
|
|
||||||
|
|
||||||
#include "../../texture_packer/texture_packer.h"
|
|
||||||
|
|
||||||
class Spatial;
|
|
||||||
class VoxelChunk;
|
|
||||||
|
|
||||||
class PropData : public Resource {
|
|
||||||
GDCLASS(PropData, Resource);
|
|
||||||
|
|
||||||
public:
|
|
||||||
int get_id() const;
|
|
||||||
void set_id(const int value);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh() const;
|
|
||||||
void set_snap_to_mesh(const bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis() const;
|
|
||||||
void set_snap_axis(const Vector3 &value);
|
|
||||||
|
|
||||||
Ref<PropDataEntry> get_prop(const int index) const;
|
|
||||||
void set_prop(const int index, const Ref<PropDataEntry> prop);
|
|
||||||
void add_prop(const Ref<PropDataEntry> prop);
|
|
||||||
void remove_prop(const int index);
|
|
||||||
|
|
||||||
int get_prop_count() const;
|
|
||||||
|
|
||||||
Vector<Variant> get_props();
|
|
||||||
void set_props(const Vector<Variant> &props);
|
|
||||||
|
|
||||||
void add_textures_into(Ref<TexturePacker> texture_packer);
|
|
||||||
void add_prop_lights_into(Ref<VoxelChunk> chunk, Transform parent_transform, bool allow_snap);
|
|
||||||
void add_meshes_into(Ref<VoxelMesher> mesher, Ref<TexturePacker> texture_packer, Transform parent_transform, Spatial *snap_spatial = NULL);
|
|
||||||
void add_meshes_into_bind(Ref<VoxelMesher> mesher, Ref<TexturePacker> texture_packer, Transform parent_transform, Node *snap_spatial = NULL);
|
|
||||||
|
|
||||||
Transform get_next_snapped_prop_transform(Spatial *s, Transform parent_transform, bool snap_to_mesh, Vector3 snap_axis);
|
|
||||||
Transform get_next_snapped_prop_transform_bind(Node *spatial, Transform parent_transform, bool snap_to_mesh, Vector3 snap_axis);
|
|
||||||
|
|
||||||
PropData();
|
|
||||||
~PropData();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int _id;
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
|
|
||||||
Vector<Ref<PropDataEntry> > _props;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_entity.h"
|
|
||||||
|
|
||||||
int PropDataEntity::get_entity_data_id() const {
|
|
||||||
return _entity_data_id;
|
|
||||||
}
|
|
||||||
void PropDataEntity::set_entity_data_id(const int value) {
|
|
||||||
_entity_data_id = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
int PropDataEntity::get_level() const {
|
|
||||||
return _level;
|
|
||||||
}
|
|
||||||
void PropDataEntity::set_level(const int value) {
|
|
||||||
_level = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataEntity::PropDataEntity() {
|
|
||||||
_entity_data_id = 0;
|
|
||||||
_level = 1;
|
|
||||||
}
|
|
||||||
PropDataEntity::~PropDataEntity() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataEntity::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_entity_data_id"), &PropDataEntity::get_entity_data_id);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_entity_data_id", "value"), &PropDataEntity::set_entity_data_id);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "entity_data_id"), "set_entity_data_id", "get_entity_data_id");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_level"), &PropDataEntity::get_level);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_level", "value"), &PropDataEntity::set_level);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "level"), "set_level", "get_level");
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_ENTITY_H
|
|
||||||
#define PROP_DATA_ENTITY_H
|
|
||||||
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
class PropDataEntity : public PropDataEntry {
|
|
||||||
GDCLASS(PropDataEntity, PropDataEntry);
|
|
||||||
|
|
||||||
public:
|
|
||||||
int get_entity_data_id() const;
|
|
||||||
void set_entity_data_id(const int value);
|
|
||||||
|
|
||||||
int get_level() const;
|
|
||||||
void set_level(const int value);
|
|
||||||
|
|
||||||
PropDataEntity();
|
|
||||||
~PropDataEntity();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int _level;
|
|
||||||
int _entity_data_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
Transform PropDataEntry::get_transform() const {
|
|
||||||
return _transform;
|
|
||||||
}
|
|
||||||
void PropDataEntry::set_transform(const Transform value) {
|
|
||||||
_transform = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataEntry::PropDataEntry() {
|
|
||||||
}
|
|
||||||
PropDataEntry::~PropDataEntry() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataEntry::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_transform"), &PropDataEntry::get_transform);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_transform", "value"), &PropDataEntry::set_transform);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM, "transform"), "set_transform", "get_transform");
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_DATA_H
|
|
||||||
#define PROP_DATA_DATA_H
|
|
||||||
|
|
||||||
#include "core/math/transform.h"
|
|
||||||
#include "core/resource.h"
|
|
||||||
|
|
||||||
class PropDataEntry : public Resource {
|
|
||||||
GDCLASS(PropDataEntry, Resource);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Transform get_transform() const;
|
|
||||||
void set_transform(const Transform value);
|
|
||||||
|
|
||||||
PropDataEntry();
|
|
||||||
~PropDataEntry();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Transform _transform;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_light.h"
|
|
||||||
|
|
||||||
Color PropDataLight::get_light_color() const {
|
|
||||||
return _light_color;
|
|
||||||
}
|
|
||||||
void PropDataLight::set_light_color(const Color value) {
|
|
||||||
_light_color = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
int PropDataLight::get_light_size() const {
|
|
||||||
return _light_size;
|
|
||||||
}
|
|
||||||
void PropDataLight::set_light_size(const int value) {
|
|
||||||
_light_size = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataLight::PropDataLight() {
|
|
||||||
_light_size = 5;
|
|
||||||
}
|
|
||||||
PropDataLight::~PropDataLight() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataLight::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_light_color"), &PropDataLight::get_light_color);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_light_color", "value"), &PropDataLight::set_light_color);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "light_color"), "set_light_color", "get_light_color");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_light_size"), &PropDataLight::get_light_size);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_light_size", "value"), &PropDataLight::set_light_size);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "light_size"), "set_light_size", "get_light_size");
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_LIGHT_H
|
|
||||||
#define PROP_DATA_LIGHT_H
|
|
||||||
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
#include "core/color.h"
|
|
||||||
|
|
||||||
class PropDataLight : public PropDataEntry {
|
|
||||||
GDCLASS(PropDataLight, PropDataEntry);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Color get_light_color() const;
|
|
||||||
void set_light_color(const Color value);
|
|
||||||
|
|
||||||
int get_light_size() const;
|
|
||||||
void set_light_size(const int value);
|
|
||||||
|
|
||||||
PropDataLight();
|
|
||||||
~PropDataLight();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Color _light_color;
|
|
||||||
int _light_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_mesh.h"
|
|
||||||
|
|
||||||
Ref<MeshDataResource> PropDataMesh::get_mesh() const {
|
|
||||||
return _mesh;
|
|
||||||
}
|
|
||||||
void PropDataMesh::set_mesh(const Ref<MeshDataResource> mesh) {
|
|
||||||
_mesh = mesh;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<Texture> PropDataMesh::get_texture() const {
|
|
||||||
return _texture;
|
|
||||||
}
|
|
||||||
void PropDataMesh::set_texture(const Ref<Texture> texture) {
|
|
||||||
_texture = texture;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropDataMesh::get_snap_to_mesh() {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropDataMesh::set_snap_to_mesh(bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropDataMesh::get_snap_axis() {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropDataMesh::set_snap_axis(Vector3 value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataMesh::PropDataMesh() {
|
|
||||||
_snap_to_mesh = true;
|
|
||||||
_snap_axis = Vector3(0, 1, 0);
|
|
||||||
}
|
|
||||||
PropDataMesh::~PropDataMesh() {
|
|
||||||
if (_mesh.is_valid())
|
|
||||||
_mesh.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataMesh::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_mesh"), &PropDataMesh::get_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_mesh", "value"), &PropDataMesh::set_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "MeshDataResource"), "set_mesh", "get_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_texture"), &PropDataMesh::get_texture);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_texture", "value"), &PropDataMesh::set_texture);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropDataMesh::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropDataMesh::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropDataMesh::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropDataMesh::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_MESH_H
|
|
||||||
#define PROP_DATA_MESH_H
|
|
||||||
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
#include "scene/resources/texture.h"
|
|
||||||
|
|
||||||
#include "../../mesh_data_resource/mesh_data_resource.h"
|
|
||||||
|
|
||||||
class PropDataMesh : public PropDataEntry {
|
|
||||||
GDCLASS(PropDataMesh, PropDataEntry);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Ref<MeshDataResource> get_mesh() const;
|
|
||||||
void set_mesh(const Ref<MeshDataResource> mesh);
|
|
||||||
|
|
||||||
Ref<Texture> get_texture() const;
|
|
||||||
void set_texture(const Ref<Texture> texture);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh();
|
|
||||||
void set_snap_to_mesh(bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis();
|
|
||||||
void set_snap_axis(Vector3 value);
|
|
||||||
|
|
||||||
PropDataMesh();
|
|
||||||
~PropDataMesh();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
Ref<MeshDataResource> _mesh;
|
|
||||||
Ref<Texture> _texture;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_prop.h"
|
|
||||||
|
|
||||||
Ref<PropData> PropDataProp::get_prop() const {
|
|
||||||
return _prop;
|
|
||||||
}
|
|
||||||
void PropDataProp::set_prop(const Ref<PropData> value) {
|
|
||||||
_prop = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropDataProp::get_snap_to_mesh() {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropDataProp::set_snap_to_mesh(bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropDataProp::get_snap_axis() {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropDataProp::set_snap_axis(Vector3 value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataProp::PropDataProp() {
|
|
||||||
_snap_to_mesh = false;
|
|
||||||
_snap_axis = Vector3(0, 1, 0);
|
|
||||||
}
|
|
||||||
PropDataProp::~PropDataProp() {
|
|
||||||
if (_prop.is_valid())
|
|
||||||
_prop.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataProp::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_prop"), &PropDataProp::get_prop);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_prop", "value"), &PropDataProp::set_prop);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop", PROPERTY_HINT_RESOURCE_TYPE, "PropData"), "set_prop", "get_prop");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropDataProp::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropDataProp::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropDataProp::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropDataProp::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_PROP_H
|
|
||||||
#define PROP_DATA_PROP_H
|
|
||||||
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
#include "prop_data.h"
|
|
||||||
|
|
||||||
class PropDataProp : public PropDataEntry {
|
|
||||||
GDCLASS(PropDataProp, PropDataEntry);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Ref<PropData> get_prop() const;
|
|
||||||
void set_prop(const Ref<PropData> value);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh();
|
|
||||||
void set_snap_to_mesh(bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis();
|
|
||||||
void set_snap_axis(Vector3 value);
|
|
||||||
|
|
||||||
PropDataProp();
|
|
||||||
~PropDataProp();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
Ref<PropData> _prop;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "prop_data_scene.h"
|
|
||||||
|
|
||||||
Ref<PackedScene> PropDataScene::get_scene() const {
|
|
||||||
return _scene;
|
|
||||||
}
|
|
||||||
void PropDataScene::set_scene(const Ref<PackedScene> value) {
|
|
||||||
_scene = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PropDataScene::get_snap_to_mesh() {
|
|
||||||
return _snap_to_mesh;
|
|
||||||
}
|
|
||||||
void PropDataScene::set_snap_to_mesh(bool value) {
|
|
||||||
_snap_to_mesh = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3 PropDataScene::get_snap_axis() {
|
|
||||||
return _snap_axis;
|
|
||||||
}
|
|
||||||
void PropDataScene::set_snap_axis(Vector3 value) {
|
|
||||||
_snap_axis = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropDataScene::PropDataScene() {
|
|
||||||
_snap_to_mesh = true;
|
|
||||||
_snap_axis = Vector3(0, 1, 0);
|
|
||||||
}
|
|
||||||
PropDataScene::~PropDataScene() {
|
|
||||||
if (_scene.is_valid())
|
|
||||||
_scene.unref();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PropDataScene::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_scene"), &PropDataScene::get_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_scene", "value"), &PropDataScene::set_scene);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "scene", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_scene", "get_scene");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_to_mesh"), &PropDataScene::get_snap_to_mesh);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_to_mesh", "value"), &PropDataScene::set_snap_to_mesh);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_to_mesh"), "set_snap_to_mesh", "get_snap_to_mesh");
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_snap_axis"), &PropDataScene::get_snap_axis);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_snap_axis", "value"), &PropDataScene::set_snap_axis);
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "snap_axis"), "set_snap_axis", "get_snap_axis");
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2020 Péter Magyar
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PROP_DATA_SCENE_H
|
|
||||||
#define PROP_DATA_SCENE_H
|
|
||||||
|
|
||||||
#include "core/math/vector3.h"
|
|
||||||
#include "prop_data_entry.h"
|
|
||||||
|
|
||||||
#include "scene/resources/packed_scene.h"
|
|
||||||
|
|
||||||
class PropDataScene : public PropDataEntry {
|
|
||||||
GDCLASS(PropDataScene, PropDataEntry);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Ref<PackedScene> get_scene() const;
|
|
||||||
void set_scene(const Ref<PackedScene> value);
|
|
||||||
|
|
||||||
bool get_snap_to_mesh();
|
|
||||||
void set_snap_to_mesh(bool value);
|
|
||||||
|
|
||||||
Vector3 get_snap_axis();
|
|
||||||
void set_snap_axis(Vector3 value);
|
|
||||||
|
|
||||||
PropDataScene();
|
|
||||||
~PropDataScene();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool _snap_to_mesh;
|
|
||||||
Vector3 _snap_axis;
|
|
||||||
Ref<PackedScene> _scene;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -46,34 +46,12 @@ SOFTWARE.
|
|||||||
#include "meshers/cubic_mesher/voxel_cube_points.h"
|
#include "meshers/cubic_mesher/voxel_cube_points.h"
|
||||||
#include "meshers/cubic_mesher/voxel_mesher_cubic.h"
|
#include "meshers/cubic_mesher/voxel_mesher_cubic.h"
|
||||||
|
|
||||||
#include "props/prop_data.h"
|
|
||||||
#include "props/prop_data_entity.h"
|
|
||||||
#include "props/prop_data_entry.h"
|
|
||||||
#include "props/prop_data_light.h"
|
|
||||||
#include "props/prop_data_mesh.h"
|
|
||||||
#include "props/prop_data_prop.h"
|
|
||||||
#include "props/prop_data_scene.h"
|
|
||||||
|
|
||||||
#include "level_generator/voxelman_level_generator.h"
|
#include "level_generator/voxelman_level_generator.h"
|
||||||
|
|
||||||
#include "areas/world_area.h"
|
#include "areas/world_area.h"
|
||||||
|
|
||||||
#include "clutter/ground_clutter.h"
|
|
||||||
#include "clutter/ground_clutter_foliage.h"
|
|
||||||
|
|
||||||
#include "world/voxel_world_editor.h"
|
#include "world/voxel_world_editor.h"
|
||||||
|
|
||||||
#include "prop_tool/prop_tool.h"
|
|
||||||
#include "prop_tool/prop_tool_entity.h"
|
|
||||||
#include "prop_tool/prop_tool_light.h"
|
|
||||||
#include "prop_tool/prop_tool_mesh.h"
|
|
||||||
#include "prop_tool/prop_tool_prop.h"
|
|
||||||
#include "prop_tool/prop_tool_scene.h"
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
#include "prop_tool/prop_tool_editor_plugin.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void register_voxelman_types() {
|
void register_voxelman_types() {
|
||||||
ClassDB::register_class<VoxelMesher>();
|
ClassDB::register_class<VoxelMesher>();
|
||||||
ClassDB::register_class<VoxelMesherTransvoxel>();
|
ClassDB::register_class<VoxelMesherTransvoxel>();
|
||||||
@ -100,27 +78,10 @@ void register_voxelman_types() {
|
|||||||
ClassDB::register_class<VoxelMesherCubic>();
|
ClassDB::register_class<VoxelMesherCubic>();
|
||||||
ClassDB::register_class<VoxelCubePoints>();
|
ClassDB::register_class<VoxelCubePoints>();
|
||||||
|
|
||||||
ClassDB::register_class<PropData>();
|
|
||||||
ClassDB::register_class<PropDataEntry>();
|
|
||||||
ClassDB::register_class<PropDataScene>();
|
|
||||||
ClassDB::register_class<PropDataMesh>();
|
|
||||||
ClassDB::register_class<PropDataLight>();
|
|
||||||
ClassDB::register_class<PropDataProp>();
|
|
||||||
ClassDB::register_class<PropDataEntity>();
|
|
||||||
|
|
||||||
ClassDB::register_class<VoxelmanLevelGenerator>();
|
ClassDB::register_class<VoxelmanLevelGenerator>();
|
||||||
|
|
||||||
ClassDB::register_class<WorldArea>();
|
ClassDB::register_class<WorldArea>();
|
||||||
|
|
||||||
ClassDB::register_class<GroundClutterFoliage>();
|
|
||||||
|
|
||||||
ClassDB::register_class<PropTool>();
|
|
||||||
ClassDB::register_class<PropToolEntity>();
|
|
||||||
ClassDB::register_class<PropToolProp>();
|
|
||||||
ClassDB::register_class<PropToolMesh>();
|
|
||||||
ClassDB::register_class<PropToolLight>();
|
|
||||||
ClassDB::register_class<PropToolScene>();
|
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
EditorPlugins::add_by_type<VoxelWorldEditorPlugin>();
|
EditorPlugins::add_by_type<VoxelWorldEditorPlugin>();
|
||||||
EditorPlugins::add_by_type<PropToolEditorPlugin>();
|
EditorPlugins::add_by_type<PropToolEditorPlugin>();
|
||||||
|
@ -51,11 +51,12 @@ SOFTWARE.
|
|||||||
#include "../library/voxelman_library.h"
|
#include "../library/voxelman_library.h"
|
||||||
|
|
||||||
#include "../../mesh_data_resource/mesh_data_resource.h"
|
#include "../../mesh_data_resource/mesh_data_resource.h"
|
||||||
#include "../props/prop_data.h"
|
|
||||||
#include "../props/prop_data_entry.h"
|
#include "../../props/props/prop_data.h"
|
||||||
#include "../props/prop_data_light.h"
|
#include "../../props/props/prop_data_entry.h"
|
||||||
#include "../props/prop_data_mesh.h"
|
#include "../../props/props/prop_data_light.h"
|
||||||
#include "../props/prop_data_scene.h"
|
#include "../../props/props/prop_data_mesh.h"
|
||||||
|
#include "../../props/props/prop_data_scene.h"
|
||||||
#include "voxel_chunk_prop_data.h"
|
#include "voxel_chunk_prop_data.h"
|
||||||
|
|
||||||
class VoxelWorld;
|
class VoxelWorld;
|
||||||
|
@ -27,8 +27,8 @@ SOFTWARE.
|
|||||||
#include "core/reference.h"
|
#include "core/reference.h"
|
||||||
|
|
||||||
#include "../../mesh_data_resource/mesh_data_resource.h"
|
#include "../../mesh_data_resource/mesh_data_resource.h"
|
||||||
#include "../props/prop_data.h"
|
#include "../../props/props/prop_data.h"
|
||||||
#include "../props/prop_data_light.h"
|
#include "../../props/props/prop_data_light.h"
|
||||||
#include "scene/resources/packed_scene.h"
|
#include "scene/resources/packed_scene.h"
|
||||||
#include "scene/resources/texture.h"
|
#include "scene/resources/texture.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user