1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-06 12:20:30 +00:00

Little Bits

-=-=-=-=-=-

-fix duplicate function bug when creating script callback in editor
-fix bug where hiding lights does not work
-fix 2D audio listener bug (romulox_x reported)
-fix exported properties with inheritance bug
-fix timer autostart (make it not work on editor)
-reactivate first camara found if viewport runs out of active camera
-option to hide gizmos in viewport
-changed skeleton gizmo because it sucks
-Make convex shapes using CollisionShape visible (use quickhull class)
-fix up menu when editing a mesh, to export collision, navmesh, convex, etc. from it.
-make a menu option to show SRGB in 3D editor views by default
-make option to edit default light direction in viewport settings
-make option to edit default ambient light in viewport settings
-make software conversion of linear->RGB if hardware support not found
This commit is contained in:
Juan Linietsky
2014-10-12 02:13:22 -03:00
parent 37354da5b0
commit 948fd83cdd
30 changed files with 1063 additions and 86 deletions

View File

@@ -860,10 +860,19 @@ void SpatialEditorViewport::_sinput(const InputEvent &p_event) {
_edit.snap=false;
_edit.mode=TRANSFORM_NONE;
//gizmo has priority over everything
bool can_select_gizmos=true;
if (spatial_editor->get_selected()) {
{
int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS);
can_select_gizmos = view_menu->get_popup()->is_item_checked( idx );
}
if (can_select_gizmos && spatial_editor->get_selected()) {
Ref<SpatialEditorGizmo> seg = spatial_editor->get_selected()->get_gizmo();
if (seg.is_valid()) {
@@ -1934,6 +1943,18 @@ void SpatialEditorViewport::_menu_option(int p_option) {
view_menu->get_popup()->set_item_checked( idx, current );
} break;
case VIEW_GIZMOS: {
int idx = view_menu->get_popup()->get_item_index(VIEW_GIZMOS);
bool current = view_menu->get_popup()->is_item_checked( idx );
current=!current;
if (current)
camera->set_visible_layers( ((1<<20)-1)|(1<<(GIZMO_BASE_LAYER+index))|(1<<GIZMO_EDIT_LAYER) );
else
camera->set_visible_layers( ((1<<20)-1)|(1<<(GIZMO_BASE_LAYER+index)) );
view_menu->get_popup()->set_item_checked( idx, current );
} break;
}
@@ -2115,6 +2136,9 @@ void SpatialEditorViewport::reset() {
cursor.distance=4;
cursor.region_select=false;
}
SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index) {
@@ -2139,7 +2163,7 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
surface->set_area_as_parent_rect();
camera = memnew(Camera);
camera->set_disable_gizmo(true);
camera->set_visible_layers( ((1<<20)-1)|(1<<(GIZMO_BASE_LAYER+p_index)) );
camera->set_visible_layers( ((1<<20)-1)|(1<<(GIZMO_BASE_LAYER+p_index))|(1<<GIZMO_EDIT_LAYER) );
//camera->set_environment(SpatialEditor::get_singleton()->get_viewport_environment());
viewport->add_child(camera);
camera->make_current();
@@ -2166,6 +2190,9 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(VIEW_ENVIRONMENT),true);
view_menu->get_popup()->add_separator();
view_menu->get_popup()->add_check_item("Audio Listener",VIEW_AUDIO_LISTENER);
view_menu->get_popup()->add_separator();
view_menu->get_popup()->add_check_item("Gizmos",VIEW_GIZMOS);
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(VIEW_GIZMOS),true);
view_menu->get_popup()->add_separator();
view_menu->get_popup()->add_item("Selection (F)",VIEW_CENTER_TO_SELECTION);
@@ -2362,11 +2389,16 @@ Dictionary SpatialEditor::get_state() const {
d["viewports"]=vpdata;
d["default_light"]=view_menu->get_popup()->is_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_USE_DEFAULT_LIGHT) );;
d["ambient_light_color"]=settings_ambient_color->get_color();
d["default_srgb"]=view_menu->get_popup()->is_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_USE_DEFAULT_SRGB) );;
d["show_grid"]=view_menu->get_popup()->is_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_GRID) );;
d["show_origin"]=view_menu->get_popup()->is_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_ORIGIN) );;
d["fov"]=get_fov();
d["znear"]=get_znear();
d["zfar"]=get_zfar();
d["deflight_rot_x"]=settings_default_light_rot_x;
d["deflight_rot_y"]=settings_default_light_rot_y;
return d;
}
@@ -2407,11 +2439,12 @@ void SpatialEditor::set_state(const Dictionary& p_state) {
if (d.has("zfar"))
settings_zfar->set_text(d["zfar"]);
settings_zfar->set_val(float(d["zfar"]));
if (d.has("znear"))
settings_znear->set_text(d["znear"]);
settings_znear->set_val(float(d["znear"]));
if (d.has("fov"))
settings_fov->set_text(d["fov"]);
settings_fov->set_val(float(d["fov"]));
if (d.has("default_light")) {
bool use = d["default_light"];
@@ -2429,7 +2462,17 @@ void SpatialEditor::set_state(const Dictionary& p_state) {
}
}
if (d.has("ambient_light_color")) {
settings_ambient_color->set_color(d["ambient_light_color"]);
viewport_environment->fx_set_param(Environment::FX_PARAM_AMBIENT_LIGHT_COLOR,d["ambient_light_color"]);
}
if (d.has("default_srgb")) {
bool use = d["default_light"];
viewport_environment->set_enable_fx(Environment::FX_SRGB,use);
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_USE_DEFAULT_SRGB), use );
}
if (d.has("show_grid")) {
bool use = d["show_grid"];
@@ -2447,6 +2490,12 @@ void SpatialEditor::set_state(const Dictionary& p_state) {
}
}
if (d.has("deflight_rot_x"))
settings_default_light_rot_x=d["deflight_rot_x"];
if (d.has("deflight_rot_y"))
settings_default_light_rot_y=d["deflight_rot_y"];
_update_default_light_angle();
}
@@ -2609,10 +2658,28 @@ void SpatialEditor::_menu_item_pressed(int p_option) {
} else {
light_instance=VisualServer::get_singleton()->instance_create2(light,get_scene()->get_root()->get_world()->get_scenario());
VisualServer::get_singleton()->instance_set_transform(light_instance,light_transform);
_update_default_light_angle();
}
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(p_option), light_instance.is_valid() );
} break;
case MENU_VIEW_USE_DEFAULT_SRGB: {
bool is_checked = view_menu->get_popup()->is_item_checked( view_menu->get_popup()->get_item_index(p_option) );
if (is_checked) {
viewport_environment->set_enable_fx(Environment::FX_SRGB,false);
} else {
viewport_environment->set_enable_fx(Environment::FX_SRGB,true);
}
is_checked = ! is_checked;
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(p_option), is_checked );
} break;
case MENU_VIEW_USE_1_VIEWPORT: {
@@ -2824,7 +2891,7 @@ void SpatialEditor::_menu_item_pressed(int p_option) {
} break;
case MENU_VIEW_CAMERA_SETTINGS: {
settings_dialog->popup_centered(Size2(200,160));
settings_dialog->popup_centered(settings_vbc->get_combined_minimum_size()+Size2(50,50));
} break;
}
@@ -3233,13 +3300,15 @@ void SpatialEditor::_notification(int p_what) {
_menu_item_pressed(MENU_VIEW_USE_1_VIEWPORT);
get_scene()->connect("node_removed",this,"_node_removed");
VS::get_singleton()->scenario_set_fallback_environment(get_viewport()->find_world()->get_scenario(),viewport_environment->get_rid());
}
if (p_what==NOTIFICATION_ENTER_SCENE) {
gizmos = memnew( SpatialEditorGizmos );
_init_indicators();
_update_default_light_angle();
}
if (p_what==NOTIFICATION_EXIT_SCENE) {
@@ -3374,7 +3443,8 @@ void SpatialEditor::_bind_methods() {
// ObjectTypeDB::bind_method("_update_selection",&SpatialEditor::_update_selection);
ObjectTypeDB::bind_method("_get_editor_data",&SpatialEditor::_get_editor_data);
ObjectTypeDB::bind_method("_request_gizmo",&SpatialEditor::_request_gizmo);
ObjectTypeDB::bind_method("_default_light_angle_input",&SpatialEditor::_default_light_angle_input);
ObjectTypeDB::bind_method("_update_ambient_light_color",&SpatialEditor::_update_ambient_light_color);
ObjectTypeDB::bind_method("_toggle_maximize_view",&SpatialEditor::_toggle_maximize_view);
ADD_SIGNAL( MethodInfo("transform_key_request") );
@@ -3384,9 +3454,9 @@ void SpatialEditor::_bind_methods() {
void SpatialEditor::clear() {
settings_fov->set_text(EDITOR_DEF("3d_editor/default_fov",60.0));
settings_znear->set_text(EDITOR_DEF("3d_editor/default_z_near",0.1));
settings_zfar->set_text(EDITOR_DEF("3d_editor/default_z_far",1500.0));
settings_fov->set_val(EDITOR_DEF("3d_editor/default_fov",60.0));
settings_znear->set_val(EDITOR_DEF("3d_editor/default_z_near",0.1));
settings_zfar->set_val(EDITOR_DEF("3d_editor/default_z_far",1500.0));
for(int i=0;i<4;i++) {
viewports[i]->reset();
@@ -3410,11 +3480,54 @@ void SpatialEditor::clear() {
viewports[i]->view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(SpatialEditorViewport::VIEW_AUDIO_LISTENER),i==0);
viewports[i]->viewport->set_as_audio_listener(i==0);
}
view_menu->get_popup()->set_item_checked( view_menu->get_popup()->get_item_index(MENU_VIEW_GRID), true );
settings_default_light_rot_x=Math_PI*0.3;
settings_default_light_rot_y=Math_PI*0.2;
viewport_environment->fx_set_param(Environment::FX_PARAM_AMBIENT_LIGHT_COLOR,Color(0.15,0.15,0.15));
settings_ambient_color->set_color(Color(0.15,0.15,0.15));
if (!light_instance.is_valid())
_menu_item_pressed(MENU_VIEW_USE_DEFAULT_LIGHT);
_update_default_light_angle();
}
void SpatialEditor::_update_ambient_light_color(const Color& p_color) {
viewport_environment->fx_set_param(Environment::FX_PARAM_AMBIENT_LIGHT_COLOR,settings_ambient_color->get_color());
}
void SpatialEditor::_update_default_light_angle() {
Transform t;
t.basis.rotate(Vector3(1,0,0),settings_default_light_rot_x);
t.basis.rotate(Vector3(0,1,0),settings_default_light_rot_y);
settings_dlight->set_transform(t);
if (light_instance.is_valid()) {
VS::get_singleton()->instance_set_transform(light_instance,t);
}
}
void SpatialEditor::_default_light_angle_input(const InputEvent& p_event) {
if (p_event.type==InputEvent::MOUSE_MOTION && p_event.mouse_motion.button_mask&(0x1|0x2|0x4)) {
settings_default_light_rot_y = Math::fposmod(settings_default_light_rot_y - p_event.mouse_motion.relative_x*0.01,Math_PI*2.0);
settings_default_light_rot_x = Math::fposmod(settings_default_light_rot_x - p_event.mouse_motion.relative_y*0.01,Math_PI*2.0);
_update_default_light_angle();
}
}
SpatialEditor::SpatialEditor(EditorNode *p_editor) {
@@ -3510,6 +3623,7 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
p = view_menu->get_popup();
p->add_check_item("Use Default Light",MENU_VIEW_USE_DEFAULT_LIGHT);
p->add_check_item("Use Default sRGB",MENU_VIEW_USE_DEFAULT_SRGB);
p->add_separator();
p->add_check_item("1 Viewport",MENU_VIEW_USE_1_VIEWPORT,KEY_MASK_ALT+KEY_1);
@@ -3612,42 +3726,68 @@ SpatialEditor::SpatialEditor(EditorNode *p_editor) {
settings_dialog = memnew( ConfirmationDialog );
settings_dialog->set_title("Viewport Settings");
add_child(settings_dialog);
l = memnew(Label);
l->set_text("Perspective FOV (deg.):");
l->set_pos(Point2(5,5));
settings_dialog->add_child(l);
settings_fov = memnew( LineEdit );
settings_fov->set_anchor( MARGIN_RIGHT, ANCHOR_END );
settings_fov->set_begin( Point2(15,22) );
settings_fov->set_end( Point2(15,35) );
settings_fov->set_text(EDITOR_DEF("3d_editor/default_fov",60.0));
settings_dialog->add_child(settings_fov);
l = memnew(Label);
l->set_text("View Z-Near");
l->set_pos(Point2(5,45));
settings_dialog->add_child(l);
settings_znear = memnew( LineEdit );
settings_znear->set_anchor( MARGIN_RIGHT, ANCHOR_END );
settings_znear->set_begin( Point2(15,62) );
settings_znear->set_end( Point2(15,75) );
settings_znear->set_text(EDITOR_DEF("3d_editor/default_z_near",0.1));
settings_dialog->add_child(settings_znear);
settings_vbc = memnew( VBoxContainer );
settings_vbc->set_custom_minimum_size(Size2(200,0));
settings_dialog->add_child(settings_vbc);
settings_dialog->set_child_rect(settings_vbc);
l = memnew(Label);
l->set_text("View Z-Far");
l->set_pos(Point2(5,85));
settings_dialog->add_child(l);
settings_zfar = memnew( LineEdit );
settings_zfar->set_anchor( MARGIN_RIGHT, ANCHOR_END );
settings_zfar->set_begin( Point2(15,102) );
settings_zfar->set_end( Point2(15,115) );
settings_zfar->set_text(EDITOR_DEF("3d_editor/default_z_far",1500.0));
settings_dialog->add_child(settings_zfar);
settings_light_base = memnew( Control );
settings_light_base->set_custom_minimum_size(Size2(128,128));
settings_light_base->connect("input_event",this,"_default_light_angle_input");
settings_vbc->add_margin_child("Default Light Normal:",settings_light_base);
settings_light_vp = memnew( Viewport );
settings_light_vp->set_use_own_world(true);
settings_light_base->add_child(settings_light_vp);
settings_dlight = memnew( DirectionalLight );
settings_light_vp->add_child(settings_dlight);
settings_sphere = memnew( ImmediateGeometry );
settings_sphere->begin(Mesh::PRIMITIVE_TRIANGLES,Ref<Texture>());
settings_sphere->set_color(Color(1,1,1));
settings_sphere->add_sphere(32,16,1);
settings_sphere->end();
settings_light_vp->add_child(settings_sphere);
settings_camera = memnew( Camera );
settings_light_vp->add_child(settings_camera);
settings_camera->set_translation(Vector3(0,0,2));
settings_camera->set_orthogonal(2.1,0.1,5);
settings_default_light_rot_x=Math_PI*0.3;
settings_default_light_rot_y=Math_PI*0.2;
settings_ambient_color = memnew( ColorPickerButton );
settings_vbc->add_margin_child("Ambient Light Color:",settings_ambient_color);
settings_ambient_color->connect("color_changed",this,"_update_ambient_light_color");
viewport_environment->set_enable_fx(Environment::FX_AMBIENT_LIGHT,true);
viewport_environment->fx_set_param(Environment::FX_PARAM_AMBIENT_LIGHT_COLOR,Color(0.15,0.15,0.15));
settings_ambient_color->set_color(Color(0.15,0.15,0.15));
settings_fov = memnew( SpinBox );
settings_fov->set_max(179);
settings_fov->set_min(1);
settings_fov->set_step(0.01);
settings_fov->set_val(EDITOR_DEF("3d_editor/default_fov",60.0));
settings_vbc->add_margin_child("Perspective FOV (deg.):",settings_fov);
settings_znear = memnew( SpinBox );
settings_znear->set_max(10000);
settings_znear->set_min(0.1);
settings_znear->set_step(0.01);
settings_znear->set_val(EDITOR_DEF("3d_editor/default_z_near",0.1));
settings_vbc->add_margin_child("View Z-Near:",settings_znear);
settings_zfar = memnew( SpinBox );
settings_zfar->set_max(10000);
settings_zfar->set_min(0.1);
settings_zfar->set_step(0.01);
settings_zfar->set_val(EDITOR_DEF("3d_editor/default_z_far",1500));
settings_vbc->add_margin_child("View Z-Far:",settings_zfar);
//settings_dialog->get_cancel()->hide();
/* XFORM DIALOG */