1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-03-15 15:55:18 +00:00

Select multiple tiles with Control and/or Shift to draw random tiles

If you have 2 tiles selected, for example, each time you draw it will randomly choose from one of these two tiles.
This commit is contained in:
Emmanouil Papadeas 2025-02-08 21:21:28 +02:00
parent ac5027452d
commit f2f465a111

View file

@ -21,8 +21,11 @@ static var placing_tiles := false:
static var tile_editing_mode := TileEditingMode.AUTO static var tile_editing_mode := TileEditingMode.AUTO
static var selected_tile_index := 0: static var selected_tile_index := 0:
set(value): set(value):
selected_tile_index = value selected_tiles = [value]
_call_update_brushes() _call_update_brushes()
get:
return selected_tiles.pick_random()
static var selected_tiles: Array[int] = [0]
static var is_flipped_h := false: static var is_flipped_h := false:
set(value): set(value):
is_flipped_h = value is_flipped_h = value
@ -113,21 +116,22 @@ func _on_cel_switched() -> void:
func _update_tileset(_cel: BaseCel, _replace_index: int) -> void: func _update_tileset(_cel: BaseCel, _replace_index: int) -> void:
_clear_tile_buttons() _clear_tile_buttons()
var button_group := ButtonGroup.new() for tile_index in selected_tiles:
if selected_tile_index >= current_tileset.tiles.size(): if tile_index >= current_tileset.tiles.size():
selected_tiles.erase(tile_index)
if selected_tiles.is_empty():
selected_tile_index = 0 selected_tile_index = 0
for i in current_tileset.tiles.size(): for i in current_tileset.tiles.size():
var tile := current_tileset.tiles[i] var tile := current_tileset.tiles[i]
var texture := ImageTexture.create_from_image(tile.image) var texture := ImageTexture.create_from_image(tile.image)
var button := _create_tile_button(texture, i, button_group) var button := _create_tile_button(texture, i)
if i == selected_tile_index: if i in selected_tiles:
button.set_pressed_no_signal(true) button.set_pressed_no_signal(true)
tile_button_container.add_child(button) tile_button_container.add_child(button)
func _create_tile_button(texture: Texture2D, index: int, button_group: ButtonGroup) -> Button: func _create_tile_button(texture: Texture2D, index: int) -> Button:
var button := Button.new() var button := Button.new()
button.button_group = button_group
button.toggle_mode = true button.toggle_mode = true
button.custom_minimum_size = Vector2(button_size, button_size) button.custom_minimum_size = Vector2(button_size, button_size)
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
@ -164,9 +168,27 @@ static func _call_update_brushes() -> void:
slot.tool_node.update_brush() slot.tool_node.update_brush()
func _on_tile_button_toggled(toggled_on: bool, index: int) -> void: func _on_tile_button_toggled(_toggled_on: bool, index: int) -> void:
if toggled_on: if Input.is_action_pressed("shift"):
selected_tiles.sort()
var diff_sign := signi(index - selected_tiles[-1])
if diff_sign == 0:
diff_sign = 1
for i in range(selected_tiles[-1], index + diff_sign, diff_sign):
if not selected_tiles.has(i):
selected_tiles.append(i)
tile_button_container.get_child(i).set_pressed_no_signal(true)
elif Input.is_action_pressed("ctrl"):
if selected_tiles.has(index):
if selected_tiles.size() > 1:
selected_tiles.erase(index)
else:
selected_tiles.append(index)
else:
selected_tile_index = index selected_tile_index = index
for i in tile_button_container.get_child_count():
var child_button := tile_button_container.get_child(i) as BaseButton
child_button.set_pressed_no_signal(i == index)
place_tiles.button_pressed = true place_tiles.button_pressed = true