broken_seals/game/addons/Godoxel/SaveFileDialog.gd

71 lines
1.3 KiB
GDScript

tool
extends FileDialog
var canvas
var file_path = ""
func _enter_tree():
canvas = get_parent().find_node("Canvas")
func _ready():
# warning-ignore:return_value_discarded
get_line_edit().connect("text_entered", self, "_on_LineEdit_text_entered")
invalidate()
clear_filters()
add_filter("*.png ; PNG Images")
func _on_SaveFileDialog_file_selected(path):
#print("selected file: ", path)
file_path = path
save_file()
# warning-ignore:unused_argument
func _on_LineEdit_text_entered(text):
return
# print("text entered: ", text)
func _on_SaveFileDialog_confirmed():
return
# print("confirmed: ", current_path)
func save_file():
var image = Image.new()
image.create(canvas.canvas_width, canvas.canvas_height, true, Image.FORMAT_RGBA8)
image.lock()
for layer in canvas.layers:
var idx = 0
if not layer.visible:
continue
for x in range(layer.layer_width):
for y in range(layer.layer_height):
var color = layer.get_pixel(x, y)
var image_color = image.get_pixel(x, y)
if color.a != 0:
image.set_pixel(x, y, image_color.blend(color))
else:
image.set_pixel(x, y, color)
image.unlock()
var dir = Directory.new()
if dir.file_exists(file_path):
dir.remove(file_path)
image.save_png(file_path)
func _on_SaveFileDialog_about_to_show():
invalidate()
func _on_SaveFileDialog_visibility_changed():
invalidate()