extends FileDialog var new_frame := true var import_spritesheet := false var spritesheet_horizontal := 1 var spritesheet_vertical := 1 func _ready() -> void: var children := [] for i in range(get_child_count()): if i > 7: children.append(get_child(i)) for child in children: remove_child(child) get_vbox().add_child(child) func _on_ImportAsNewFrame_pressed() -> void: new_frame = !new_frame func _on_ImportSpritesheet_pressed() -> void: import_spritesheet = !import_spritesheet var spritesheet_container = Global.find_node_by_name(self, "Spritesheet") spritesheet_container.visible = import_spritesheet func _on_HorizontalFrames_value_changed(value) -> void: spritesheet_horizontal = value func _on_VerticalFrames_value_changed(value) -> void: spritesheet_vertical = value func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void: Global.control.opensprite_file_selected = true if !new_frame: # If we're not adding a new frame, delete the previous Global.clear_canvases() var first_path : String = paths[0] var i : int = Global.canvases.size() if !import_spritesheet: # Find the biggest image and let it handle the camera zoom options var max_size : Vector2 var biggest_canvas : Canvas for path in paths: var image := Image.new() var err := image.load(path) if err != OK: # An error occured var file_name : String = path.get_file() Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) Global.error_dialog.popup_centered() continue var canvas : Canvas = load("res://Prefabs/Canvas.tscn").instance() canvas.size = image.get_size() image.convert(Image.FORMAT_RGBA8) image.lock() var tex := ImageTexture.new() tex.create_from_image(image, 0) # Store [Image, ImageTexture, Opacity] canvas.layers.append([image, tex, 1]) for _i in range(1, Global.layers.size()): var empty_sprite := Image.new() empty_sprite.create(canvas.size.x, canvas.size.y, false, Image.FORMAT_RGBA8) empty_sprite.fill(Color(0, 0, 0, 0)) empty_sprite.lock() var empty_tex := ImageTexture.new() empty_tex.create_from_image(empty_sprite, 0) # Store [Image, ImageTexture, Opacity] canvas.layers.append([empty_sprite, empty_tex, 1]) canvas.frame = i Global.canvases.append(canvas) Global.canvas_parent.add_child(canvas) canvas.visible = false if path == paths[0]: # If it's the first file max_size = canvas.size biggest_canvas = canvas else: if canvas.size > max_size: biggest_canvas = canvas i += 1 if biggest_canvas: biggest_canvas.camera_zoom() else: var image := Image.new() var err := image.load(first_path) if err != OK: # An error occured var file_name : String = first_path.get_file() Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) Global.error_dialog.popup_centered() return spritesheet_horizontal = min(spritesheet_horizontal, image.get_size().x) spritesheet_vertical = min(spritesheet_vertical, image.get_size().y) var frame_width := image.get_size().x / spritesheet_horizontal var frame_height := image.get_size().y / spritesheet_vertical for yy in range(spritesheet_vertical): for xx in range(spritesheet_horizontal): var canvas : Canvas = load("res://Prefabs/Canvas.tscn").instance() var cropped_image := Image.new() cropped_image = image.get_rect(Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height)) canvas.size = cropped_image.get_size() cropped_image.convert(Image.FORMAT_RGBA8) cropped_image.lock() var tex := ImageTexture.new() tex.create_from_image(cropped_image, 0) # Store [Image, ImageTexture, Opacity] canvas.layers.append([cropped_image, tex, 1]) for _i in range(1, Global.layers.size()): var empty_sprite := Image.new() empty_sprite.create(canvas.size.x, canvas.size.y, false, Image.FORMAT_RGBA8) empty_sprite.fill(Color(0, 0, 0, 0)) empty_sprite.lock() var empty_tex := ImageTexture.new() empty_tex.create_from_image(empty_sprite, 0) # Store [Image, ImageTexture, Opacity] canvas.layers.append([empty_sprite, empty_tex, 1]) canvas.frame = i Global.canvases.append(canvas) Global.canvas_parent.add_child(canvas) canvas.visible = false i += 1 Global.canvases[Global.canvases.size() - 1].camera_zoom() Global.canvases = Global.canvases # Just to call Global.canvases_changed Global.current_frame = i - 1 Global.canvas = Global.canvases[Global.canvases.size() - 1] Global.canvas.visible = true Global.window_title = first_path.get_file() + " (" + tr("imported") + ") - Pixelorama"