mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-03-15 07:45:19 +00:00
53 lines
1.7 KiB
GDScript
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)
|