2021-11-20 11:38:50 +01:00
extends Resource
class_name SummerDayCanvasState
signal fill_transform_changed ( fill_transform )
signal canvas_transform_changed ( canvas_transform )
signal view_transform_changed ( view_transform )
2021-12-04 13:47:14 +01:00
signal clip_space_view_transform_changed ( view_transform )
2021-11-20 11:38:50 +01:00
var rect_size : Vector2
var fill_transform : = Transform2D . IDENTITY
2021-11-21 11:46:04 +01:00
var canvas_transform : = Transform2D . IDENTITY setget _set_canvas_transform
2021-12-04 13:47:14 +01:00
var view_transform : = Transform2D . IDENTITY # canvas_transform * fill_transform
var clip_space_view_transform : = Transform2D . IDENTITY
var canvas_to_clip_space : = Transform2D . IDENTITY
2021-11-20 11:38:50 +01:00
func _init ( ) :
connect ( " fill_transform_changed " , self , " _update_view_transformation " )
connect ( " canvas_transform_changed " , self , " _update_view_transformation " )
func update_fill_transform ( scene ) :
if scene == null :
fill_transform = Transform2D . IDENTITY
else :
var aspect_ratio = scene . aspect_ratio . x / scene . aspect_ratio . y
var size_ratio = rect_size . x / rect_size . y
var scale
var translation = Vector2 . ZERO
if aspect_ratio < = size_ratio :
scale = rect_size . y
translation . x = rect_size . x * 0.5 - aspect_ratio * scale * 0.5
else :
scale = rect_size . x / aspect_ratio
translation . y = rect_size . y * 0.5 - scale * 0.5
fill_transform = Transform2D . IDENTITY . scaled ( Vector2 ( scale , scale ) )
fill_transform = fill_transform . translated ( translation )
fill_transform = Transform2D (
Vector2 ( scale , 0.0 ) ,
Vector2 ( 0.0 , scale ) ,
translation
)
emit_signal ( " fill_transform_changed " , fill_transform )
2021-12-04 13:47:14 +01:00
func update_canvas_to_clip_space ( ) :
canvas_to_clip_space = Transform2D (
Vector2 ( 2.0 / rect_size . x , 0.0 ) ,
Vector2 ( 0.0 , - 2.0 / rect_size . y ) ,
Vector2 ( - 1.0 , 1.0 )
)
2021-11-20 11:38:50 +01:00
func _update_view_transformation ( transform ) :
2021-11-21 11:46:04 +01:00
view_transform = canvas_transform * fill_transform
2021-12-04 13:47:14 +01:00
# var off_view_transform = view_transform
# var offset = off_view_transform.origin
# off_view_transform.origin = Vector2.ZERO
clip_space_view_transform = canvas_to_clip_space * view_transform
# clip_space_view_transform.origin = offset
emit_signal ( " clip_space_view_transform_changed " , clip_space_view_transform )
2021-11-20 11:38:50 +01:00
emit_signal ( " view_transform_changed " , view_transform )
2021-11-21 11:46:04 +01:00
func _set_canvas_transform ( new_canvas_transform ) :
canvas_transform = new_canvas_transform
emit_signal ( " canvas_transform_changed " , canvas_transform )