fake_parallax.gd 737 B

123456789101112131415161718192021
  1. @tool
  2. class_name FakeParallax
  3. extends Node2D
  4. @export var rate = 0.0
  5. @onready var base_position = get_position()
  6. @onready var camera = get_tree().get_root().find_child("Camera", true, false)
  7. var notifier: VisibleOnScreenNotifier2D = VisibleOnScreenNotifier2D.new()
  8. func _ready():
  9. if camera and !Engine.is_editor_hint():
  10. notifier.set_rect(Rect2(Vector2(-1920.0, -1080.0), Vector2(3840.0, 2160.0)))
  11. add_child(notifier)
  12. camera.connect("camera_moved", _update)
  13. _update(true)
  14. func _update(force: bool = false):
  15. if force or notifier.is_on_screen():
  16. if camera:
  17. var delta = camera.get_screen_center_position() - base_position
  18. set_position(base_position + delta * rate)