1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-03-15 07:45:19 +00:00
Pixelorama/src/UI/UI.gd
Emmanouil Papadeas ac5027452d Fix tileset panel not always hiding when Pixelorama starts
Possible regression from #1172.
2025-02-08 20:21:34 +02:00

53 lines
1.7 KiB
GDScript

extends Panel
var shader_disabled := false
var transparency_material: ShaderMaterial
@onready var dockable_container: DockableContainer = $DockableContainer
@onready var main_canvas_container := find_child("Main Canvas") as Container
@onready var tiles: TileSetPanel = $DockableContainer/Tiles
func _ready() -> void:
Global.cel_switched.connect(_on_cel_switched)
transparency_material = material
main_canvas_container.property_list_changed.connect(_re_configure_shader)
update_transparent_shader()
await Global.pixelorama_opened
dockable_container.set_control_hidden.call_deferred(tiles, true)
func _on_cel_switched() -> void:
var cel := Global.current_project.get_current_cel()
dockable_container.set_control_hidden(tiles, cel is not CelTileMap)
func _re_configure_shader() -> void:
await get_tree().process_frame
if get_window() != main_canvas_container.get_window():
material = null
shader_disabled = true
else:
if shader_disabled:
material = transparency_material
shader_disabled = false
func _on_main_canvas_item_rect_changed() -> void:
update_transparent_shader()
func _on_main_canvas_visibility_changed() -> void:
update_transparent_shader()
func update_transparent_shader() -> void:
if not is_instance_valid(main_canvas_container):
return
# Works independently of the transparency feature
var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink
transparency_material.set_shader_parameter("screen_resolution", get_viewport().size)
transparency_material.set_shader_parameter(
"position", main_canvas_container.global_position * Global.shrink
)
transparency_material.set_shader_parameter("size", canvas_size)