diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.gd b/src/UI/Dialogs/TileModeOffsetsDialog.gd index 633ed37d8..ca52f5d7c 100644 --- a/src/UI/Dialogs/TileModeOffsetsDialog.gd +++ b/src/UI/Dialogs/TileModeOffsetsDialog.gd @@ -7,6 +7,7 @@ onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsCon onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode onready var load_button: Button = $VBoxContainer/HBoxContainer/Mask/LoadMask +onready var reset_mask: Button = $VBoxContainer/HBoxContainer/Mask/ResetMask onready var mask_hint: TextureRect = $VBoxContainer/HBoxContainer/Mask/MaskHint @@ -37,12 +38,10 @@ func _on_TileModeOffsetsDialog_about_to_show() -> void: $VBoxContainer/HBoxContainer/OptionsContainer/XBasisXLabel.visible = false $VBoxContainer/HBoxContainer/OptionsContainer/XBasisYLabel.visible = false - load_button.text = "Load Mask" + reset_mask.disabled = true if Global.current_project.tiles.has_mask: - load_button.text = "Loaded" - var tex := ImageTexture.new() - tex.create_from_image(Global.current_project.tiles.tile_mask) - mask_hint.texture = tex + reset_mask.disabled = false + update_preview() @@ -98,6 +97,11 @@ func update_preview() -> void: tile_mode.update() preview_rect.get_node("TransparentChecker").rect_size = preview_rect.rect_size + # Also update the tile_mask preview + var tex := ImageTexture.new() + tex.create_from_image(Global.current_project.tiles.tile_mask) + mask_hint.texture = tex + func _on_TileModeOffsetsDialog_popup_hide() -> void: Global.dialog_open(false) @@ -120,44 +124,28 @@ func _on_Reset_pressed(): func _on_LoadMask_pressed() -> void: - if OS.get_name() == "HTML5": - Html5FileExchange.connect("image_loaded", self, "_on_html_image_loaded") - Html5FileExchange.load_image(false) - else: - $FileDialog.current_dir = Global.current_project.directory_path - $FileDialog.popup_centered() - - -func _on_html_image_loaded(image_info: Dictionary): - if image_info.has("image"): - load_mask(image_info.image) - Html5FileExchange.disconnect("image_loaded", self, "_on_html_image_loaded") - - -func _on_FileDialog_file_selected(path: String) -> void: + var frame_idx = Global.current_project.current_frame + var current_frame = Global.current_project.frames[frame_idx] + var tiles = Global.current_project.tiles + var size = tiles.tile_size 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() - Global.dialog_open(true) - return - if image.get_size() != Global.current_project.size: - Global.error_dialog.set_text(tr("The mask must have the same size as the project")) - Global.error_dialog.popup_centered() - Global.dialog_open(true) - return - - load_mask(image) + image.create(size.x, size.y, false, Image.FORMAT_RGBA8) + Export.blend_layers(image, current_frame) + if image.get_used_rect().size == Vector2.ZERO: + reset_mask.disabled = true + tiles.reset_mask() + else: + load_mask(image) + update_preview() func load_mask(image: Image): - load_button.text = "Loaded" + reset_mask.disabled = false Global.current_project.tiles.tile_mask = image Global.current_project.tiles.has_mask = true - var tex := ImageTexture.new() - tex.create_from_image(Global.current_project.tiles.tile_mask) - mask_hint.texture = tex + + +func _on_ResetMask_pressed() -> void: + reset_mask.disabled = true + Global.current_project.tiles.reset_mask() + update_preview() diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.tscn b/src/UI/Dialogs/TileModeOffsetsDialog.tscn index 9277456a2..62e2e07a5 100644 --- a/src/UI/Dialogs/TileModeOffsetsDialog.tscn +++ b/src/UI/Dialogs/TileModeOffsetsDialog.tscn @@ -8,9 +8,10 @@ blend_mode = 4 [node name="TileModeOffsetsDialog" type="ConfirmationDialog"] -margin_right = 216.0 -margin_bottom = 374.0 -rect_min_size = Vector2( 172, 60.2 ) +visible = true +margin_right = 301.0 +margin_bottom = 422.0 +rect_min_size = Vector2( 172, 422 ) window_title = "Tile Mode Offsets" resizable = true script = ExtResource( 3 ) @@ -19,7 +20,7 @@ script = ExtResource( 3 ) margin_left = 8.0 margin_top = 8.0 margin_right = 293.0 -margin_bottom = 362.0 +margin_bottom = 386.0 [node name="TileModeOffsets" type="Label" parent="VBoxContainer"] margin_right = 285.0 @@ -29,11 +30,11 @@ text = "Tile Mode Offsets" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] margin_top = 18.0 margin_right = 285.0 -margin_bottom = 150.0 +margin_bottom = 174.0 [node name="OptionsContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer"] margin_right = 137.0 -margin_bottom = 132.0 +margin_bottom = 156.0 custom_constants/vseparation = 4 custom_constants/hseparation = 2 columns = 2 @@ -110,12 +111,12 @@ text = "Reset" [node name="VSeparator" type="VSeparator" parent="VBoxContainer/HBoxContainer"] margin_left = 141.0 margin_right = 145.0 -margin_bottom = 132.0 +margin_bottom = 156.0 [node name="Mask" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"] margin_left = 149.0 margin_right = 285.0 -margin_bottom = 132.0 +margin_bottom = 156.0 size_flags_horizontal = 3 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/Mask"] @@ -134,6 +135,8 @@ margin_top = 26.0 margin_right = 136.0 margin_bottom = 100.0 rect_min_size = Vector2( 136, 74 ) +hint_tooltip = "Mask will only allow the drawing to remain within it's bounds +(Used for custom tiles)" size_flags_vertical = 3 expand = true stretch_mode = 6 @@ -148,15 +151,24 @@ margin_top = 112.0 margin_right = 136.0 margin_bottom = 132.0 rect_min_size = Vector2( 100, 0 ) -hint_tooltip = "Mask will only allow the drawing to remain within it's bounds -(Used for custom tiles)" -text = "Load Mask" +hint_tooltip = "Create the Tile Mask from Current Frame" +text = "Current Frame?" +clip_text = true + +[node name="ResetMask" type="Button" parent="VBoxContainer/HBoxContainer/Mask"] +margin_top = 136.0 +margin_right = 136.0 +margin_bottom = 156.0 +rect_min_size = Vector2( 100, 0 ) +hint_tooltip = "Create the Tile Mask from Current Frame" +disabled = true +text = "Reset Mask" clip_text = true [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_top = 154.0 +margin_top = 178.0 margin_right = 285.0 -margin_bottom = 354.0 +margin_bottom = 378.0 size_flags_vertical = 3 [node name="Preview" type="Control" parent="VBoxContainer/AspectRatioContainer"] @@ -176,23 +188,6 @@ anchor_bottom = 1.0 margin_right = 0.0 margin_bottom = 0.0 -[node name="FileDialog" type="FileDialog" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 293.0 -margin_bottom = 362.0 -rect_min_size = Vector2( 172, 60.2 ) -window_title = "Open a File" -resizable = true -mode = 0 -access = 2 -filters = PoolStringArray( "*.png ; PNG Image" ) -current_dir = "/home/variable/Documents/Godot/Godot projects/Pixelorama-Tile-mode-Fixes" -current_path = "/home/variable/Documents/Godot/Godot projects/Pixelorama-Tile-mode-Fixes/" -__meta__ = { -"_editor_description_": "" -} - [connection signal="about_to_show" from="." to="." method="_on_TileModeOffsetsDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_TileModeOffsetsDialog_confirmed"] [connection signal="item_rect_changed" from="." to="." method="_on_TileModeOffsetsDialog_item_rect_changed"] @@ -203,4 +198,4 @@ __meta__ = { [connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/YBasisY" to="." method="_on_YBasisY_value_changed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/OptionsContainer/Reset" to="." method="_on_Reset_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/Mask/LoadMask" to="." method="_on_LoadMask_pressed"] -[connection signal="file_selected" from="FileDialog" to="." method="_on_FileDialog_file_selected"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/Mask/ResetMask" to="." method="_on_ResetMask_pressed"]