diff --git a/Bullshit/scene_073.tres b/Bullshit/scene_073.tres index 0055e19..c7c6827 100644 --- a/Bullshit/scene_073.tres +++ b/Bullshit/scene_073.tres @@ -4,4 +4,4 @@ [resource] script = ExtResource( 1 ) -aspect_ratio = Vector2( 13.252, 10.607 ) +aspect_ratio = Vector2( 16.291, 11.644 ) diff --git a/Main.tscn b/Main.tscn index a828144..23d34e8 100644 --- a/Main.tscn +++ b/Main.tscn @@ -38,7 +38,7 @@ shader = SubResource( 1 ) shader_param/albedo = Color( 0.768627, 0.231373, 0.231373, 1 ) shader_param/ha = null -[sub_resource type="Image" id=20] +[sub_resource type="Image" id=17] data = { "data": PoolByteArray( 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63 ), "format": "RGBAFloat", @@ -50,7 +50,7 @@ data = { [sub_resource type="ImageTexture" id=16] flags = 0 flags = 0 -image = SubResource( 20 ) +image = SubResource( 17 ) size = Vector2( 8, 1 ) [sub_resource type="CapsuleMesh" id=5] @@ -105,7 +105,7 @@ void fragment() { ALBEDO = texture(table, UV).rgb; }" -[sub_resource type="Image" id=21] +[sub_resource type="Image" id=18] data = { "data": PoolByteArray( 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63 ), "format": "RGBAFloat", @@ -117,12 +117,12 @@ data = { [sub_resource type="ImageTexture" id=19] flags = 0 flags = 0 -image = SubResource( 21 ) +image = SubResource( 18 ) size = Vector2( 8, 1 ) [sub_resource type="ShaderMaterial" id=7] shader = SubResource( 6 ) -shader_param/canvas_transform = Basis( 0.0194222, -0.293236, -1.35872, -0.545418, -0.0361252, 0.406385, 0, 0, 1 ) +shader_param/canvas_transform = Basis( 0.486942, -0.0451413, -0.453712, -0.0795491, -0.858099, 0.370417, 0, 0, 1 ) shader_param/table = SubResource( 19 ) [sub_resource type="QuadMesh" id=8] @@ -186,7 +186,7 @@ visible = false opacity = 0.15 texture = ExtResource( 3 ) -[node name="CSGBox" type="CSGMesh" parent="." groups=["ListenForTransformUpdate"]] +[node name="CSGBox" type="CSGMesh" parent="." groups=["ListenForSpatialTransform"]] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.401247, 0.829002, -0.735263 ) mesh = SubResource( 5 ) material = SubResource( 7 ) diff --git a/addons/summer_day/tool/canvas/canvas.gd b/addons/summer_day/tool/canvas/canvas.gd index 2a63519..a45886c 100644 --- a/addons/summer_day/tool/canvas/canvas.gd +++ b/addons/summer_day/tool/canvas/canvas.gd @@ -12,9 +12,7 @@ var tool_context: SummerDayToolContext # Provided by plugin root. func _ready(): tool_context.canvas_state = canvas_state canvas_state.connect("view_transform_changed", - $Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed") - canvas_state.connect("clip_space_view_transform_changed", - self, "_on_clip_space_view_transform_changed") + self, "_on_view_transform_changed") func _gui_input(event): @@ -32,8 +30,9 @@ func _on_SummerDay_scene_changed(new_scene): canvas_state.update_fill_transform(scene) scene.connect("aspect_ratio_changed", self, "_on_scene_aspect_ratio_changed") + canvas_state.connect("canvas_polygon_changed", + self, "_on_canvas_polygon_changed") $Render/Label.text = str(scene) + "\n" + str(scene.aspect_ratio) - $Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene) canvas_state.update_fill_transform(scene) @@ -44,19 +43,30 @@ func _on_Canvas_resized(): func _on_scene_aspect_ratio_changed(new_aspect_ratio): - $Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene) canvas_state.update_fill_transform(scene) -func _on_clip_space_view_transform_changed(new_transform): - var listeners = get_tree().get_nodes_in_group("ListenForTransformUpdate") - for i in listeners: +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: var basis = Basis( - Vector3(new_transform.x.x, new_transform.x.y, 0.0), - Vector3(new_transform.y.x, new_transform.y.y, 0.0), - Vector3(new_transform.origin.x, new_transform.origin.y, 1.0) + 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) ) i.get_material().set_shader_param("canvas_transform", basis) - #print(i.get_material().get_shader_param("canvas_transform")) +func _on_canvas_polygon_changed(new_polygon): + var listeners = get_tree().get_nodes_in_group("CanvasPolygon") + for i in listeners: + i.polygon = new_polygon diff --git a/addons/summer_day/tool/canvas/canvas.tscn b/addons/summer_day/tool/canvas/canvas.tscn index 0aed3d3..8d8099c 100644 --- a/addons/summer_day/tool/canvas/canvas.tscn +++ b/addons/summer_day/tool/canvas/canvas.tscn @@ -2,7 +2,6 @@ [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/rendering/empty_canvas_layer.gd" type="Script" id=3] [sub_resource type="StyleBoxFlat" id=3] bg_color = Color( 0.180392, 0.172549, 0.203922, 1 ) @@ -22,6 +21,9 @@ ambient_light_color = Color( 1, 1, 1, 1 ) [sub_resource type="World" id=2] environment = SubResource( 1 ) +[sub_resource type="CanvasItemMaterial" id=5] +blend_mode = 3 + [node name="Canvas" type="PanelContainer"] anchor_right = 1.0 anchor_bottom = 1.0 @@ -48,7 +50,7 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="BackgroundLayer" type="Viewport" parent="Render"] +[node name="BackgroundLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]] size = Vector2( 998, 574 ) size_override_stretch = true transparent_bg = true @@ -57,10 +59,10 @@ usage = 0 render_target_update_mode = 3 gui_disable_input = true -[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer"] -script = ExtResource( 3 ) +[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer" groups=["CanvasPolygon"]] +polygon = PoolVector2Array( 0, 0, 1.39909, 0, 1.39909, 1, 0, 1 ) -[node name="RenderLayer" type="Viewport" parent="Render"] +[node name="RenderLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]] size = Vector2( 998, 574 ) world = SubResource( 2 ) transparent_bg = true @@ -70,7 +72,14 @@ gui_disable_input = true [node name="Main" parent="Render/RenderLayer" instance=ExtResource( 2 )] -[node name="ForegroundLayer" type="Viewport" parent="Render"] +[node name="BorderShadow" type="Polygon2D" parent="Render/RenderLayer" groups=["CanvasPolygon"]] +material = SubResource( 5 ) +color = Color( 0.611765, 0.611765, 0.611765, 1 ) +invert_enable = true +invert_border = 1000.0 +polygon = PoolVector2Array( 0, 0, 1.39909, 0, 1.39909, 1, 0, 1 ) + +[node name="ForegroundLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]] size = Vector2( 998, 574 ) transparent_bg = true handle_input_locally = false diff --git a/addons/summer_day/tool/canvas/canvas_state.gd b/addons/summer_day/tool/canvas/canvas_state.gd index dbb0a2b..a833e3f 100644 --- a/addons/summer_day/tool/canvas/canvas_state.gd +++ b/addons/summer_day/tool/canvas/canvas_state.gd @@ -4,7 +4,8 @@ class_name SummerDayCanvasState signal fill_transform_changed(fill_transform) signal canvas_transform_changed(canvas_transform) signal view_transform_changed(view_transform) -signal clip_space_view_transform_changed(view_transform) + +signal canvas_polygon_changed(polygon) var rect_size: Vector2 @@ -12,16 +13,19 @@ var fill_transform := Transform2D.IDENTITY var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform +# For spacial transform. var clip_space_view_transform := Transform2D.IDENTITY var canvas_to_clip_space := Transform2D.IDENTITY +var _canvas_polygon: PoolVector2Array # The polygon, that forms the canvas rect. + func _init(): connect("fill_transform_changed", self, "_update_view_transformation") connect("canvas_transform_changed", self, "_update_view_transformation") -func update_fill_transform(scene): +func update_fill_transform(scene: SummerDayScene): if scene == null: fill_transform = Transform2D.IDENTITY else: @@ -45,6 +49,9 @@ func update_fill_transform(scene): Vector2(0.0, scale), translation ) + + _update_canvas_polygon(scene) + emit_signal("fill_transform_changed", fill_transform) @@ -58,16 +65,29 @@ func update_canvas_to_clip_space(): func _update_view_transformation(transform): view_transform = canvas_transform * fill_transform -# 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) - emit_signal("view_transform_changed", view_transform) + emit_signal( + "view_transform_changed", view_transform, clip_space_view_transform + ) func _set_canvas_transform(new_canvas_transform): canvas_transform = new_canvas_transform emit_signal("canvas_transform_changed", canvas_transform) + + +func _update_canvas_polygon(scene: SummerDayScene): + if scene == null: + _canvas_polygon = PoolVector2Array() + return + _canvas_polygon = PoolVector2Array( + [ + Vector2.ZERO, + Vector2(scene.raw_aspect_ratio, 0.0), + Vector2(scene.raw_aspect_ratio, 1.0), + Vector2(0.0, 1.0) + ] + ) + + emit_signal("canvas_polygon_changed", _canvas_polygon) diff --git a/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd b/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd index e258f6d..f4c9c75 100644 --- a/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd +++ b/addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd @@ -18,6 +18,3 @@ func update_size(scene: SummerDayScene): 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/viewport_handler.gd b/addons/summer_day/tool/canvas/rendering/viewport_handler.gd new file mode 100644 index 0000000..e383fb0 --- /dev/null +++ b/addons/summer_day/tool/canvas/rendering/viewport_handler.gd @@ -0,0 +1,11 @@ +extends Viewport +class_name SummerDayViewportHandler + + +func _ready(): + pass + + +# Connect from CanvasState. +func _on_view_transform_changed(view_transform, clip_space_view_transform): + canvas_transform = view_transform diff --git a/project.godot b/project.godot index 260adad..fe2c751 100644 --- a/project.godot +++ b/project.godot @@ -109,6 +109,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/tool/tool_system/tool_pool.gd" }, { +"base": "Viewport", +"class": "SummerDayViewportHandler", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/rendering/viewport_handler.gd" +}, { "base": "SummerDayTool", "class": "SummerDayZoomCanvasTool", "language": "GDScript", @@ -140,6 +145,7 @@ _global_script_class_icons={ "SummerDayTool": "", "SummerDayToolContext": "", "SummerDayToolPool": "", +"SummerDayViewportHandler": "", "SummerDayZoomCanvasTool": "", "VeryWorse": "" }