diff options
| -rw-r--r-- | drivers/windows/file_access_windows.cpp | 2 | ||||
| -rw-r--r-- | editor/editor_data.cpp | 2 | ||||
| -rw-r--r-- | editor/editor_node.cpp | 25 | ||||
| -rw-r--r-- | editor/multi_node_edit.cpp | 16 | ||||
| -rw-r--r-- | editor/multi_node_edit.h | 3 | ||||
| -rw-r--r-- | scene/resources/tile_set.cpp | 45 | 
6 files changed, 73 insertions, 20 deletions
diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp index fb21c0c5a1..4dc1b74310 100644 --- a/drivers/windows/file_access_windows.cpp +++ b/drivers/windows/file_access_windows.cpp @@ -96,7 +96,7 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {  	if (p_mode_flags == READ) {  		WIN32_FIND_DATAW d;  		HANDLE f = FindFirstFileW(path.c_str(), &d); -		if (f) { +		if (f != INVALID_HANDLE_VALUE) {  			String fname = d.cFileName;  			if (fname != String()) { diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 4855d3f69d..1cafd1d1f4 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -820,7 +820,7 @@ void EditorData::save_edited_scene_state(EditorSelection *p_selection, EditorHis  	ERR_FAIL_INDEX(current_edited_scene, edited_scene.size());  	EditedScene &es = edited_scene.write[current_edited_scene]; -	es.selection = p_selection->get_selected_node_list(); +	es.selection = p_selection->get_full_selected_node_list();  	es.history_current = p_history->current;  	es.history_stored = p_history->history;  	es.editor_states = get_editor_states(); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 178871ccfa..0e373a5deb 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -71,6 +71,7 @@  #include "editor/import/resource_importer_texture.h"  #include "editor/import/resource_importer_texture_atlas.h"  #include "editor/import/resource_importer_wav.h" +#include "editor/multi_node_edit.h"  #include "editor/plugins/animation_blend_space_1d_editor.h"  #include "editor/plugins/animation_blend_space_2d_editor.h"  #include "editor/plugins/animation_blend_tree_editor_plugin.h" @@ -1742,15 +1743,37 @@ void EditorNode::_edit_current() {  	} else { +		Node *selected_node = NULL; +  		if (current_obj->is_class("ScriptEditorDebuggerInspectedObject")) {  			editable_warning = TTR("This is a remote object, so changes to it won't be kept.\nPlease read the documentation relevant to debugging to better understand this workflow.");  			capitalize = false;  			disable_folding = true; +		} else if (current_obj->is_class("MultiNodeEdit")) { +			Node *scene = get_edited_scene(); +			if (scene) { +				MultiNodeEdit *multi_node_edit = Object::cast_to<MultiNodeEdit>(current_obj); +				int node_count = multi_node_edit->get_node_count(); +				if (node_count > 0) { +					List<Node *> multi_nodes; +					for (int node_index = 0; node_index < node_count; ++node_index) { +						Node *node = scene->get_node(multi_node_edit->get_node(node_index)); +						if (node) { +							multi_nodes.push_back(node); +						} +					} +					if (!multi_nodes.empty()) { +						// Pick the top-most node +						multi_nodes.sort_custom<Node::Comparator>(); +						selected_node = multi_nodes.front()->get(); +					} +				} +			}  		}  		get_inspector()->edit(current_obj);  		node_dock->set_node(NULL); -		scene_tree_dock->set_selected(NULL); +		scene_tree_dock->set_selected(selected_node);  		inspector_dock->update(NULL);  	} diff --git a/editor/multi_node_edit.cpp b/editor/multi_node_edit.cpp index 85e47594a8..0792d5c95f 100644 --- a/editor/multi_node_edit.cpp +++ b/editor/multi_node_edit.cpp @@ -34,12 +34,10 @@  #include "editor_node.h"  bool MultiNodeEdit::_set(const StringName &p_name, const Variant &p_value) { -  	return _set_impl(p_name, p_value, "");  }  bool MultiNodeEdit::_set_impl(const StringName &p_name, const Variant &p_value, const String &p_field) { -  	Node *es = EditorNode::get_singleton()->get_edited_scene();  	if (!es)  		return false; @@ -88,7 +86,6 @@ bool MultiNodeEdit::_set_impl(const StringName &p_name, const Variant &p_value,  }  bool MultiNodeEdit::_get(const StringName &p_name, Variant &r_ret) const { -  	Node *es = EditorNode::get_singleton()->get_edited_scene();  	if (!es)  		return false; @@ -117,7 +114,6 @@ bool MultiNodeEdit::_get(const StringName &p_name, Variant &r_ret) const {  }  void MultiNodeEdit::_get_property_list(List<PropertyInfo> *p_list) const { -  	HashMap<String, PLData> usage;  	Node *es = EditorNode::get_singleton()->get_edited_scene(); @@ -171,17 +167,23 @@ void MultiNodeEdit::_get_property_list(List<PropertyInfo> *p_list) const {  }  void MultiNodeEdit::clear_nodes() { -  	nodes.clear();  }  void MultiNodeEdit::add_node(const NodePath &p_node) { -  	nodes.push_back(p_node);  } -void MultiNodeEdit::set_property_field(const StringName &p_property, const Variant &p_value, const String &p_field) { +int MultiNodeEdit::get_node_count() const { +	return nodes.size(); +} +NodePath MultiNodeEdit::get_node(int p_index) const { +	ERR_FAIL_INDEX_V(p_index, nodes.size(), NodePath()); +	return nodes[p_index]; +} + +void MultiNodeEdit::set_property_field(const StringName &p_property, const Variant &p_value, const String &p_field) {  	_set_impl(p_property, p_value, p_field);  } diff --git a/editor/multi_node_edit.h b/editor/multi_node_edit.h index b9192b206a..33df4a2ca5 100644 --- a/editor/multi_node_edit.h +++ b/editor/multi_node_edit.h @@ -54,6 +54,9 @@ public:  	void clear_nodes();  	void add_node(const NodePath &p_node); +	int get_node_count() const; +	NodePath get_node(int p_index) const; +  	void set_property_field(const StringName &p_property, const Variant &p_value, const String &p_field);  	MultiNodeEdit(); diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp index 24122a8d99..16a95e65a8 100644 --- a/scene/resources/tile_set.cpp +++ b/scene/resources/tile_set.cpp @@ -148,20 +148,45 @@ bool TileSet::_set(const StringName &p_name, const Variant &p_value) {  			}  		}  	} else if (what == "shape") -		for (int i = 0; i < tile_get_shape_count(id); i++) -			tile_set_shape(id, i, p_value); +		if (tile_get_shape_count(id) > 0) { +			for (int i = 0; i < tile_get_shape_count(id); i++) { +				tile_set_shape(id, i, p_value); +			} +		} else { +			tile_set_shape(id, 0, p_value); +		}  	else if (what == "shape_offset") -		for (int i = 0; i < tile_get_shape_count(id); i++) -			tile_set_shape_offset(id, i, p_value); +		if (tile_get_shape_count(id) > 0) { +			for (int i = 0; i < tile_get_shape_count(id); i++) { +				tile_set_shape_offset(id, i, p_value); +			} +		} else { +			tile_set_shape_offset(id, 0, p_value); +		}  	else if (what == "shape_transform") -		for (int i = 0; i < tile_get_shape_count(id); i++) -			tile_set_shape_transform(id, i, p_value); +		if (tile_get_shape_count(id) > 0) { +			for (int i = 0; i < tile_get_shape_count(id); i++) { +				tile_set_shape_transform(id, i, p_value); +			} +		} else { +			tile_set_shape_transform(id, 0, p_value); +		}  	else if (what == "shape_one_way") -		for (int i = 0; i < tile_get_shape_count(id); i++) -			tile_set_shape_one_way(id, i, p_value); +		if (tile_get_shape_count(id) > 0) { +			for (int i = 0; i < tile_get_shape_count(id); i++) { +				tile_set_shape_one_way(id, i, p_value); +			} +		} else { +			tile_set_shape_one_way(id, 0, p_value); +		}  	else if (what == "shape_one_way_margin") -		for (int i = 0; i < tile_get_shape_count(id); i++) -			tile_set_shape_one_way_margin(id, i, p_value); +		if (tile_get_shape_count(id) > 0) { +			for (int i = 0; i < tile_get_shape_count(id); i++) { +				tile_set_shape_one_way_margin(id, i, p_value); +			} +		} else { +			tile_set_shape_one_way_margin(id, 0, p_value); +		}  	else if (what == "shapes")  		_tile_set_shapes(id, p_value);  	else if (what == "occluder")  |