From 9814051fc4479ac86eee6b914f5b21eb50faa43d Mon Sep 17 00:00:00 2001 From: Mono Date: Sat, 20 Nov 2021 11:38:50 +0100 Subject: [PATCH] Seperated canvas and canvas_state for better tool implementation. --- Bullshit/scene_073.tres | 2 +- addons/summer_day/tool/canvas/canvas.gd | 59 +++---------------- addons/summer_day/tool/canvas/canvas.tscn | 4 +- addons/summer_day/tool/canvas/canvas_state.gd | 55 +++++++++++++++++ .../tool/canvas/empty_canvas_layer.gd | 22 ------- .../canvas/rendering/empty_canvas_layer.gd | 23 ++++++++ .../tool/canvas/tool_system/base_tool.gd | 10 ++++ .../canvas/tool_system/general_use/hand.gd | 4 ++ .../tool/canvas/tool_system/tool_context.gd | 15 +++++ project.godot | 24 ++++++++ 10 files changed, 140 insertions(+), 78 deletions(-) create mode 100644 addons/summer_day/tool/canvas/canvas_state.gd delete mode 100644 addons/summer_day/tool/canvas/empty_canvas_layer.gd create mode 100644 addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd create mode 100644 addons/summer_day/tool/canvas/tool_system/base_tool.gd create mode 100644 addons/summer_day/tool/canvas/tool_system/general_use/hand.gd create mode 100644 addons/summer_day/tool/canvas/tool_system/tool_context.gd diff --git a/Bullshit/scene_073.tres b/Bullshit/scene_073.tres index dd73e7a..fa49505 100644 --- a/Bullshit/scene_073.tres +++ b/Bullshit/scene_073.tres @@ -4,4 +4,4 @@ [resource] script = ExtResource( 1 ) -aspect_ratio = Vector2( 16, 9 ) +aspect_ratio = Vector2( 20.169, 14.308 ) diff --git a/addons/summer_day/tool/canvas/canvas.gd b/addons/summer_day/tool/canvas/canvas.gd index ce957ec..9b85b42 100644 --- a/addons/summer_day/tool/canvas/canvas.gd +++ b/addons/summer_day/tool/canvas/canvas.gd @@ -2,21 +2,12 @@ tool extends Control class_name SummerDayCanvas - -signal fill_transform_changed(fill_transform) -signal canvas_transform_changed(canvas_transform) -signal view_transform_changed(view_transform) - - var scene: SummerDayScene - -var fill_transform := Transform2D.IDENTITY -var canvas_transform := Transform2D.IDENTITY -var view_transform := Transform2D.IDENTITY # fill_transform * canvas_transform +var canvas_state := SummerDayCanvasState.new() func _ready(): - connect("view_transform_changed", + canvas_state.connect("view_transform_changed", $BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed") @@ -29,53 +20,17 @@ func _gui_input(event): func _on_SummerDay_scene_changed(new_scene): scene = new_scene - _update_fill_transform() + canvas_state.update_fill_transform(scene) scene.connect("aspect_ratio_changed", self, "_on_scene_aspect_ratio_changed") $Label.text = str(scene) + "\n" + str(scene.aspect_ratio) func _on_Canvas_resized(): - _update_fill_transform() + canvas_state.rect_size = rect_size + canvas_state.update_fill_transform(scene) func _on_scene_aspect_ratio_changed(new_aspect_ratio): - $BackgroundLayer/EmptyCanvasLayer._update_size(new_aspect_ratio) - _update_fill_transform() - - -func _update_fill_transform(): - 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): - view_transform = fill_transform * canvas_transform - emit_signal("view_transform_changed", view_transform) + $BackgroundLayer/EmptyCanvasLayer.update_size(scene) + canvas_state.update_fill_transform(scene) diff --git a/addons/summer_day/tool/canvas/canvas.tscn b/addons/summer_day/tool/canvas/canvas.tscn index aa4f5b7..06aa3e2 100644 --- a/addons/summer_day/tool/canvas/canvas.tscn +++ b/addons/summer_day/tool/canvas/canvas.tscn @@ -2,7 +2,7 @@ [ext_resource path="res://addons/summer_day/tool/canvas/canvas.gd" type="Script" id=1] [ext_resource path="res://Main.tscn" type="PackedScene" id=2] -[ext_resource path="res://addons/summer_day/tool/canvas/empty_canvas_layer.gd" type="Script" id=3] +[ext_resource path="res://addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd" type="Script" id=3] [sub_resource type="Environment" id=1] ambient_light_color = Color( 1, 1, 1, 1 ) @@ -74,6 +74,4 @@ script = SubResource( 3 ) margin_right = 40.0 margin_bottom = 14.0 -[connection signal="canvas_transform_changed" from="." to="." method="_update_view_transformation"] -[connection signal="fill_transform_changed" from="." to="." method="_update_view_transformation"] [connection signal="resized" from="." to="." method="_on_Canvas_resized"] diff --git a/addons/summer_day/tool/canvas/canvas_state.gd b/addons/summer_day/tool/canvas/canvas_state.gd new file mode 100644 index 0000000..46cd617 --- /dev/null +++ b/addons/summer_day/tool/canvas/canvas_state.gd @@ -0,0 +1,55 @@ +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) diff --git a/addons/summer_day/tool/canvas/empty_canvas_layer.gd b/addons/summer_day/tool/canvas/empty_canvas_layer.gd deleted file mode 100644 index b0b7f47..0000000 --- a/addons/summer_day/tool/canvas/empty_canvas_layer.gd +++ /dev/null @@ -1,22 +0,0 @@ -tool -extends Polygon2D - - -func _ready(): - pass - - -func _update_size(new_aspect_ratio): - print("We got here") - var calculated_aspect_ratio = new_aspect_ratio.x / new_aspect_ratio.y - polygon = PoolVector2Array( - [ - Vector2.ZERO, - Vector2(calculated_aspect_ratio, 0.0), - Vector2(calculated_aspect_ratio, 1.0), - Vector2(0.0, 1.0) - ] - ) - -func _on_view_transform_changed(new_view_transform): - transform = new_view_transform diff --git a/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd b/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd new file mode 100644 index 0000000..e258f6d --- /dev/null +++ b/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd @@ -0,0 +1,23 @@ +tool +extends Polygon2D + + +func _ready(): + pass + + +func update_size(scene: SummerDayScene): + if scene == null: + polygon = PoolVector2Array() + return + polygon = PoolVector2Array( + [ + Vector2.ZERO, + Vector2(scene.raw_aspect_ratio, 0.0), + Vector2(scene.raw_aspect_ratio, 1.0), + Vector2(0.0, 1.0) + ] + ) + +func _on_view_transform_changed(new_view_transform): + transform = new_view_transform diff --git a/addons/summer_day/tool/canvas/tool_system/base_tool.gd b/addons/summer_day/tool/canvas/tool_system/base_tool.gd new file mode 100644 index 0000000..5c2d894 --- /dev/null +++ b/addons/summer_day/tool/canvas/tool_system/base_tool.gd @@ -0,0 +1,10 @@ +extends Reference +class_name SummerDayBaseTool + + +func _check_if_chosen(input) -> int: # Virtual. + return 0 + + +func _run(tool_context): # Virtual. + pass diff --git a/addons/summer_day/tool/canvas/tool_system/general_use/hand.gd b/addons/summer_day/tool/canvas/tool_system/general_use/hand.gd new file mode 100644 index 0000000..7c55ade --- /dev/null +++ b/addons/summer_day/tool/canvas/tool_system/general_use/hand.gd @@ -0,0 +1,4 @@ +extends SummerDayBaseTool +class_name SummerDayHandTool + + diff --git a/addons/summer_day/tool/canvas/tool_system/tool_context.gd b/addons/summer_day/tool/canvas/tool_system/tool_context.gd new file mode 100644 index 0000000..a9d0ae7 --- /dev/null +++ b/addons/summer_day/tool/canvas/tool_system/tool_context.gd @@ -0,0 +1,15 @@ +extends Reference +class_name SummerDayToolContext + + +var edited_scene: SummerDayScene + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/project.godot b/project.godot index 8b19113..42ebfe8 100644 --- a/project.godot +++ b/project.godot @@ -44,11 +44,26 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://Bullshit/ScriptEditTest.gd" }, { +"base": "Reference", +"class": "SummerDayBaseTool", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/tool_system/base_tool.gd" +}, { "base": "Control", "class": "SummerDayCanvas", "language": "GDScript", "path": "res://addons/summer_day/tool/canvas/canvas.gd" }, { +"base": "Resource", +"class": "SummerDayCanvasState", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/canvas_state.gd" +}, { +"base": "SummerDayBaseTool", +"class": "SummerDayHandTool", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/tool_system/general_use/hand.gd" +}, { "base": "Control", "class": "SummerDayMainScreen", "language": "GDScript", @@ -64,6 +79,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/tool/timeline/timeline.gd" }, { +"base": "Reference", +"class": "SummerDayToolContext", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/tool_system/tool_context.gd" +}, { "base": "OH", "class": "VeryWorse", "language": "GDScript", @@ -77,10 +97,14 @@ _global_script_class_icons={ "PremiumTexture": "", "SDDisplay": "", "ScriptEditorTest": "", +"SummerDayBaseTool": "", "SummerDayCanvas": "", +"SummerDayCanvasState": "", +"SummerDayHandTool": "", "SummerDayMainScreen": "", "SummerDayScene": "", "SummerDayTimeline": "", +"SummerDayToolContext": "", "VeryWorse": "" }