Added two new tools, Paint all pixels of same color and lighten/darken

- Paint all pixels of same color tool added. Does what it says.
- Lighten/darken tool. It lightens by default, darkens when user is pressing Ctrl.
- Removed tool variables from main - stored everything in an array instead.
This commit is contained in:
OverloadedOrama 2019-10-23 02:54:29 +03:00
parent e18389d8c4
commit c64c3408e8
4 changed files with 87 additions and 32 deletions

View file

@ -110,6 +110,30 @@ func _process(delta) -> void:
elif current_mouse_button == "right_mouse":
current_color = Global.right_color_picker.color
flood_fill(mouse_pos, layers[current_layer_index][0].get_pixelv(mouse_pos), current_color)
"PaintAllPixelsSameColor":
if point_in_rectangle(mouse_pos, location, location + size):
var current_color : Color
if current_mouse_button == "left_mouse":
current_color = Global.left_color_picker.color
elif current_mouse_button == "right_mouse":
current_color = Global.right_color_picker.color
var pixel_color : Color = layers[current_layer_index][0].get_pixelv(mouse_pos)
for xx in size.x:
for yy in size.y:
var c : Color = layers[current_layer_index][0].get_pixel(xx, yy)
if c == pixel_color:
layers[current_layer_index][0].set_pixel(xx, yy, current_color)
sprite_changed_this_frame = true
"LightenDarken":
if point_in_rectangle(mouse_pos, location, location + size):
var pixel_color : Color = layers[current_layer_index][0].get_pixelv(mouse_pos)
var amount := 0.05
var color_changed := pixel_color.lightened(amount)
if Input.is_key_pressed(KEY_CONTROL):
color_changed = pixel_color.darkened(amount)
layers[current_layer_index][0].set_pixelv(mouse_pos, color_changed)
sprite_changed_this_frame = true
"RectSelect":
#Check SelectionRectangle.gd for more code on Rectangle Selection
if Global.can_draw && Global.has_focus && Global.current_frame == frame:

View file

@ -4,10 +4,7 @@ var current_save_path := ""
var current_export_path := ""
var opensprite_file_selected := false
var view_menu : PopupMenu
var pencil_tool
var eraser_tool
var fill_tool
var rectselect_tool
var tools := []
var import_as_new_frame : CheckBox
var export_all_frames : CheckBox
var export_as_single_file : CheckBox
@ -75,15 +72,16 @@ func _ready() -> void:
help_menu.connect("id_pressed", self, "help_menu_id_pressed")
var root = get_tree().get_root()
pencil_tool = Global.find_node_by_name(root, "Pencil")
eraser_tool = Global.find_node_by_name(root, "Eraser")
fill_tool = Global.find_node_by_name(root, "Fill")
rectselect_tool = Global.find_node_by_name(root, "RectSelect")
#Node, left mouse shortcut, right mouse shortcut
tools.append([Global.find_node_by_name(root, "Pencil"), "left_pencil_tool", "right_pencil_tool"])
tools.append([Global.find_node_by_name(root, "Eraser"), "left_eraser_tool", "right_eraser_tool"])
tools.append([Global.find_node_by_name(root, "Fill"), "left_fill_tool", "right_fill_tool"])
tools.append([Global.find_node_by_name(root, "PaintAllPixelsSameColor"), "left_paint_all_tool", "right_paint_all_tool"])
tools.append([Global.find_node_by_name(root, "LightenDarken"), "left_lightdark_tool", "right_lightdark_tool"])
tools.append([Global.find_node_by_name(root, "RectSelect"), "left_rectangle_select_tool", "right_rectangle_select_tool"])
pencil_tool.connect("pressed", self, "_on_Tool_pressed", [pencil_tool])
eraser_tool.connect("pressed", self, "_on_Tool_pressed", [eraser_tool])
fill_tool.connect("pressed", self, "_on_Tool_pressed", [fill_tool])
rectselect_tool.connect("pressed", self, "_on_Tool_pressed", [rectselect_tool])
for t in tools:
t[0].connect("pressed", self, "_on_Tool_pressed", [t[0]])
#Options for Import
import_as_new_frame = CheckBox.new()
@ -103,23 +101,11 @@ func _ready() -> void:
func _input(event):
#Handle tool shortcuts
if event.is_action_pressed("right_pencil_tool"):
_on_Tool_pressed(pencil_tool, false, false)
elif event.is_action_pressed("left_pencil_tool"):
_on_Tool_pressed(pencil_tool, false, true)
elif event.is_action_pressed("right_eraser_tool"):
_on_Tool_pressed(eraser_tool, false, false)
elif event.is_action_pressed("left_eraser_tool"):
_on_Tool_pressed(eraser_tool, false, true)
elif event.is_action_pressed("right_fill_tool"):
_on_Tool_pressed(fill_tool, false, false)
elif event.is_action_pressed("left_fill_tool"):
_on_Tool_pressed(fill_tool, false, true)
elif event.is_action_pressed("right_rectangle_select_tool"):
_on_Tool_pressed(rectselect_tool, false, false)
elif event.is_action_pressed("left_rectangle_select_tool"):
_on_Tool_pressed(rectselect_tool, false, true)
for t in tools: #Handle tool shortcuts
if event.is_action_pressed(t[2]): #Shortcut for right button (with Alt)
_on_Tool_pressed(t[0], false, false)
elif event.is_action_pressed(t[1]): #Shortcut for left button
_on_Tool_pressed(t[0], false, true)
func file_menu_id_pressed(id : int) -> void:
match id: