OnOffFanRed.gd 1007 B

123456789101112131415161718192021222324252627
  1. extends AnimatableBody2D
  2. @export var active := false
  3. @export_enum("Right", "Left", "Up", "Down") var direction := 0
  4. @export_range(1, 4, 1) var strength := 1
  5. func on_switch_hit() -> void:
  6. active = not active
  7. func _physics_process(_delta: float) -> void:
  8. $Particles.amount = strength * 2
  9. $Particles.speed_scale = strength / 2.0
  10. $Sprite.speed_scale = strength / 2.0
  11. if active:
  12. for i in $Hitbox.get_overlapping_areas():
  13. if i.owner is CharacterBody2D:
  14. var wind_velocity = Vector2.RIGHT.rotated(global_rotation) * (strength * 2)
  15. var modifier = Vector2.ONE
  16. if i.owner is Player:
  17. if Global.player_action_pressed("jump", i.owner.player_id):
  18. modifier.y = 2
  19. if Global.player_action_pressed("move_down", i.owner.player_id):
  20. modifier.y = 0.5
  21. var distance = (((i.owner.global_position - global_position) / modifier).length() / 250)
  22. i.owner.velocity += (wind_velocity / distance / Vector2(2, 1))
  23. $Particles.emitting = active
  24. $Sprite.play("On" if active else "Off")