diff options
author | Juan Linietsky <reduzio@gmail.com> | 2017-07-23 18:48:05 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2017-07-23 18:50:25 -0300 |
commit | 66009706c92671898b49a8a88cc626926b7a2d2c (patch) | |
tree | 97aea718b2e6fbc413dcbd08beca1f59dee35504 /editor/plugins | |
parent | 380eae2cc0a7474ae46ed114ad6f12be35f40b90 (diff) |
-Ability to set default import presets for type
-More presets for scene importer
-Option in scene importer to export root nodes as separate scenes
-Fixed MeshInstance preview
Diffstat (limited to 'editor/plugins')
-rw-r--r-- | editor/plugins/mesh_editor_plugin.cpp | 165 | ||||
-rw-r--r-- | editor/plugins/mesh_editor_plugin.h | 23 |
2 files changed, 79 insertions, 109 deletions
diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp index f377d3a7cc..23b19e61b9 100644 --- a/editor/plugins/mesh_editor_plugin.cpp +++ b/editor/plugins/mesh_editor_plugin.cpp @@ -29,18 +29,17 @@ /*************************************************************************/ #include "mesh_editor_plugin.h" -#if 0 -void MeshEditor::_gui_input(InputEvent p_event) { +void MeshEditor::_gui_input(Ref<InputEvent> p_event) { + Ref<InputEventMouseMotion> mm = p_event; + if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_LEFT) { - if (p_event.type==InputEvent::MOUSE_MOTION && p_event->get_button_mask()&BUTTON_MASK_LEFT) { - - rot_x-=p_event->get_relative().y*0.01; - rot_y-=p_event->get_relative().x*0.01; - if (rot_x<-Math_PI/2) - rot_x=-Math_PI/2; - else if (rot_x>Math_PI/2) { - rot_x=Math_PI/2; + rot_x -= mm->get_relative().y * 0.01; + rot_y -= mm->get_relative().x * 0.01; + if (rot_x < -Math_PI / 2) + rot_x = -Math_PI / 2; + else if (rot_x > Math_PI / 2) { + rot_x = Math_PI / 2; } _update_rotation(); } @@ -48,35 +47,30 @@ void MeshEditor::_gui_input(InputEvent p_event) { void MeshEditor::_notification(int p_what) { - if (p_what==NOTIFICATION_FIXED_PROCESS) { - + if (p_what == NOTIFICATION_FIXED_PROCESS) { } - - if (p_what==NOTIFICATION_READY) { + if (p_what == NOTIFICATION_READY) { //get_scene()->connect("node_removed",this,"_node_removed"); if (first_enter) { - //it's in propertyeditor so.. could be moved around + //it's in propertyeditor so. could be moved around - light_1_switch->set_normal_texture(get_icon("MaterialPreviewLight1","EditorIcons")); - light_1_switch->set_pressed_texture(get_icon("MaterialPreviewLight1Off","EditorIcons")); - light_2_switch->set_normal_texture(get_icon("MaterialPreviewLight2","EditorIcons")); - light_2_switch->set_pressed_texture(get_icon("MaterialPreviewLight2Off","EditorIcons")); - first_enter=false; + light_1_switch->set_normal_texture(get_icon("MaterialPreviewLight1", "EditorIcons")); + light_1_switch->set_pressed_texture(get_icon("MaterialPreviewLight1Off", "EditorIcons")); + light_2_switch->set_normal_texture(get_icon("MaterialPreviewLight2", "EditorIcons")); + light_2_switch->set_pressed_texture(get_icon("MaterialPreviewLight2Off", "EditorIcons")); + first_enter = false; } - } - if (p_what==NOTIFICATION_DRAW) { - + if (p_what == NOTIFICATION_DRAW) { - Ref<Texture> checkerboard = get_icon("Checkerboard","EditorIcons"); + Ref<Texture> checkerboard = get_icon("Checkerboard", "EditorIcons"); Size2 size = get_size(); - draw_texture_rect(checkerboard,Rect2(Point2(),size),true); - + //draw_texture_rect(checkerboard, Rect2(Point2(), size), true); } } @@ -85,125 +79,115 @@ void MeshEditor::_update_rotation() { Transform t; t.basis.rotate(Vector3(0, 1, 0), -rot_y); t.basis.rotate(Vector3(1, 0, 0), -rot_x); - mesh_instance->set_transform(t); - + rotation->set_transform(t); } void MeshEditor::edit(Ref<Mesh> p_mesh) { - mesh=p_mesh; + mesh = p_mesh; mesh_instance->set_mesh(mesh); if (mesh.is_null()) { hide(); } else { - rot_x=0; - rot_y=0; + rot_x = 0; + rot_y = 0; _update_rotation(); - AABB aabb= mesh->get_aabb(); - Vector3 ofs = aabb.pos + aabb.size*0.5; - aabb.pos-=ofs; - float m = MAX(aabb.size.x,aabb.size.y)*0.5; - if (m!=0) { - m=1.0/m; - m*=0.5; + Rect3 aabb = mesh->get_aabb(); + print_line("aabb: " + aabb); + Vector3 ofs = aabb.position + aabb.size * 0.5; + float m = aabb.get_longest_axis_size(); + if (m != 0) { + m = 1.0 / m; + m *= 0.5; //print_line("scale: "+rtos(m)); Transform xform; - xform.basis.scale(Vector3(m,m,m)); - xform.origin=-xform.basis.xform(ofs); //-ofs*m; - xform.origin.z-=aabb.size.z*2; + xform.basis.scale(Vector3(m, m, m)); + xform.origin = -xform.basis.xform(ofs); //-ofs*m; + //xform.origin.z -= aabb.get_longest_axis_size() * 2; mesh_instance->set_transform(xform); } - } - } +void MeshEditor::_button_pressed(Node *p_button) { -void MeshEditor::_button_pressed(Node* p_button) { - - if (p_button==light_1_switch) { - light1->set_enabled(!light_1_switch->is_pressed()); + if (p_button == light_1_switch) { + light1->set_visible(!light_1_switch->is_pressed()); } - if (p_button==light_2_switch) { - light2->set_enabled(!light_2_switch->is_pressed()); + if (p_button == light_2_switch) { + light2->set_visible(!light_2_switch->is_pressed()); } - - } void MeshEditor::_bind_methods() { - ClassDB::bind_method(D_METHOD("_gui_input"),&MeshEditor::_gui_input); - ClassDB::bind_method(D_METHOD("_button_pressed"),&MeshEditor::_button_pressed); - + ClassDB::bind_method(D_METHOD("_gui_input"), &MeshEditor::_gui_input); + ClassDB::bind_method(D_METHOD("_button_pressed"), &MeshEditor::_button_pressed); } MeshEditor::MeshEditor() { - viewport = memnew( Viewport ); + viewport = memnew(Viewport); Ref<World> world; world.instance(); viewport->set_world(world); //use own world add_child(viewport); viewport->set_disable_input(true); + set_stretch(true); - camera = memnew( Camera ); - camera->set_transform(Transform(Matrix3(),Vector3(0,0,3))); - camera->set_perspective(45,0.1,10); + camera = memnew(Camera); + camera->set_transform(Transform(Basis(), Vector3(0, 0, 1.1))); + camera->set_perspective(45, 0.1, 10); viewport->add_child(camera); - light1 = memnew( DirectionalLight ); - light1->set_transform(Transform().looking_at(Vector3(-1,-1,-1),Vector3(0,1,0))); + light1 = memnew(DirectionalLight); + light1->set_transform(Transform().looking_at(Vector3(-1, -1, -1), Vector3(0, 1, 0))); viewport->add_child(light1); - light2 = memnew( DirectionalLight ); - light2->set_transform(Transform().looking_at(Vector3(0,1,0),Vector3(0,0,1))); - light2->set_color(Light::COLOR_DIFFUSE,Color(0.7,0.7,0.7)); - light2->set_color(Light::COLOR_SPECULAR,Color(0.7,0.7,0.7)); + light2 = memnew(DirectionalLight); + light2->set_transform(Transform().looking_at(Vector3(0, 1, 0), Vector3(0, 0, 1))); + light2->set_color(Color(0.7, 0.7, 0.7)); viewport->add_child(light2); - mesh_instance = memnew( MeshInstance ); - viewport->add_child(mesh_instance); - - + rotation = memnew(Spatial); + viewport->add_child(rotation); + mesh_instance = memnew(MeshInstance); + rotation->add_child(mesh_instance); - set_custom_minimum_size(Size2(1,150)*EDSCALE); + set_custom_minimum_size(Size2(1, 150) * EDSCALE); - HBoxContainer *hb = memnew( HBoxContainer ); + HBoxContainer *hb = memnew(HBoxContainer); add_child(hb); hb->set_area_as_parent_rect(2); hb->add_spacer(); - VBoxContainer *vb_light = memnew( VBoxContainer ); + VBoxContainer *vb_light = memnew(VBoxContainer); hb->add_child(vb_light); - light_1_switch = memnew( TextureButton ); + light_1_switch = memnew(TextureButton); light_1_switch->set_toggle_mode(true); vb_light->add_child(light_1_switch); - light_1_switch->connect("pressed",this,"_button_pressed",varray(light_1_switch)); + light_1_switch->connect("pressed", this, "_button_pressed", varray(light_1_switch)); - light_2_switch = memnew( TextureButton ); + light_2_switch = memnew(TextureButton); light_2_switch->set_toggle_mode(true); vb_light->add_child(light_2_switch); - light_2_switch->connect("pressed",this,"_button_pressed",varray(light_2_switch)); - - first_enter=true; - - rot_x=0; - rot_y=0; + light_2_switch->connect("pressed", this, "_button_pressed", varray(light_2_switch)); + first_enter = true; + rot_x = 0; + rot_y = 0; } - void MeshEditorPlugin::edit(Object *p_object) { - Mesh * s = p_object->cast_to<Mesh>(); + Mesh *s = p_object->cast_to<Mesh>(); if (!s) return; @@ -212,7 +196,7 @@ void MeshEditorPlugin::edit(Object *p_object) { bool MeshEditorPlugin::handles(Object *p_object) const { - return p_object->is_type("Mesh"); + return p_object->is_class("Mesh"); } void MeshEditorPlugin::make_visible(bool p_visible) { @@ -225,22 +209,15 @@ void MeshEditorPlugin::make_visible(bool p_visible) { mesh_editor->hide(); //mesh_editor->set_process(false); } - } MeshEditorPlugin::MeshEditorPlugin(EditorNode *p_node) { - editor=p_node; - mesh_editor = memnew( MeshEditor ); - add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM,mesh_editor); + editor = p_node; + mesh_editor = memnew(MeshEditor); + add_control_to_container(CONTAINER_PROPERTY_EDITOR_BOTTOM, mesh_editor); mesh_editor->hide(); - - - } - -MeshEditorPlugin::~MeshEditorPlugin() -{ +MeshEditorPlugin::~MeshEditorPlugin() { } -#endif diff --git a/editor/plugins/mesh_editor_plugin.h b/editor/plugins/mesh_editor_plugin.h index 1d89448ed8..72d93c4126 100644 --- a/editor/plugins/mesh_editor_plugin.h +++ b/editor/plugins/mesh_editor_plugin.h @@ -30,8 +30,6 @@ #ifndef MESH_EDITOR_PLUGIN_H #define MESH_EDITOR_PLUGIN_H -#if 0 - #include "editor/editor_node.h" #include "editor/editor_plugin.h" #include "scene/3d/camera.h" @@ -39,51 +37,48 @@ #include "scene/3d/mesh_instance.h" #include "scene/resources/material.h" -class MeshEditor : public Control { - - GDCLASS(MeshEditor, Control); - +class MeshEditor : public ViewportContainer { + GDCLASS(MeshEditor, ViewportContainer); float rot_x; float rot_y; Viewport *viewport; MeshInstance *mesh_instance; + Spatial *rotation; DirectionalLight *light1; DirectionalLight *light2; Camera *camera; Ref<Mesh> mesh; - TextureButton *light_1_switch; TextureButton *light_2_switch; - void _button_pressed(Node* p_button); + void _button_pressed(Node *p_button); bool first_enter; void _update_rotation(); + protected: void _notification(int p_what); - void _gui_input(InputEvent p_event); + void _gui_input(Ref<InputEvent> p_event); static void _bind_methods(); -public: +public: void edit(Ref<Mesh> p_mesh); MeshEditor(); }; - class MeshEditorPlugin : public EditorPlugin { - GDCLASS( MeshEditorPlugin, EditorPlugin ); + GDCLASS(MeshEditorPlugin, EditorPlugin); MeshEditor *mesh_editor; EditorNode *editor; public: - virtual String get_name() const { return "Mesh"; } bool has_main_screen() const { return false; } virtual void edit(Object *p_node); @@ -92,8 +87,6 @@ public: MeshEditorPlugin(EditorNode *p_node); ~MeshEditorPlugin(); - }; -#endif // MESH_EDITOR_PLUGIN_H #endif |