DropShadowRendererSmooth.tscn 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. [gd_scene load_steps=5 format=3 uid="uid://d2c5ut4rtjf3p"]
  2. [ext_resource type="Script" uid="uid://cit6racuc8c60" path="res://Scripts/Parts/DropShadowRendererSmooth.gd" id="1_sh8t5"]
  3. [sub_resource type="Shader" id="Shader_xx2dm"]
  4. code = "shader_type canvas_item;
  5. uniform vec3 shadow_colour: source_color;
  6. uniform float transparency = 0.0;
  7. void fragment() {
  8. if (COLOR.a >= 0.025)
  9. {
  10. COLOR = vec4(shadow_colour.r, shadow_colour.g, shadow_colour.b, transparency * COLOR.a);
  11. }
  12. }
  13. //void light() {
  14. // Called for every pixel for every light affecting the CanvasItem.
  15. // Uncomment to replace the default light processing function with this one.
  16. //}
  17. "
  18. [sub_resource type="ShaderMaterial" id="ShaderMaterial_o48cx"]
  19. shader = SubResource("Shader_xx2dm")
  20. shader_parameter/shadow_colour = Color(0.368102, 0.368102, 0.368102, 1)
  21. shader_parameter/transparency = 0.25
  22. [sub_resource type="GDScript" id="GDScript_tdilq"]
  23. script/source = "# https://github.com/godotengine/godot/issues/77149
  24. class_name SubViewportContainerBug77149
  25. extends SubViewportContainer
  26. @export var stretch_without_bug_77149 : bool
  27. func _ready() -> void:
  28. _on_resized()
  29. get_window().size_changed.connect(_on_resized)
  30. var _dont_recurse : bool
  31. func _on_resized() -> void:
  32. assert(not stretch)
  33. if not stretch_without_bug_77149 or _dont_recurse:
  34. return
  35. var window := get_window()
  36. var viewport_size := Vector2(window.size)
  37. var reference_size := Vector2(window.content_scale_size)
  38. var viewport_scale := viewport_size / reference_size
  39. var size_scale := minf(viewport_scale.x, viewport_scale.y)
  40. var scaled_size := Vector2i((size * scale * size_scale).round()) / stretch_shrink
  41. if Vector2i(size.round()) == scaled_size:
  42. return
  43. _dont_recurse = true
  44. # we need to set the container's size first or it'll get resized by the viewport resize (ugh)
  45. scale = Vector2(1.0 / size_scale, 1.0 / size_scale)
  46. size = scaled_size
  47. for subviewport : SubViewport in find_children(\"*\", \"SubViewport\", false, false):
  48. # avoid reallocating textures we don't need to reallocate
  49. if subviewport.size != scaled_size:
  50. subviewport.size = scaled_size
  51. _dont_recurse = false
  52. "
  53. [node name="DropShadowRenderer" type="Node"]
  54. physics_interpolation_mode = 1
  55. script = ExtResource("1_sh8t5")
  56. [node name="Point" type="Node2D" parent="."]
  57. unique_name_in_owner = true
  58. physics_interpolation_mode = 1
  59. visibility_layer = 2
  60. z_index = -45
  61. position = Vector2(4, 0)
  62. [node name="Container" type="SubViewportContainer" parent="Point"]
  63. unique_name_in_owner = true
  64. physics_interpolation_mode = 1
  65. visibility_layer = 2
  66. material = SubResource("ShaderMaterial_o48cx")
  67. offset_left = -240.0
  68. offset_top = -135.0
  69. offset_right = 240.0
  70. offset_bottom = 135.0
  71. localize_numeral_system = false
  72. mouse_filter = 2
  73. script = SubResource("GDScript_tdilq")
  74. stretch_without_bug_77149 = true
  75. metadata/_edit_use_anchors_ = true
  76. [node name="SubViewport" type="SubViewport" parent="Point/Container"]
  77. unique_name_in_owner = true
  78. transparent_bg = true
  79. handle_input_locally = false
  80. canvas_item_default_texture_filter = 0
  81. canvas_cull_mask = 4293918721
  82. size = Vector2i(480, 270)
  83. size_2d_override = Vector2i(1440, 810)
  84. render_target_update_mode = 4
  85. [node name="Camera" type="Camera2D" parent="Point/Container/SubViewport"]
  86. unique_name_in_owner = true
  87. offset = Vector2(-3, -3)
  88. zoom = Vector2(3, 3)
  89. process_callback = 0