camera.gd 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. extends Camera2D
  2. signal camera_moved
  3. var SPEED = 4000
  4. var DRAG_SPEED = 4.0
  5. var ZOOM_SPEED = 12.0
  6. var max_zoom = 1.0
  7. var min_zoom = 0.15
  8. var previous_mouse_position = Vector2(-1, -1)
  9. @onready var previous_position: Vector2 = get_screen_center_position()
  10. @onready var current_zoom = get_zoom().x
  11. func _ready():
  12. update_sound_players()
  13. func _input(event: InputEvent):
  14. if event is InputEventMouseMotion and Input.is_action_pressed("screen_drag"):
  15. # if previous_mouse_position == Vector2(-1, -1):
  16. # previous_mouse_position = get_viewport().get_mouse_position()
  17. # Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
  18. #set_screen_center_position(center - event.relative * DRAG_SPEED)
  19. var pos = get_target_position() - event.relative * DRAG_SPEED
  20. set_position(pos)
  21. fix_borders()
  22. #move_local_x(-event.relative.x * DRAG_SPEED)
  23. #move_local_y(-event.relative.y * DRAG_SPEED)
  24. # elif previous_mouse_position != Vector2(-1, -1):
  25. # Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
  26. # get_viewport().warp_mouse(previous_mouse_position)
  27. # previous_mouse_position = Vector2(-1, -1)
  28. func _process(delta):
  29. #print(get_screen_center_position(), " ", get_position(), " ", get_target_position())
  30. var pos = get_tree().get_root().get_mouse_position()
  31. if pos.x < 20:
  32. #move_local_x(delta * -SPEED)
  33. pass
  34. if Input.is_action_just_released("zoom_in"):
  35. current_zoom *= (1 + delta * ZOOM_SPEED)
  36. current_zoom = min(max_zoom, current_zoom)
  37. set_zoom(Vector2(current_zoom, current_zoom))
  38. update_sound_players()
  39. fix_borders()
  40. if Input.is_action_just_released("zoom_out"):
  41. current_zoom *= (1 - delta * ZOOM_SPEED)
  42. current_zoom = max(min_zoom, current_zoom)
  43. set_zoom(Vector2(current_zoom, current_zoom))
  44. update_sound_players()
  45. fix_borders()
  46. var new_position = get_screen_center_position()
  47. if previous_position != new_position:
  48. emit_signal("camera_moved")
  49. previous_position = get_screen_center_position()
  50. func update_sound_players():
  51. var players = get_tree().get_nodes_in_group("sound_player")
  52. var dist = Vector2(DisplayServer.window_get_size()) / zoom
  53. for sound_player in players:
  54. sound_player.set_max_distance(dist.x)
  55. # Fix the camera lock being 🌠🌠 fucking stupid 🌠🌠
  56. func fix_borders():
  57. var pos = get_position()
  58. var rect = Vector2(DisplayServer.window_get_size()) / zoom
  59. pos.x = max(pos.x, limit_left + rect.x / 2.0)
  60. pos.x = min(pos.x, limit_right - rect.x / 2.0)
  61. pos.y = max(pos.y, limit_top + rect.y / 2.0)
  62. pos.y = min(pos.y, limit_bottom - rect.y / 2.0)
  63. set_position(pos)