From 27d8d36030d8765f7abea9061c8df0b6cc7b4d3a Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 18 Nov 2022 14:25:49 +0100 Subject: [PATCH] Reimplemented the preview layer. --- game/PaintCanvas.gd | 98 ++++++++++++++++++++++++--------------------- game/Project.tscn | 2 +- 2 files changed, 53 insertions(+), 47 deletions(-) diff --git a/game/PaintCanvas.gd b/game/PaintCanvas.gd index fc3a955..59f6bc9 100644 --- a/game/PaintCanvas.gd +++ b/game/PaintCanvas.gd @@ -116,6 +116,53 @@ func handle_right_mouse_button_down(local_position : Vector2, event: InputEvent) tool_process(local_position, event) +func draw_brush_preview() -> void: + clear_preview() + + if current_tool == TOOL_PASTECUT: +# for (int idx = 0; idx < _selection_cells.size(); ++idx) { +# Vector2i pixel = _selection_cells[idx]; +# //if pixel.x < 0 || pixel.y < 0: +# // print(pixel); +# Color color = _selection_colors[idx]; +# pixel -= _cut_pos + _cut_size / 2; +# pixel += cell_mouse_position; +# paint_canvas->_set_pixel_v(paint_canvas->tool_layer, pixel, color); +# } + for idx in range(_selection_cells.size()): + var pixel : Vector2i = _selection_cells[idx]; + var color : Color = _selection_colors[idx]; + pixel -= _cut_pos + _cut_size / 2; + pixel.x += cell_mouse_position.x; + pixel.y += cell_mouse_position.y; + set_preview_pixel_v(pixel, color) + + update_textures() + elif current_tool == TOOL_BRUSH: +# PoolVector2iArray pixels = BrushPrefabs::get_brush(selected_brush_prefab, brush_size_slider->get_value()); +# +# PoolVector2iArray::Read r = pixels.read(); +# +# for (int i = 0; i < pixels.size(); ++i) { +# Vector2i pixel = r[i]; +# paint_canvas->_set_pixel(paint_canvas->tool_layer, cell_mouse_position.x + pixel.x, cell_mouse_position.y + pixel.y, _selected_color); +# //print_error("ad " + String::num(cell_mouse_position.x + pixel.x) + " " + String::num(cell_mouse_position.y + pixel.y)); +# } +# +# r.release(); + + update_textures() + elif current_tool == TOOL_RAINBOW: + set_preview_pixel(cell_mouse_position.x, cell_mouse_position.y, Color(0.46875, 0.446777, 0.446777, 0.3)); + update_textures() + elif current_tool == TOOL_COLORPICKER: + set_preview_pixel(cell_mouse_position.x, cell_mouse_position.y, Color(0.866667, 0.847059, 0.847059, 0.3)); + update_textures() + else: + set_preview_pixel(cell_mouse_position.x, cell_mouse_position.y, get_current_color()); + update_textures() + + #void PaintWindow::_draw_tool_brush() { # paint_canvas->tool_layer->clear(); # @@ -156,54 +203,9 @@ func handle_right_mouse_button_down(local_position : Vector2, event: InputEvent) # } # # paint_canvas->update(); -# //TODO add here brush prefab drawing -# // paint_canvas->tool_layer->update_texture(); #} -#void PaintWindow::_handle_cut() { -# if (Input::get_singleton()->is_mouse_button_pressed(BUTTON_RIGHT)) { -# paint_canvas->clear_preview_layer(); -# set_brush(_previous_tool); -# return; -# } -# -# if (Input::get_singleton()->is_mouse_button_pressed(BUTTON_LEFT)) { -# PoolVector2iArray pixels = PaintUtilities::get_pixels_in_line(cell_mouse_position, last_cell_mouse_position); -# -# PoolVector2iArray::Read r = pixels.read(); -# for (int i = 0; i < pixels.size(); ++i) { -# Vector2i pixel_pos = r[i]; -# -# for (int idx = 0; idx < _selection_cells.size(); ++idx) { -# Vector2i pixel = _selection_cells[idx]; -# Color color = _selection_colors[idx]; -# pixel -= _cut_pos + _cut_size / 2; -# pixel += pixel_pos; -# paint_canvas->set_pixel_v(pixel, color); -# } -# } -# -# r.release(); -# } else { -# if (_last_preview_draw_cell_pos == cell_mouse_position) { -# return; -# } -# -# paint_canvas->clear_preview_layer(); -# -# for (int idx = 0; idx < _selection_cells.size(); ++idx) { -# Vector2i pixel = _selection_cells[idx]; -# Color color = _selection_colors[idx]; -# pixel -= _cut_pos + _cut_size / 2; -# pixel += cell_mouse_position; -# paint_canvas->set_preview_pixel_v(pixel, color); -# } -# -# _last_preview_draw_cell_pos = cell_mouse_position; -# } -#} - func do_action(arr : Array) -> void: if !_current_action: return @@ -418,6 +420,8 @@ func _forward_canvas_gui_input(event: InputEvent) -> bool: _mouse_down = true _mouse_button_down = event.button_index + clear_preview() + if _mouse_button_down == BUTTON_LEFT: handle_left_mouse_button_down(local_position, event) elif _mouse_button_down == BUTTON_RIGHT: @@ -427,7 +431,7 @@ func _forward_canvas_gui_input(event: InputEvent) -> bool: if event is InputEventMouseMotion: var local_position : Vector2 = get_local_mouse_position() - + mouse_position = get_global_mouse_position() cell_mouse_position = local_position @@ -444,6 +448,8 @@ func _forward_canvas_gui_input(event: InputEvent) -> bool: last_cell_mouse_position = local_position return true + else: + draw_brush_preview() last_mouse_position = mouse_position last_cell_mouse_position = local_position diff --git a/game/Project.tscn b/game/Project.tscn index 5f45ff9..ba180a0 100644 --- a/game/Project.tscn +++ b/game/Project.tscn @@ -28,7 +28,7 @@ size = Vector2( 32, 32 ) [node name="PaintProject" type="PaintProject"] size = Vector2i( 128, 128 ) -current_color = Color( 0.678431, 0.113725, 0.0823529, 1 ) +current_color = Color( 0.964706, 0.992157, 0.121569, 1 ) color_presets = PoolColorArray( 0.67914, 0.117493, 0.0852439, 1, 0.129412, 0.113725, 0.384314, 1, 0.0666667, 0.796078, 0.196078, 1, 0.0666667, 0.796078, 0.196078, 1, 0.964706, 0.992157, 0.121569, 1, 0.00784314, 0.835294, 0.564706, 1, 0.0666667, 0.796078, 0.196078, 1, 0.658824, 0.313726, 0.207843, 1 ) script = ExtResource( 2 )