mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-07 19:09:50 +00:00
44 lines
1.2 KiB
GDScript
44 lines
1.2 KiB
GDScript
extends Panel
|
|
|
|
var shader_disabled := false
|
|
var transparency_material: ShaderMaterial
|
|
|
|
@onready var main_canvas_container := find_child("Main Canvas") as Container
|
|
|
|
|
|
func _ready() -> void:
|
|
transparency_material = material
|
|
main_canvas_container.property_list_changed.connect(_re_configure_shader)
|
|
update_transparent_shader()
|
|
|
|
|
|
func _re_configure_shader():
|
|
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)
|