Removed the add and remove single tools from TerrainWorldEditor as they are not very useful for a terrain engine.

This commit is contained in:
Relintai 2025-02-08 08:28:38 +01:00
parent da336fdb73
commit 33bd758806
2 changed files with 2 additions and 238 deletions

View File

@ -81,9 +81,6 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came
if (mm.is_valid()) {
if (!_mouse_down) {
switch (_tool_mode) {
case TOOL_MODE_ADD:
case TOOL_MODE_REMOVE: {
} break;
case TOOL_MODE_ISOLEVEL_BRUSH: {
Vector3 position;
Vector3 normal;
@ -124,9 +121,6 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came
}
switch (_tool_mode) {
case TOOL_MODE_ADD:
case TOOL_MODE_REMOVE: {
} break;
case TOOL_MODE_ISOLEVEL_BRUSH: {
Vector3 position;
Vector3 normal;
@ -176,9 +170,6 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came
if (mb->is_pressed()) {
if (mb->get_button_index() == BUTTON_LEFT) {
switch (_tool_mode) {
case TOOL_MODE_ADD:
case TOOL_MODE_REMOVE:
return do_add_remove_action(p_camera, Point2(mb->get_position().x, mb->get_position().y), true);
case TOOL_MODE_ISOLEVEL_BRUSH: {
Vector3 position;
Vector3 normal;
@ -243,9 +234,6 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came
} else {
if (mb->get_button_index() == BUTTON_LEFT) {
switch (_tool_mode) {
case TOOL_MODE_ADD:
case TOOL_MODE_REMOVE:
break;
case TOOL_MODE_ISOLEVEL_BRUSH: {
create_undo_point(_current_action, _isolevel_brush_channel, _isolevel_brush_allow_creating_chunks_button);
} break;
@ -274,76 +262,6 @@ EditorPlugin::AfterGUIInput TerrainWorldEditor::forward_spatial_input_event(Came
return EditorPlugin::AFTER_GUI_INPUT_PASS;
}
EditorPlugin::AfterGUIInput TerrainWorldEditor::do_add_remove_action(Camera *p_camera, const Point2 &p_point, bool p_click) {
Camera *camera = p_camera;
Vector3 from = camera->project_ray_origin(p_point);
Vector3 to = from + camera->project_ray_normal(p_point) * 10000;
Transform local_xform = _world->get_global_transform().affine_inverse();
from = local_xform.xform(from);
to = local_xform.xform(to);
PhysicsDirectSpaceState *ss = _world->get_world_3d()->get_direct_space_state();
PhysicsDirectSpaceState::RayResult res;
if (ss->intersect_ray(from, to, res)) {
int selected_terrain = 0;
int channel = 0;
channel = _channel_type;
if (channel == -1) {
return EditorPlugin::AFTER_GUI_INPUT_PASS;
}
int isolevel = _add_remove_current_isolevel;
bool mode_add = false;
if (_tool_mode == TOOL_MODE_ADD) {
selected_terrain = _selected_type + 1;
mode_add = true;
_undo_redo->create_action("Add terrain voxel.");
} else if (_tool_mode == TOOL_MODE_REMOVE) {
selected_terrain = 0;
isolevel = 0;
mode_add = false;
_undo_redo->create_action("Remove terrain voxel.");
}
Vector3 pos;
if (mode_add) {
pos = (res.position + (Vector3(0.1, 0.1, 0.1) * res.normal * _world->get_voxel_scale()));
} else {
pos = (res.position + (Vector3(0.1, 0.1, 0.1) * -res.normal * _world->get_voxel_scale()));
}
uint8_t prev_terrain = _world->get_voxel_at_world_position(pos, _channel_type);
uint8_t prev_isolevel = 0;
if (_channel_isolevel != -1) {
prev_isolevel = _world->get_voxel_at_world_position(pos, _channel_isolevel);
}
if (_channel_isolevel == -1) {
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, selected_terrain, _channel_type);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_terrain, _channel_type);
} else {
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, selected_terrain, _channel_type, false);
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, isolevel, _channel_isolevel);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_terrain, _channel_type, false);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_isolevel, _channel_isolevel);
}
_undo_redo->commit_action();
return EditorPlugin::AFTER_GUI_INPUT_STOP;
}
return EditorPlugin::AFTER_GUI_INPUT_PASS;
}
bool TerrainWorldEditor::get_draw_world_coordinate(Camera *p_camera, const Point2 &p_point, Vector3 &r_position, Vector3 &r_normal) {
Camera *camera = p_camera;
Vector3 from = camera->project_ray_origin(p_point);
@ -513,9 +431,6 @@ void TerrainWorldEditor::edit(TerrainWorld *p_world) {
}
switch (_tool_mode) {
case TOOL_MODE_ADD:
case TOOL_MODE_REMOVE:
break;
case TOOL_MODE_ISOLEVEL_BRUSH: {
_gizmo->size = _isolevel_brush_size;
} break;
@ -545,14 +460,6 @@ void TerrainWorldEditor::edit(TerrainWorld *p_world) {
_paint_brush_channel = _channel_type;
_paint_brush_channel_select_sb->set_value(_paint_brush_channel);
if (_channel_isolevel == -1) {
_add_remove_isolevel_slider_label->hide();
_add_remove_isolevel_slider->hide();
} else {
_add_remove_isolevel_slider_label->show();
_add_remove_isolevel_slider->show();
}
_isolevel_brush_channel_select_sb->set_value(_channel_isolevel);
_isolevel_brush_channel = _channel_isolevel;
@ -622,7 +529,6 @@ TerrainWorldEditor::TerrainWorldEditor() {
_world = NULL;
_selected_type = -1;
_channel_type = -1;
_add_remove_current_isolevel = 255;
_channel_isolevel = -1;
_editor = NULL;
_tool_mode = TOOL_MODE_ISOLEVEL_BRUSH;
@ -652,7 +558,6 @@ TerrainWorldEditor::TerrainWorldEditor(EditorNode *p_editor) {
_world = NULL;
_selected_type = -1;
_channel_type = -1;
_add_remove_current_isolevel = 255;
_channel_isolevel = -1;
_mouse_down = false;
@ -732,61 +637,8 @@ TerrainWorldEditor::TerrainWorldEditor(EditorNode *p_editor) {
_chunk_remove_button->set_shortcut(ED_SHORTCUT("terrain_world_editor/chunk_remove", "Chunk Remove", KEY_U));
_tool_button_container->add_child(_chunk_remove_button);
_add_button = memnew(ToolButton);
//_add_button->set_text("Add");
_add_button->set_toggle_mode(true);
_add_button->set_button_group(_tool_button_group);
_add_button->set_meta("tool_mode", TOOL_MODE_ADD);
_add_button->connect("button_up", this, "_on_tool_button_pressed");
_add_button->set_shortcut(ED_SHORTCUT("terrain_world_editor/add_single_mode", "Add Single Voxel Mode", KEY_A));
_tool_button_container->add_child(_add_button);
_remove_button = memnew(ToolButton);
//_remove_button->set_text("Remove");
_remove_button->set_toggle_mode(true);
_remove_button->set_button_group(_tool_button_group);
_remove_button->set_meta("tool_mode", TOOL_MODE_REMOVE);
_remove_button->connect("button_up", this, "_on_tool_button_pressed");
_remove_button->set_shortcut(ED_SHORTCUT("terrain_world_editor/remove_single_mode", "Remove Single Voxel Mode", KEY_S));
_tool_button_container->add_child(_remove_button);
main_container->add_child(memnew(HSeparator));
// Add Remove tool
_add_remove_tool_container = memnew(VBoxContainer);
_add_remove_tool_container->hide();
main_container->add_child(_add_remove_tool_container);
_add_single_label = memnew(Label);
_add_single_label->set_text(TTR("Add Single Tool"));
_add_remove_tool_container->add_child(_add_single_label);
_remove_single_label = memnew(Label);
_remove_single_label->set_text(TTR("Remove Single Tool"));
_remove_single_label->hide();
_add_remove_tool_container->add_child(_remove_single_label);
_insert_button = memnew(ToolButton);
//_insert_button->set_text("Insert");
_insert_button->connect("button_up", this, "_on_insert_block_at_camera_button_pressed");
_insert_button->set_shortcut(ED_SHORTCUT("terrain_world_editor/instert_block_at_camera", "Insert at camera", KEY_B));
_add_remove_tool_container->add_child(_insert_button);
_add_remove_isolevel_slider_label = memnew(Label);
_add_remove_isolevel_slider_label->set_text(TTR("Isolevel"));
_add_remove_tool_container->add_child(_add_remove_isolevel_slider_label);
_add_remove_isolevel_slider = memnew(HSlider);
_add_remove_isolevel_slider->set_min(1);
_add_remove_isolevel_slider->set_value(_add_remove_current_isolevel);
_add_remove_isolevel_slider->set_custom_minimum_size(Size2(50 * EDSCALE, 0));
_add_remove_isolevel_slider->set_v_size_flags(SIZE_EXPAND_FILL);
_add_remove_isolevel_slider->set_h_size_flags(SIZE_EXPAND_FILL);
_add_remove_isolevel_slider->set_tooltip(TTR("Isolevel"));
_add_remove_tool_container->add_child(_add_remove_isolevel_slider);
_add_remove_isolevel_slider->connect("value_changed", this, "_on_add_remove_isolevel_slider_value_changed");
_add_remove_isolevel_slider->hide();
// Isolevel Brush
_isolevel_brush_tool_container = memnew(VBoxContainer);
main_container->add_child(_isolevel_brush_tool_container);
@ -971,9 +823,6 @@ void TerrainWorldEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: {
_add_button->set_icon(get_theme_icon("Add", "EditorIcons"));
_remove_button->set_icon(get_theme_icon("Remove", "EditorIcons"));
_insert_button->set_icon(get_theme_icon("InsertBefore", "EditorIcons"));
_isolevel_brush_button->set_icon(get_theme_icon("CanvasItem", "EditorIcons"));
_paint_brush_button->set_icon(get_theme_icon("CanvasItemShader", "EditorIcons"));
_paint_picker_button->set_icon(get_theme_icon("ColorPick", "EditorIcons"));
@ -1105,38 +954,19 @@ void TerrainWorldEditor::_on_tool_button_pressed() {
}
switch (_tool_mode) {
case TOOL_MODE_ADD:
_add_single_label->show();
_remove_single_label->hide();
_add_remove_tool_container->show();
_isolevel_brush_tool_container->hide();
_paint_brush_tool_container->hide();
_surfaces_vbox_container->hide();
break;
case TOOL_MODE_REMOVE:
_add_single_label->hide();
_remove_single_label->show();
_add_remove_tool_container->show();
_isolevel_brush_tool_container->hide();
_paint_brush_tool_container->hide();
_surfaces_vbox_container->hide();
break;
case TOOL_MODE_PAINT_BRUSH:
_gizmo->size = _paint_brush_size;
_add_remove_tool_container->hide();
_isolevel_brush_tool_container->hide();
_paint_brush_tool_container->show();
_surfaces_vbox_container->show();
break;
case TOOL_MODE_ISOLEVEL_BRUSH:
_gizmo->size = _isolevel_brush_size;
_add_remove_tool_container->hide();
_isolevel_brush_tool_container->show();
_paint_brush_tool_container->hide();
_surfaces_vbox_container->hide();
break;
case TOOL_MODE_PAINT_PICKER:
_add_remove_tool_container->hide();
_isolevel_brush_tool_container->hide();
_paint_brush_tool_container->hide();
_surfaces_vbox_container->hide();
@ -1150,54 +980,6 @@ void TerrainWorldEditor::_on_tool_button_pressed() {
}
}
void TerrainWorldEditor::_on_insert_block_at_camera_button_pressed() {
int selected_terrain = 0;
int channel = 0;
channel = _channel_type;
if (channel == -1)
return;
SpatialEditorViewport *vp = SpatialEditor::get_singleton()->get_editor_viewport(0);
if (!vp)
return;
Camera *cam = vp->get_camera();
if (!cam)
return;
Vector3 pos = cam->get_transform().origin;
selected_terrain = _selected_type + 1;
_undo_redo->create_action("Insert terrain voxel at camera.");
uint8_t prev_terrain = _world->get_voxel_at_world_position(pos, _channel_type);
uint8_t prev_isolevel = 0;
if (_channel_isolevel != -1) {
prev_isolevel = _world->get_voxel_at_world_position(pos, _channel_isolevel);
}
if (_channel_isolevel == -1) {
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, selected_terrain, channel);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_terrain, channel);
} else {
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, selected_terrain, channel, false);
_undo_redo->add_do_method(_world, "set_voxel_at_world_position", pos, _add_remove_current_isolevel, _channel_isolevel);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_terrain, channel, false);
_undo_redo->add_undo_method(_world, "set_voxel_at_world_position", pos, prev_isolevel, _channel_isolevel);
}
_undo_redo->commit_action();
}
void TerrainWorldEditor::_on_add_remove_isolevel_slider_value_changed(float value) {
_add_remove_current_isolevel = value;
}
void TerrainWorldEditor::_on_isolevel_brush_tool_button_pressed() {
BaseButton *button = _isolevel_brush_tool_button_group->get_pressed_button();
@ -1278,9 +1060,6 @@ void TerrainWorldEditor::_bind_methods() {
ClassDB::bind_method("_on_surface_button_pressed", &TerrainWorldEditor::_on_surface_button_pressed);
ClassDB::bind_method("_on_tool_button_pressed", &TerrainWorldEditor::_on_tool_button_pressed);
ClassDB::bind_method("_on_insert_block_at_camera_button_pressed", &TerrainWorldEditor::_on_insert_block_at_camera_button_pressed);
ClassDB::bind_method("_on_add_remove_isolevel_slider_value_changed", &TerrainWorldEditor::_on_add_remove_isolevel_slider_value_changed);
ClassDB::bind_method("_on_isolevel_brush_tool_button_pressed", &TerrainWorldEditor::_on_isolevel_brush_tool_button_pressed);
ClassDB::bind_method("_on_isolevel_brush_size_slider_changed", &TerrainWorldEditor::_on_isolevel_brush_size_slider_changed);
ClassDB::bind_method("_on_isolevel_brush_strength_slider_changed", &TerrainWorldEditor::_on_isolevel_brush_strength_slider_changed);

View File

@ -51,14 +51,11 @@ class TerrainWorldEditor : public PanelContainer {
public:
enum TerrainWorldEditorToolMode {
TOOL_MODE_ADD = 0,
TOOL_MODE_REMOVE,
TOOL_MODE_ISOLEVEL_BRUSH,
TOOL_MODE_ISOLEVEL_BRUSH = 0,
TOOL_MODE_PAINT_BRUSH,
TOOL_MODE_PAINT_PICKER,
TOOL_MODE_SPAWN_BRUSH,
TOOL_MODE_CHUNK_REMOVE,
//TOOL_MODE_DELETE_BRUSH, //Sets data in channel to 0
// TODO object manipulation tools.
};
@ -68,7 +65,6 @@ public:
EditorPlugin::AfterGUIInput forward_spatial_input_event(Camera *p_camera, const Ref<InputEvent> &p_event);
void edit(TerrainWorld *p_world);
EditorPlugin::AfterGUIInput do_add_remove_action(Camera *p_camera, const Point2 &p_point, bool p_click);
bool get_draw_world_coordinate(Camera *p_camera, const Point2 &p_point, Vector3 &r_position, Vector3 &r_normal);
void isolevel_brush_draw(const Vector3 &p_world_position);
void paint_brush_draw(const Vector3 &p_world_position);
@ -94,8 +90,7 @@ protected:
void _on_surface_button_pressed();
void _on_tool_button_pressed();
void _on_insert_block_at_camera_button_pressed();
void _on_add_remove_isolevel_slider_value_changed(float value);
void _on_isolevel_brush_tool_button_pressed();
void _on_isolevel_brush_size_slider_changed(float value);
void _on_isolevel_brush_strength_slider_changed(float value);
@ -156,8 +151,6 @@ private:
TerrainWorldEditorToolMode _tool_mode;
TerrainWorldEditorToolMode _previous_tool_mode;
ToolButton *_add_button;
ToolButton *_remove_button;
ToolButton *_isolevel_brush_button;
ToolButton *_paint_brush_button;
ToolButton *_paint_picker_button;
@ -167,14 +160,6 @@ private:
HFlowContainer *_tool_button_container;
Ref<ButtonGroup> _tool_button_group;
VBoxContainer *_add_remove_tool_container;
Label *_add_single_label;
Label *_remove_single_label;
Label *_add_remove_isolevel_slider_label;
HSlider *_add_remove_isolevel_slider;
int _add_remove_current_isolevel;
ToolButton *_insert_button;
VBoxContainer *_isolevel_brush_tool_container;
Ref<ButtonGroup> _isolevel_brush_tool_button_group;
ToolButton *_isolevel_brush_type_add_button;