mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-19 09:39:48 +00:00
Load images as tilesets
This commit is contained in:
parent
177428cc1b
commit
9f3564fe71
|
@ -835,6 +835,25 @@ func import_reference_image_from_image(image: Image) -> void:
|
||||||
reference_image_imported.emit()
|
reference_image_imported.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func open_image_as_tileset(
|
||||||
|
path: String, image: Image, horiz: int, vert: int, project := Global.current_project
|
||||||
|
) -> void:
|
||||||
|
horiz = mini(horiz, image.get_size().x)
|
||||||
|
vert = mini(vert, image.get_size().y)
|
||||||
|
var frame_width := image.get_size().x / horiz
|
||||||
|
var frame_height := image.get_size().y / vert
|
||||||
|
var tile_size := Vector2i(frame_width, frame_height)
|
||||||
|
var tileset := TileSetCustom.new(tile_size, project, path.get_file())
|
||||||
|
for yy in range(vert):
|
||||||
|
for xx in range(horiz):
|
||||||
|
var cropped_image := image.get_region(
|
||||||
|
Rect2i(frame_width * xx, frame_height * yy, frame_width, frame_height)
|
||||||
|
)
|
||||||
|
cropped_image.convert(project.get_image_format())
|
||||||
|
tileset.add_tile(cropped_image, null, 2)
|
||||||
|
project.tilesets.append(tileset)
|
||||||
|
|
||||||
|
|
||||||
func set_new_imported_tab(project: Project, path: String) -> void:
|
func set_new_imported_tab(project: Project, path: String) -> void:
|
||||||
var prev_project_empty := Global.current_project.is_empty()
|
var prev_project_empty := Global.current_project.is_empty()
|
||||||
var prev_project_pos := Global.current_project_index
|
var prev_project_pos := Global.current_project_index
|
||||||
|
|
|
@ -11,7 +11,8 @@ enum ImageImportOptions {
|
||||||
NEW_REFERENCE_IMAGE,
|
NEW_REFERENCE_IMAGE,
|
||||||
PALETTE,
|
PALETTE,
|
||||||
BRUSH,
|
BRUSH,
|
||||||
PATTERN
|
PATTERN,
|
||||||
|
TILESET
|
||||||
}
|
}
|
||||||
enum BrushTypes { FILE, PROJECT, RANDOM }
|
enum BrushTypes { FILE, PROJECT, RANDOM }
|
||||||
|
|
||||||
|
@ -75,6 +76,7 @@ func _on_ImportPreviewDialog_about_to_show() -> void:
|
||||||
import_option_button.add_item("New palette")
|
import_option_button.add_item("New palette")
|
||||||
import_option_button.add_item("New brush")
|
import_option_button.add_item("New brush")
|
||||||
import_option_button.add_item("New pattern")
|
import_option_button.add_item("New pattern")
|
||||||
|
import_option_button.add_item("Tileset")
|
||||||
|
|
||||||
# adding custom importers
|
# adding custom importers
|
||||||
for id in custom_importers.keys():
|
for id in custom_importers.keys():
|
||||||
|
@ -207,6 +209,10 @@ func _on_ImportPreviewDialog_confirmed() -> void:
|
||||||
var location := "Patterns".path_join(file_name_ext)
|
var location := "Patterns".path_join(file_name_ext)
|
||||||
var dir := DirAccess.open(path.get_base_dir())
|
var dir := DirAccess.open(path.get_base_dir())
|
||||||
dir.copy(path, Global.home_data_directory.path_join(location))
|
dir.copy(path, Global.home_data_directory.path_join(location))
|
||||||
|
elif current_import_option == ImageImportOptions.TILESET:
|
||||||
|
OpenSave.open_image_as_tileset(
|
||||||
|
path, image, spritesheet_horizontal, spritesheet_vertical
|
||||||
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if current_import_option in custom_importers.keys():
|
if current_import_option in custom_importers.keys():
|
||||||
|
@ -250,7 +256,11 @@ func synchronize() -> void:
|
||||||
dialog.at_layer_option.get_node("AtLayerOption") as OptionButton
|
dialog.at_layer_option.get_node("AtLayerOption") as OptionButton
|
||||||
)
|
)
|
||||||
# Sync properties (if any)
|
# Sync properties (if any)
|
||||||
if id == ImageImportOptions.SPRITESHEET_TAB or id == ImageImportOptions.SPRITESHEET_LAYER:
|
if (
|
||||||
|
id == ImageImportOptions.SPRITESHEET_TAB
|
||||||
|
or id == ImageImportOptions.SPRITESHEET_LAYER
|
||||||
|
or id == ImageImportOptions.TILESET
|
||||||
|
):
|
||||||
var h_frames := spritesheet_options.find_child("HorizontalFrames") as SpinBox
|
var h_frames := spritesheet_options.find_child("HorizontalFrames") as SpinBox
|
||||||
var v_frames := spritesheet_options.find_child("VerticalFrames") as SpinBox
|
var v_frames := spritesheet_options.find_child("VerticalFrames") as SpinBox
|
||||||
var d_h_frames := dialog.spritesheet_options.find_child("HorizontalFrames") as SpinBox
|
var d_h_frames := dialog.spritesheet_options.find_child("HorizontalFrames") as SpinBox
|
||||||
|
@ -298,7 +308,7 @@ func _on_ImportOption_item_selected(id: ImageImportOptions) -> void:
|
||||||
_hide_all_options()
|
_hide_all_options()
|
||||||
import_options.get_parent().visible = true
|
import_options.get_parent().visible = true
|
||||||
|
|
||||||
if id == ImageImportOptions.SPRITESHEET_TAB:
|
if id == ImageImportOptions.SPRITESHEET_TAB or id == ImageImportOptions.TILESET:
|
||||||
frame_size_label.visible = true
|
frame_size_label.visible = true
|
||||||
spritesheet_options.visible = true
|
spritesheet_options.visible = true
|
||||||
texture_rect.get_child(0).visible = true
|
texture_rect.get_child(0).visible = true
|
||||||
|
@ -505,6 +515,7 @@ func _call_queue_redraw() -> void:
|
||||||
if (
|
if (
|
||||||
current_import_option == ImageImportOptions.SPRITESHEET_TAB
|
current_import_option == ImageImportOptions.SPRITESHEET_TAB
|
||||||
or current_import_option == ImageImportOptions.SPRITESHEET_LAYER
|
or current_import_option == ImageImportOptions.SPRITESHEET_LAYER
|
||||||
|
or current_import_option == ImageImportOptions.TILESET
|
||||||
):
|
):
|
||||||
if smart_slice:
|
if smart_slice:
|
||||||
if is_instance_valid(sliced_rects) and not sliced_rects.rects.is_empty():
|
if is_instance_valid(sliced_rects) and not sliced_rects.rects.is_empty():
|
||||||
|
|
|
@ -223,10 +223,9 @@ text = "Brush type:"
|
||||||
[node name="BrushTypeOption" type="OptionButton" parent="VBoxContainer/ImportOptionsContainer/ImportOptions/NewBrushOptions/Type"]
|
[node name="BrushTypeOption" type="OptionButton" parent="VBoxContainer/ImportOptionsContainer/ImportOptions/NewBrushOptions/Type"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
mouse_default_cursor_shape = 2
|
mouse_default_cursor_shape = 2
|
||||||
item_count = 3
|
|
||||||
selected = 0
|
selected = 0
|
||||||
|
item_count = 3
|
||||||
popup/item_0/text = "File brush"
|
popup/item_0/text = "File brush"
|
||||||
popup/item_0/id = 0
|
|
||||||
popup/item_1/text = "Project brush"
|
popup/item_1/text = "Project brush"
|
||||||
popup/item_1/id = 1
|
popup/item_1/id = 1
|
||||||
popup/item_2/text = "Random brush"
|
popup/item_2/text = "Random brush"
|
||||||
|
|
|
@ -41,5 +41,9 @@ func _on_about_to_popup() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _on_tileset_option_button_item_selected(index: int) -> void:
|
func _on_tileset_option_button_item_selected(index: int) -> void:
|
||||||
|
if index > 0:
|
||||||
|
var tileset := Global.current_project.tilesets[index - 1]
|
||||||
|
tileset_name_line_edit.text = tileset.name
|
||||||
|
tile_size_slider.value = tileset.tile_size
|
||||||
tileset_name_line_edit.editable = index == 0
|
tileset_name_line_edit.editable = index == 0
|
||||||
tile_size_slider.editable = tileset_name_line_edit.editable
|
tile_size_slider.editable = tileset_name_line_edit.editable
|
||||||
|
|
Loading…
Reference in a new issue