Browse Source

Merge pull request #16944 from rainerdeyke/master

Added 'fill selection' command to grid map editor
Max Hilbrunner 7 years ago
parent
commit
72e05f3f99

+ 31 - 0
modules/gridmap/grid_map_editor_plugin.cpp

@@ -230,6 +230,13 @@ void GridMapEditor::_menu_option(int p_option) {
 
 
 			_delete_selection();
 			_delete_selection();
 
 
+		} break;
+		case MENU_OPTION_SELECTION_FILL: {
+			if (!selection.active)
+				return;
+
+			_fill_selection();
+
 		} break;
 		} break;
 		case MENU_OPTION_GRIDMAP_SETTINGS: {
 		case MENU_OPTION_GRIDMAP_SETTINGS: {
 			settings_dialog->popup_centered(settings_vbc->get_combined_minimum_size() + Size2(50, 50) * EDSCALE);
 			settings_dialog->popup_centered(settings_vbc->get_combined_minimum_size() + Size2(50, 50) * EDSCALE);
@@ -455,6 +462,29 @@ void GridMapEditor::_delete_selection() {
 	_validate_selection();
 	_validate_selection();
 }
 }
 
 
+void GridMapEditor::_fill_selection() {
+
+	if (!selection.active)
+		return;
+
+	undo_redo->create_action(TTR("GridMap Fill Selection"));
+	for (int i = selection.begin.x; i <= selection.end.x; i++) {
+
+		for (int j = selection.begin.y; j <= selection.end.y; j++) {
+
+			for (int k = selection.begin.z; k <= selection.end.z; k++) {
+
+				undo_redo->add_do_method(node, "set_cell_item", i, j, k, selected_pallete, cursor_rot);
+				undo_redo->add_undo_method(node, "set_cell_item", i, j, k, node->get_cell_item(i, j, k), node->get_cell_item_orientation(i, j, k));
+			}
+		}
+	}
+	undo_redo->commit_action();
+
+	selection.active = false;
+	_validate_selection();
+}
+
 void GridMapEditor::_update_duplicate_indicator() {
 void GridMapEditor::_update_duplicate_indicator() {
 
 
 	if (!selection.active || input_action != INPUT_DUPLICATE) {
 	if (!selection.active || input_action != INPUT_DUPLICATE) {
@@ -1072,6 +1102,7 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) {
 	options->get_popup()->add_separator();
 	options->get_popup()->add_separator();
 	options->get_popup()->add_item(TTR("Duplicate Selection"), MENU_OPTION_SELECTION_DUPLICATE, KEY_MASK_SHIFT + KEY_C);
 	options->get_popup()->add_item(TTR("Duplicate Selection"), MENU_OPTION_SELECTION_DUPLICATE, KEY_MASK_SHIFT + KEY_C);
 	options->get_popup()->add_item(TTR("Clear Selection"), MENU_OPTION_SELECTION_CLEAR, KEY_MASK_SHIFT + KEY_X);
 	options->get_popup()->add_item(TTR("Clear Selection"), MENU_OPTION_SELECTION_CLEAR, KEY_MASK_SHIFT + KEY_X);
+	options->get_popup()->add_item(TTR("Fill Selection"), MENU_OPTION_SELECTION_FILL, KEY_MASK_SHIFT + KEY_F);
 
 
 	options->get_popup()->add_separator();
 	options->get_popup()->add_separator();
 	options->get_popup()->add_item(TTR("Settings"), MENU_OPTION_GRIDMAP_SETTINGS);
 	options->get_popup()->add_item(TTR("Settings"), MENU_OPTION_GRIDMAP_SETTINGS);

+ 2 - 0
modules/gridmap/grid_map_editor_plugin.h

@@ -168,6 +168,7 @@ class GridMapEditor : public VBoxContainer {
 		MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR,
 		MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR,
 		MENU_OPTION_SELECTION_DUPLICATE,
 		MENU_OPTION_SELECTION_DUPLICATE,
 		MENU_OPTION_SELECTION_CLEAR,
 		MENU_OPTION_SELECTION_CLEAR,
+		MENU_OPTION_SELECTION_FILL,
 		MENU_OPTION_REMOVE_AREA,
 		MENU_OPTION_REMOVE_AREA,
 		MENU_OPTION_GRIDMAP_SETTINGS
 		MENU_OPTION_GRIDMAP_SETTINGS
 
 
@@ -200,6 +201,7 @@ class GridMapEditor : public VBoxContainer {
 	void _floor_changed(float p_value);
 	void _floor_changed(float p_value);
 
 
 	void _delete_selection();
 	void _delete_selection();
+	void _fill_selection();
 
 
 	EditorNode *editor;
 	EditorNode *editor;
 	bool do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click);
 	bool do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click);