| 123456789101112131415161718192021222324252627282930313233343536373839 |
- class_name UpsideDownGravityArea
- extends PlayerDetection
- var players_inside: Array[Player] = []
- @export var polygon: CollisionPolygon2D
- @export var enable_low_gravity := true
- var low_gravity := false
- @export var new_vector := Vector2.UP
- func _physics_process(_delta: float) -> void:
- for i in get_tree().get_nodes_in_group("Players"):
- if Geometry2D.is_point_in_polygon(polygon.to_local(i.global_position), polygon.polygon):
- if players_inside.has(i) == false:
- players_inside.append(i)
- on_player_entered(i)
- else:
- if players_inside.has(i):
- players_inside.erase(i)
- on_player_exited(i)
- func on_player_entered(player: Player) -> void:
- low_gravity = player.low_gravity
- player.gravity_vector = new_vector
- player.low_gravity = enable_low_gravity
- player.global_position.y -= 16
- player.global_rotation = -player.gravity_vector.angle() + deg_to_rad(90)
- player.reset_physics_interpolation()
- func on_player_exited(player: Player) -> void:
- player.gravity_vector = Vector2.DOWN
- player.low_gravity = low_gravity
- player.global_position.y += 16
- player.velocity.y *= 1.1
- player.global_rotation = -player.gravity_vector.angle() + deg_to_rad(90)
- player.reset_physics_interpolation()
|