Added shadow on all objects outside the canvas.
This commit is contained in:
parent
68d8e00922
commit
79228c9462
|
@ -4,4 +4,4 @@
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
aspect_ratio = Vector2( 13.252, 10.607 )
|
aspect_ratio = Vector2( 16.291, 11.644 )
|
||||||
|
|
12
Main.tscn
12
Main.tscn
|
@ -38,7 +38,7 @@ shader = SubResource( 1 )
|
||||||
shader_param/albedo = Color( 0.768627, 0.231373, 0.231373, 1 )
|
shader_param/albedo = Color( 0.768627, 0.231373, 0.231373, 1 )
|
||||||
shader_param/ha = null
|
shader_param/ha = null
|
||||||
|
|
||||||
[sub_resource type="Image" id=20]
|
[sub_resource type="Image" id=17]
|
||||||
data = {
|
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 ),
|
"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",
|
"format": "RGBAFloat",
|
||||||
|
@ -50,7 +50,7 @@ data = {
|
||||||
[sub_resource type="ImageTexture" id=16]
|
[sub_resource type="ImageTexture" id=16]
|
||||||
flags = 0
|
flags = 0
|
||||||
flags = 0
|
flags = 0
|
||||||
image = SubResource( 20 )
|
image = SubResource( 17 )
|
||||||
size = Vector2( 8, 1 )
|
size = Vector2( 8, 1 )
|
||||||
|
|
||||||
[sub_resource type="CapsuleMesh" id=5]
|
[sub_resource type="CapsuleMesh" id=5]
|
||||||
|
@ -105,7 +105,7 @@ void fragment() {
|
||||||
ALBEDO = texture(table, UV).rgb;
|
ALBEDO = texture(table, UV).rgb;
|
||||||
}"
|
}"
|
||||||
|
|
||||||
[sub_resource type="Image" id=21]
|
[sub_resource type="Image" id=18]
|
||||||
data = {
|
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 ),
|
"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",
|
"format": "RGBAFloat",
|
||||||
|
@ -117,12 +117,12 @@ data = {
|
||||||
[sub_resource type="ImageTexture" id=19]
|
[sub_resource type="ImageTexture" id=19]
|
||||||
flags = 0
|
flags = 0
|
||||||
flags = 0
|
flags = 0
|
||||||
image = SubResource( 21 )
|
image = SubResource( 18 )
|
||||||
size = Vector2( 8, 1 )
|
size = Vector2( 8, 1 )
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id=7]
|
[sub_resource type="ShaderMaterial" id=7]
|
||||||
shader = SubResource( 6 )
|
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 )
|
shader_param/table = SubResource( 19 )
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id=8]
|
[sub_resource type="QuadMesh" id=8]
|
||||||
|
@ -186,7 +186,7 @@ visible = false
|
||||||
opacity = 0.15
|
opacity = 0.15
|
||||||
texture = ExtResource( 3 )
|
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 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.401247, 0.829002, -0.735263 )
|
||||||
mesh = SubResource( 5 )
|
mesh = SubResource( 5 )
|
||||||
material = SubResource( 7 )
|
material = SubResource( 7 )
|
||||||
|
|
|
@ -12,9 +12,7 @@ var tool_context: SummerDayToolContext # Provided by plugin root.
|
||||||
func _ready():
|
func _ready():
|
||||||
tool_context.canvas_state = canvas_state
|
tool_context.canvas_state = canvas_state
|
||||||
canvas_state.connect("view_transform_changed",
|
canvas_state.connect("view_transform_changed",
|
||||||
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
|
self, "_on_view_transform_changed")
|
||||||
canvas_state.connect("clip_space_view_transform_changed",
|
|
||||||
self, "_on_clip_space_view_transform_changed")
|
|
||||||
|
|
||||||
|
|
||||||
func _gui_input(event):
|
func _gui_input(event):
|
||||||
|
@ -32,8 +30,9 @@ func _on_SummerDay_scene_changed(new_scene):
|
||||||
canvas_state.update_fill_transform(scene)
|
canvas_state.update_fill_transform(scene)
|
||||||
scene.connect("aspect_ratio_changed",
|
scene.connect("aspect_ratio_changed",
|
||||||
self, "_on_scene_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/Label.text = str(scene) + "\n" + str(scene.aspect_ratio)
|
||||||
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
|
|
||||||
canvas_state.update_fill_transform(scene)
|
canvas_state.update_fill_transform(scene)
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,19 +43,30 @@ func _on_Canvas_resized():
|
||||||
|
|
||||||
|
|
||||||
func _on_scene_aspect_ratio_changed(new_aspect_ratio):
|
func _on_scene_aspect_ratio_changed(new_aspect_ratio):
|
||||||
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
|
|
||||||
canvas_state.update_fill_transform(scene)
|
canvas_state.update_fill_transform(scene)
|
||||||
|
|
||||||
|
|
||||||
func _on_clip_space_view_transform_changed(new_transform):
|
func _on_view_transform_changed(canvas_transform, spatial_transform):
|
||||||
var listeners = get_tree().get_nodes_in_group("ListenForTransformUpdate")
|
var canvas_transform_listeners = get_tree().get_nodes_in_group(
|
||||||
for i in listeners:
|
"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(
|
var basis = Basis(
|
||||||
Vector3(new_transform.x.x, new_transform.x.y, 0.0),
|
Vector3(spatial_transform.x.x, spatial_transform.x.y, 0.0),
|
||||||
Vector3(new_transform.y.x, new_transform.y.y, 0.0),
|
Vector3(spatial_transform.y.x, spatial_transform.y.y, 0.0),
|
||||||
Vector3(new_transform.origin.x, new_transform.origin.y, 1.0)
|
Vector3(spatial_transform.origin.x, spatial_transform.origin.y, 1.0)
|
||||||
)
|
)
|
||||||
i.get_material().set_shader_param("canvas_transform", basis)
|
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
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
[ext_resource path="res://addons/summer_day/tool/canvas/canvas.gd" type="Script" id=1]
|
[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://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]
|
[sub_resource type="StyleBoxFlat" id=3]
|
||||||
bg_color = Color( 0.180392, 0.172549, 0.203922, 1 )
|
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]
|
[sub_resource type="World" id=2]
|
||||||
environment = SubResource( 1 )
|
environment = SubResource( 1 )
|
||||||
|
|
||||||
|
[sub_resource type="CanvasItemMaterial" id=5]
|
||||||
|
blend_mode = 3
|
||||||
|
|
||||||
[node name="Canvas" type="PanelContainer"]
|
[node name="Canvas" type="PanelContainer"]
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
|
@ -48,7 +50,7 @@ __meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_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 = Vector2( 998, 574 )
|
||||||
size_override_stretch = true
|
size_override_stretch = true
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
|
@ -57,10 +59,10 @@ usage = 0
|
||||||
render_target_update_mode = 3
|
render_target_update_mode = 3
|
||||||
gui_disable_input = true
|
gui_disable_input = true
|
||||||
|
|
||||||
[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer"]
|
[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer" groups=["CanvasPolygon"]]
|
||||||
script = ExtResource( 3 )
|
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 )
|
size = Vector2( 998, 574 )
|
||||||
world = SubResource( 2 )
|
world = SubResource( 2 )
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
|
@ -70,7 +72,14 @@ gui_disable_input = true
|
||||||
|
|
||||||
[node name="Main" parent="Render/RenderLayer" instance=ExtResource( 2 )]
|
[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 )
|
size = Vector2( 998, 574 )
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
|
|
|
@ -4,7 +4,8 @@ class_name SummerDayCanvasState
|
||||||
signal fill_transform_changed(fill_transform)
|
signal fill_transform_changed(fill_transform)
|
||||||
signal canvas_transform_changed(canvas_transform)
|
signal canvas_transform_changed(canvas_transform)
|
||||||
signal view_transform_changed(view_transform)
|
signal view_transform_changed(view_transform)
|
||||||
signal clip_space_view_transform_changed(view_transform)
|
|
||||||
|
signal canvas_polygon_changed(polygon)
|
||||||
|
|
||||||
var rect_size: Vector2
|
var rect_size: Vector2
|
||||||
|
|
||||||
|
@ -12,16 +13,19 @@ var fill_transform := Transform2D.IDENTITY
|
||||||
var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform
|
var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform
|
||||||
var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform
|
var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform
|
||||||
|
|
||||||
|
# For spacial transform.
|
||||||
var clip_space_view_transform := Transform2D.IDENTITY
|
var clip_space_view_transform := Transform2D.IDENTITY
|
||||||
var canvas_to_clip_space := Transform2D.IDENTITY
|
var canvas_to_clip_space := Transform2D.IDENTITY
|
||||||
|
|
||||||
|
var _canvas_polygon: PoolVector2Array # The polygon, that forms the canvas rect.
|
||||||
|
|
||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
connect("fill_transform_changed", self, "_update_view_transformation")
|
connect("fill_transform_changed", self, "_update_view_transformation")
|
||||||
connect("canvas_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:
|
if scene == null:
|
||||||
fill_transform = Transform2D.IDENTITY
|
fill_transform = Transform2D.IDENTITY
|
||||||
else:
|
else:
|
||||||
|
@ -45,6 +49,9 @@ func update_fill_transform(scene):
|
||||||
Vector2(0.0, scale),
|
Vector2(0.0, scale),
|
||||||
translation
|
translation
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_update_canvas_polygon(scene)
|
||||||
|
|
||||||
emit_signal("fill_transform_changed", fill_transform)
|
emit_signal("fill_transform_changed", fill_transform)
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,16 +65,29 @@ func update_canvas_to_clip_space():
|
||||||
|
|
||||||
func _update_view_transformation(transform):
|
func _update_view_transformation(transform):
|
||||||
view_transform = canvas_transform * fill_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 = 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(
|
||||||
emit_signal("view_transform_changed", view_transform)
|
"view_transform_changed", view_transform, clip_space_view_transform
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
func _set_canvas_transform(new_canvas_transform):
|
func _set_canvas_transform(new_canvas_transform):
|
||||||
canvas_transform = new_canvas_transform
|
canvas_transform = new_canvas_transform
|
||||||
emit_signal("canvas_transform_changed", 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)
|
||||||
|
|
|
@ -18,6 +18,3 @@ func update_size(scene: SummerDayScene):
|
||||||
Vector2(0.0, 1.0)
|
Vector2(0.0, 1.0)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
func _on_view_transform_changed(new_view_transform):
|
|
||||||
transform = new_view_transform
|
|
||||||
|
|
|
@ -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
|
|
@ -109,6 +109,11 @@ _global_script_classes=[ {
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://addons/summer_day/tool/tool_system/tool_pool.gd"
|
"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",
|
"base": "SummerDayTool",
|
||||||
"class": "SummerDayZoomCanvasTool",
|
"class": "SummerDayZoomCanvasTool",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
|
@ -140,6 +145,7 @@ _global_script_class_icons={
|
||||||
"SummerDayTool": "",
|
"SummerDayTool": "",
|
||||||
"SummerDayToolContext": "",
|
"SummerDayToolContext": "",
|
||||||
"SummerDayToolPool": "",
|
"SummerDayToolPool": "",
|
||||||
|
"SummerDayViewportHandler": "",
|
||||||
"SummerDayZoomCanvasTool": "",
|
"SummerDayZoomCanvasTool": "",
|
||||||
"VeryWorse": ""
|
"VeryWorse": ""
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user