mirror of
https://github.com/Relintai/voxelman.git
synced 2025-04-13 21:00:47 +02:00
Removed PropTool (again). Will be reimplemented as a tool that can convert scenes. Kind of like the meshlibrary converter.
This commit is contained in:
parent
0b717eb5b2
commit
85b7009fc7
10
SCsub
10
SCsub
@ -28,13 +28,6 @@ sources = [
|
||||
"props/prop_data_prop.cpp",
|
||||
"props/prop_data_entity.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",
|
||||
|
||||
"library/voxelman_library.cpp",
|
||||
"library/voxelman_library_simple.cpp",
|
||||
|
||||
@ -91,9 +84,6 @@ if has_texture_packer:
|
||||
sources.append("library/voxelman_library_merger.cpp")
|
||||
sources.append("library/voxel_surface_merger.cpp")
|
||||
|
||||
if env['tools']:
|
||||
sources.append("prop_tool/prop_tool_editor_plugin.cpp")
|
||||
|
||||
if ARGUMENTS.get('custom_modules_shared', 'no') == 'yes':
|
||||
# Shared lib compilation
|
||||
module_env.Append(CCFLAGS=['-fPIC'])
|
||||
|
@ -1,222 +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);
|
||||
|
||||
print_error("save");
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
Ref<PropData> PropTool::get_target_prop() {
|
||||
return _target_prop;
|
||||
}
|
||||
|
||||
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() {
|
||||
ClassDB::bind_method(D_METHOD("get_target_prop"), &PropTool::get_target_prop);
|
||||
ClassDB::bind_method(D_METHOD("set_target_prop", "value"), &PropTool::set_target_prop);
|
||||
//ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "target_prop", PROPERTY_HINT_RESOURCE_TYPE, "PropData"), "set_target_prop", "get_target_prop");
|
||||
}
|
||||
|
||||
#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.
|
||||
*/
|
||||
|
||||
#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);
|
||||
|
||||
Ref<PropData> get_target_prop();
|
||||
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
|
@ -30,17 +30,6 @@ SOFTWARE.
|
||||
#include "props/prop_data_prop.h"
|
||||
#include "props/prop_data_scene.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
|
||||
|
||||
#include "library/voxel_surface.h"
|
||||
#include "library/voxel_surface_simple.h"
|
||||
|
||||
@ -99,13 +88,6 @@ void register_voxelman_types() {
|
||||
ClassDB::register_class<PropDataProp>();
|
||||
ClassDB::register_class<PropDataEntity>();
|
||||
|
||||
ClassDB::register_class<PropTool>();
|
||||
ClassDB::register_class<PropToolEntity>();
|
||||
ClassDB::register_class<PropToolProp>();
|
||||
ClassDB::register_class<PropToolMesh>();
|
||||
ClassDB::register_class<PropToolLight>();
|
||||
ClassDB::register_class<PropToolScene>();
|
||||
|
||||
ClassDB::register_class<VoxelMesher>();
|
||||
ClassDB::register_class<VoxelMesherDefault>();
|
||||
|
||||
@ -156,7 +138,6 @@ void register_voxelman_types() {
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
EditorPlugins::add_by_type<VoxelWorldEditorPlugin>();
|
||||
EditorPlugins::add_by_type<PropToolEditorPlugin>();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user