56 lines
1.6 KiB
GDScript3
56 lines
1.6 KiB
GDScript3
|
extends Resource
|
||
|
class_name SummerDayCanvasState
|
||
|
|
||
|
signal fill_transform_changed(fill_transform)
|
||
|
signal canvas_transform_changed(canvas_transform)
|
||
|
signal view_transform_changed(view_transform)
|
||
|
|
||
|
var rect_size: Vector2
|
||
|
|
||
|
var fill_transform := Transform2D.IDENTITY
|
||
|
var canvas_transform := Transform2D.IDENTITY
|
||
|
var view_transform := Transform2D.IDENTITY # fill_transform * canvas_transform
|
||
|
|
||
|
|
||
|
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
|
||
|
print(rect_size.y)
|
||
|
translation.x = rect_size.x * 0.5 - aspect_ratio * scale * 0.5
|
||
|
print(rect_size.x * 0.5)
|
||
|
print(aspect_ratio * scale * 0.5)
|
||
|
print(translation)
|
||
|
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
|
||
|
)
|
||
|
print(fill_transform)
|
||
|
emit_signal("fill_transform_changed", fill_transform)
|
||
|
|
||
|
|
||
|
func _update_view_transformation(transform):
|
||
|
print("DoWeReach?")
|
||
|
view_transform = fill_transform * canvas_transform
|
||
|
emit_signal("view_transform_changed", view_transform)
|