You've already forked godot
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:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user