summaryrefslogtreecommitdiff
path: root/tools/editor/plugins
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-11-02 11:31:01 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-11-02 11:31:01 -0300
commitd85b67be53bac252c0a28b799d56d1b359c4ee99 (patch)
tree5227e145e3271bfee542bdd3e4237c3378565306 /tools/editor/plugins
parent738eb2c1a88d441eacc4149ce8f1c12a90267191 (diff)
Bug Fixes
-=-=-=-=- -Fixed problem with scaling shapes (#827), related to not taking scale in consideration for calculating the moment of inertia -Added support for multiline strings (or comments) using """ -Save subscene bug, properties not being saved in root node (#806) -Fix Crash in CollisionPolygon2DEditor (#814) -Restored Ability to compile without 3D (#795) -Fix InterpolatedCamera (#803) -Fix UV Import for OBJ Meshes (#771) -Fixed issue with modifier gizmos (#794) -Fixed CapsuleShape gizmo handle (#50) -Fixed Import Button (not properly working in 3D) (#733) -Many misc fixes (though no new features)
Diffstat (limited to 'tools/editor/plugins')
-rw-r--r--tools/editor/plugins/baked_light_baker_cmpxchg.cpp37
-rw-r--r--tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp7
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.cpp55
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.h6
4 files changed, 86 insertions, 19 deletions
diff --git a/tools/editor/plugins/baked_light_baker_cmpxchg.cpp b/tools/editor/plugins/baked_light_baker_cmpxchg.cpp
index d08c9f6484..42d3fc5276 100644
--- a/tools/editor/plugins/baked_light_baker_cmpxchg.cpp
+++ b/tools/editor/plugins/baked_light_baker_cmpxchg.cpp
@@ -2,12 +2,11 @@
#include "typedefs.h"
-#ifdef WINDOWS_ENABLED
-
-#include "windows.h"
+#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100
void baked_light_baker_add_64f(double *dst,double value) {
+
union {
int64_t i;
double f;
@@ -19,28 +18,22 @@ void baked_light_baker_add_64f(double *dst,double value) {
int64_t from = swapy.i;
swapy.f+=value;
int64_t to=swapy.i;
- int64_t result = InterlockedCompareExchange64((int64_t*)dst,to,from);
- if (result==from)
+ if (__sync_bool_compare_and_swap((int64_t*)dst,from,to))
break;
}
-
}
void baked_light_baker_add_64i(int64_t *dst,int64_t value) {
- while(true) {
- int64_t from = *dst;
- int64_t to = from+value;
- int64_t result = InterlockedCompareExchange64(dst,to,from);
- if (result==from)
- break;
- }
+ while(!__sync_bool_compare_and_swap(dst,*dst,(*dst)+value)) {}
+
}
-#elif (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100
+#elif defined(WINDOWS_ENABLED)
-void baked_light_baker_add_64f(double *dst,double value) {
+#include "windows.h"
+void baked_light_baker_add_64f(double *dst,double value) {
union {
int64_t i;
@@ -53,17 +46,25 @@ void baked_light_baker_add_64f(double *dst,double value) {
int64_t from = swapy.i;
swapy.f+=value;
int64_t to=swapy.i;
- if (__sync_bool_compare_and_swap((int64_t*)dst,from,to))
+ int64_t result = InterlockedCompareExchange64((int64_t*)dst,to,from);
+ if (result==from)
break;
}
+
}
void baked_light_baker_add_64i(int64_t *dst,int64_t value) {
- while(!__sync_bool_compare_and_swap(dst,*dst,(*dst)+value)) {}
-
+ while(true) {
+ int64_t from = *dst;
+ int64_t to = from+value;
+ int64_t result = InterlockedCompareExchange64(dst,to,from);
+ if (result==from)
+ break;
+ }
}
+
#else
//in goder (the god of programmers) we trust
diff --git a/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp b/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
index 080ed7d11c..96c7e4540c 100644
--- a/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+++ b/tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
@@ -13,7 +13,7 @@ void CollisionPolygon2DEditor::_notification(int p_what) {
button_create->set_icon( get_icon("Edit","EditorIcons"));
button_edit->set_icon( get_icon("MovePoint","EditorIcons"));
button_edit->set_pressed(true);
-
+ get_scene()->connect("node_removed",this,"_node_removed");
} break;
case NOTIFICATION_FIXED_PROCESS: {
@@ -28,6 +28,7 @@ void CollisionPolygon2DEditor::_node_removed(Node *p_node) {
if(p_node==node) {
node=NULL;
hide();
+ canvas_item_editor->get_viewport_control()->update();
}
}
@@ -83,6 +84,9 @@ void CollisionPolygon2DEditor::_wip_close() {
bool CollisionPolygon2DEditor::forward_input_event(const InputEvent& p_event) {
+ if (!node)
+ return false;
+
switch(p_event.type) {
case InputEvent::MOUSE_BUTTON: {
@@ -379,6 +383,7 @@ void CollisionPolygon2DEditor::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_menu_option"),&CollisionPolygon2DEditor::_menu_option);
ObjectTypeDB::bind_method(_MD("_canvas_draw"),&CollisionPolygon2DEditor::_canvas_draw);
+ ObjectTypeDB::bind_method(_MD("_node_removed"),&CollisionPolygon2DEditor::_node_removed);
}
diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp
index b8a5bd3bbe..10e4c0b681 100644
--- a/tools/editor/plugins/mesh_editor_plugin.cpp
+++ b/tools/editor/plugins/mesh_editor_plugin.cpp
@@ -158,13 +158,54 @@ void MeshInstanceEditor::_menu_option(int p_option) {
ur->add_undo_method(node,"remove_child",nmi);
ur->commit_action();
} break;
+ case MENU_OPTION_CREATE_OUTLINE_MESH: {
+
+ outline_dialog->popup_centered(Size2(200,80));
+ } break;
}
}
+void MeshInstanceEditor::_create_outline_mesh() {
+
+ Ref<Mesh> mesh = node->get_mesh();
+ if (mesh.is_null()) {
+ err_dialog->set_text("MeshInstance lacks a Mesh!");
+ err_dialog->popup_centered(Size2(100,50));
+ return;
+ }
+
+ Ref<Mesh> mesho = mesh->create_outline(outline_size->get_val());
+
+ if (mesho.is_null()) {
+ err_dialog->set_text("Could not create outline!");
+ err_dialog->popup_centered(Size2(100,50));
+ return;
+ }
+
+ MeshInstance *mi = memnew( MeshInstance );
+ mi->set_mesh(mesho);
+ Node *owner=node->get_owner();
+ if (get_scene()->get_edited_scene_root()==node) {
+ owner=node;
+ }
+
+ UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
+
+ ur->create_action("Create Outline");
+
+ ur->add_do_method(node,"add_child",mi);
+ ur->add_do_method(mi,"set_owner",owner);
+
+ ur->add_do_reference(mi);
+ ur->add_undo_method(node,"remove_child",mi);
+ ur->commit_action();
+}
+
void MeshInstanceEditor::_bind_methods() {
ObjectTypeDB::bind_method("_menu_option",&MeshInstanceEditor::_menu_option);
+ ObjectTypeDB::bind_method("_create_outline_mesh",&MeshInstanceEditor::_create_outline_mesh);
}
MeshInstanceEditor::MeshInstanceEditor() {
@@ -182,9 +223,23 @@ MeshInstanceEditor::MeshInstanceEditor() {
options->get_popup()->add_item("Create Convex Collision Sibling",MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE);
options->get_popup()->add_separator();
options->get_popup()->add_item("Create Navigation Mesh",MENU_OPTION_CREATE_NAVMESH);
+ options->get_popup()->add_separator();
+ options->get_popup()->add_item("Create Outline Mesh..",MENU_OPTION_CREATE_OUTLINE_MESH);
options->get_popup()->connect("item_pressed", this,"_menu_option");
+ outline_dialog = memnew( ConfirmationDialog );
+ outline_dialog->set_title("Outline Size: ");
+ outline_size = memnew( SpinBox );
+ outline_size->set_min(0.001);
+ outline_size->set_max(1024);
+ outline_size->set_step(0.001);
+ outline_size->set_val(0.05);
+ outline_dialog->add_child(outline_size);
+ outline_dialog->set_child_rect(outline_size);
+ add_child(outline_dialog);
+ outline_dialog->connect("confirmed",this,"_create_outline_mesh");
+
}
diff --git a/tools/editor/plugins/mesh_editor_plugin.h b/tools/editor/plugins/mesh_editor_plugin.h
index 557eb90148..e502b5dc2b 100644
--- a/tools/editor/plugins/mesh_editor_plugin.h
+++ b/tools/editor/plugins/mesh_editor_plugin.h
@@ -20,8 +20,12 @@ class MeshInstanceEditor : public Node {
MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE,
MENU_OPTION_CREATE_CONVEX_COLLISION_SHAPE,
MENU_OPTION_CREATE_NAVMESH,
+ MENU_OPTION_CREATE_OUTLINE_MESH,
};
+ ConfirmationDialog *outline_dialog;
+ SpinBox *outline_size;
+
AcceptDialog *err_dialog;
@@ -33,6 +37,8 @@ class MeshInstanceEditor : public Node {
void _menu_option(int p_option);
+ void _create_outline_mesh();
+
friend class MeshInstanceEditorPlugin;
MenuButton * options;