diff --git a/modules/terraman/editor/terrain_world_editor.cpp b/modules/terraman/editor/terrain_world_editor.cpp index c8148fe47..7d4801677 100644 --- a/modules/terraman/editor/terrain_world_editor.cpp +++ b/modules/terraman/editor/terrain_world_editor.cpp @@ -110,6 +110,7 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came } } break; case TOOL_MODE_PAINT_PICKER: { + // Ignore } break; case TOOL_MODE_SPAWN_BRUSH: { } break; @@ -154,6 +155,7 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came } } break; case TOOL_MODE_PAINT_PICKER: { + // Ignore } break; case TOOL_MODE_SPAWN_BRUSH: { } break; @@ -217,9 +219,9 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came return EditorPlugin::AFTER_GUI_INPUT_PASS; } - } break; case TOOL_MODE_PAINT_PICKER: { + _mouse_down = true; } break; case TOOL_MODE_SPAWN_BRUSH: { } break; @@ -241,6 +243,12 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came create_undo_point(_current_action, _paint_brush_channel, _paint_brush_allow_creating_chunks_button); } break; case TOOL_MODE_PAINT_PICKER: { + Vector3 position; + Vector3 normal; + + if (get_draw_world_coordinate(p_camera, Point2(mb->get_position().x, mb->get_position().y), position, normal)) { + paint_pick(position); + } } break; case TOOL_MODE_SPAWN_BRUSH: { } break; @@ -408,6 +416,40 @@ void TerrainWorldEditor::paint_brush_draw(const Vector3 &p_world_position) { _world->set_voxels_at_world_data_position(draw_data, _paint_brush_channel, true, _paint_brush_allow_create_chunks, true); } +void TerrainWorldEditor::paint_pick(const Vector3 &p_world_position) { + Vector2i wdp = _world->world_position_to_world_data_position(p_world_position); + + uint8_t val = 0; + + if (_previous_tool_mode == TOOL_MODE_ISOLEVEL_BRUSH) { + val = _world->get_voxel_at_world_data_position(wdp, _isolevel_brush_channel); + + _isolevel_brush_strength_slider->set_value((float)val / 255.0); + _isolevel_brush_type_set_button->set_pressed(true); + _isolevel_brush_button->set_pressed(true); + } else { + val = _world->get_voxel_at_world_data_position(wdp, _paint_brush_channel); + + int index = (int)val - 1; + + for (int i = 0; i < _surfaces_vbox_container->get_child_count(); ++i) { + Button *b = Object::cast_to