UpsideDownGravityArea.gd 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. class_name UpsideDownGravityArea
  2. extends PlayerDetection
  3. var players_inside: Array[Player] = []
  4. @export var polygon: CollisionPolygon2D
  5. @export var enable_low_gravity := true
  6. var low_gravity := false
  7. @export var new_vector := Vector2.UP
  8. func _physics_process(_delta: float) -> void:
  9. for i in get_tree().get_nodes_in_group("Players"):
  10. if Geometry2D.is_point_in_polygon(polygon.to_local(i.global_position), polygon.polygon):
  11. if players_inside.has(i) == false:
  12. players_inside.append(i)
  13. on_player_entered(i)
  14. else:
  15. if players_inside.has(i):
  16. players_inside.erase(i)
  17. on_player_exited(i)
  18. func on_player_entered(player: Player) -> void:
  19. low_gravity = player.low_gravity
  20. player.gravity_vector = new_vector
  21. player.low_gravity = enable_low_gravity
  22. player.global_position.y -= 16
  23. player.global_rotation = -player.gravity_vector.angle() + deg_to_rad(90)
  24. player.reset_physics_interpolation()
  25. func on_player_exited(player: Player) -> void:
  26. player.gravity_vector = Vector2.DOWN
  27. player.low_gravity = low_gravity
  28. player.global_position.y += 16
  29. player.velocity.y *= 1.1
  30. player.global_rotation = -player.gravity_vector.angle() + deg_to_rad(90)
  31. player.reset_physics_interpolation()