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
2021-12-21 21:40:04 +01:00
onready var MeshContainer : = $ Render / RenderLayer / Container
2022-01-02 16:42:55 +01:00
onready var InteractionHint : = $ Render / RenderLayer / InteractionHint
2021-12-21 21:40:04 +01:00
2021-12-15 20:58:46 +01:00
var document : SummerDayDocument
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 ( )
2021-11-18 17:23:37 +01:00
func _ready ( ) :
2022-01-02 16:42:55 +01:00
SummerDay . canvas_state = canvas_state
SummerDay . interaction_hint = InteractionHint
2022-01-11 14:13:56 +01:00
SummerDay . debug_info = $ Render / DebugInfo
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-12-15 20:58:46 +01:00
canvas_state . connect ( " canvas_polygon_changed " ,
self , " _on_canvas_polygon_changed " )
2021-11-18 17:23:37 +01:00
2021-11-25 18:26:56 +01:00
func _gui_input ( event ) :
2022-01-02 16:42:55 +01:00
tool_pool . run_most_prior ( event )
2021-11-25 18:26:56 +01:00
2021-12-12 17:04:17 +01:00
# _gui_input() cannot receive screen touch released event by itself.
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-12-12 17:04:17 +01:00
_gui_input ( event )
2021-12-15 20:58:46 +01:00
tool_pool . pass_global_input ( event )
func can_drop_data ( position , data ) :
return data . has ( " files " )
func drop_data ( position , data ) :
var file_path = data [ " files " ] [ 0 ]
var instance = load ( file_path )
if instance is SummerDayBlueprint :
2022-01-02 16:42:55 +01:00
SummerDay . document . add_track ( instance )
2021-12-15 20:58:46 +01:00
func _on_SummerDay_document_changed ( new_doc ) :
2022-01-02 16:42:55 +01:00
new_doc . connect ( " track_added " ,
MeshContainer , " _on_Document_add_track " )
2022-01-03 23:53:28 +01:00
new_doc . setup ( )
2022-01-02 16:42:55 +01:00
canvas_state . update_fill_transform ( )
new_doc . connect ( " resolution_changed " ,
self , " _on_scene_aspect_ratio_changed " )
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 ( )
2022-01-02 16:42:55 +01:00
canvas_state . update_fill_transform ( )
2021-11-19 21:05:44 +01:00
func _on_scene_aspect_ratio_changed ( new_aspect_ratio ) :
2022-01-02 16:42:55 +01:00
canvas_state . update_fill_transform ( )
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 (
2021-12-12 17:04:17 +01:00
" SummerDayCanvasTransform "
2021-12-05 11:21:58 +01:00
)
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 (
2021-12-12 17:04:17 +01:00
" SummerDaySpatialTransform "
2021-12-05 11:21:58 +01:00
)
2022-01-01 13:55:01 +01:00
for l 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
)
2022-01-01 13:55:01 +01:00
if l is MeshInstance :
var mesh = l . mesh
for i in range ( mesh . get_surface_count ( ) ) :
var mat = mesh . surface_get_material ( i )
mat . set_shader_param ( " canvas_transform " , basis )
2021-12-26 11:39:56 +01:00
else :
2022-01-03 23:53:28 +01:00
if l . has_method ( " get_material " ) :
l . get_material ( ) . set_shader_param ( " canvas_transform " , basis )
else :
l . material_override . set_shader_param ( " canvas_transform " , basis )
2021-12-04 13:47:14 +01:00
2021-12-05 11:21:58 +01:00
func _on_canvas_polygon_changed ( new_polygon ) :
2021-12-12 17:04:17 +01:00
var listeners = get_tree ( ) . get_nodes_in_group ( " SummerDayCanvasPolygon " )
2021-12-05 11:21:58 +01:00
for i in listeners :
i . polygon = new_polygon