mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-20 12:33:14 +00:00
Change tilemask loading (#731)
* Load tilemask from current frame... ...instead of selecting from FileDialog * Delete the FileDialog * Added the reset button every good loader needs a reset button, Cheers!!!
This commit is contained in:
parent
8803acd105
commit
57387f3530
2 changed files with 54 additions and 71 deletions
|
@ -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()
|
||||
|
|
|
@ -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"]
|
||||
|
|
Loading…
Add table
Reference in a new issue