2021-11-18 17:23:37 +01:00
tool
2021-11-21 11:46:04 +01:00
extends PanelContainer
2021-11-18 17:23:37 +01:00
class_name SummerDayCanvas
var scene : SummerDayScene
2021-11-20 11:38:50 +01:00
var canvas_state : = SummerDayCanvasState . new ( )
2021-11-21 11:46:04 +01:00
var tool_pool : = SummerDayCanvasToolPool . new ( )
var tool_context : SummerDayToolContext # Provided by plugin root.
2021-11-18 17:23:37 +01:00
func _ready ( ) :
2021-11-21 11:46:04 +01:00
tool_context . canvas_state = canvas_state
2021-11-20 11:38:50 +01:00
canvas_state . connect ( " view_transform_changed " ,
2021-12-05 11:21:58 +01:00
self , " _on_view_transform_changed " )
2021-11-18 17:23:37 +01:00
2021-11-25 18:26:56 +01:00
func _gui_input ( event ) :
tool_pool . run_most_prior ( event , tool_context )
2021-12-04 13:47:14 +01:00
# _gui_input() cannot receive screen touch released event so we do this here.
2021-11-21 11:46:04 +01:00
func _input ( event ) :
2021-11-25 18:26:56 +01:00
if event is InputEventScreenTouch and ! event . is_pressed ( ) :
2021-11-21 11:46:04 +01:00
tool_pool . run_most_prior ( event , tool_context )
2021-11-18 17:23:37 +01:00
func _on_SummerDay_scene_changed ( new_scene ) :
scene = new_scene
2021-11-20 11:38:50 +01:00
canvas_state . update_fill_transform ( scene )
2021-11-19 21:05:44 +01:00
scene . connect ( " aspect_ratio_changed " ,
self , " _on_scene_aspect_ratio_changed " )
2021-12-05 11:21:58 +01:00
canvas_state . connect ( " canvas_polygon_changed " ,
self , " _on_canvas_polygon_changed " )
2021-11-21 11:46:04 +01:00
$ Render / Label . text = str ( scene ) + " \n " + str ( scene . aspect_ratio )
canvas_state . update_fill_transform ( scene )
2021-11-18 17:23:37 +01:00
func _on_Canvas_resized ( ) :
2021-11-20 11:38:50 +01:00
canvas_state . rect_size = rect_size
2021-12-04 13:47:14 +01:00
canvas_state . update_canvas_to_clip_space ( )
2021-11-20 11:38:50 +01:00
canvas_state . update_fill_transform ( scene )
2021-11-19 21:05:44 +01:00
func _on_scene_aspect_ratio_changed ( new_aspect_ratio ) :
2021-11-20 11:38:50 +01:00
canvas_state . update_fill_transform ( scene )
2021-12-04 13:47:14 +01:00
2021-12-05 11:21:58 +01:00
func _on_view_transform_changed ( canvas_transform , spatial_transform ) :
var canvas_transform_listeners = get_tree ( ) . get_nodes_in_group (
" ListenForCanvasTransform "
)
for i in canvas_transform_listeners :
if i is Viewport :
i . canvas_transform = canvas_transform
var spatial_transform_listeners = get_tree ( ) . get_nodes_in_group (
" ListenForSpatialTransform "
)
for i in spatial_transform_listeners :
2021-12-04 13:47:14 +01:00
var basis = Basis (
2021-12-05 11:21:58 +01:00
Vector3 ( spatial_transform . x . x , spatial_transform . x . y , 0.0 ) ,
Vector3 ( spatial_transform . y . x , spatial_transform . y . y , 0.0 ) ,
Vector3 ( spatial_transform . origin . x , spatial_transform . origin . y , 1.0 )
2021-12-04 13:47:14 +01:00
)
i . get_material ( ) . set_shader_param ( " canvas_transform " , basis )
2021-12-05 11:21:58 +01:00
func _on_canvas_polygon_changed ( new_polygon ) :
var listeners = get_tree ( ) . get_nodes_in_group ( " CanvasPolygon " )
for i in listeners :
i . polygon = new_polygon