PowerUpItem.gd 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. class_name PowerUpItem
  2. extends CharacterBody2D
  3. signal collected
  4. @export var power_up_state := "Big"
  5. var direction := 1
  6. signal physics_tick(delta: float)
  7. const player_angles := [Vector2(-1, -1), Vector2(1, -1), Vector2(-0.5, -2), Vector2(0.5, -2)]
  8. func _physics_process(delta: float) -> void:
  9. physics_tick.emit(delta)
  10. func collect_item(player: Player) -> void:
  11. collected.emit()
  12. player.get_power_up(power_up_state)
  13. queue_free()
  14. func player_multiplayer_launch_spawn(player: Player) -> void:
  15. global_position.y -= 8
  16. velocity = 100 * player_angles[player.player_id]
  17. direction = sign(velocity.x)
  18. func on_area_entered(area: Area2D) -> void:
  19. if area.owner is Player:
  20. collect_item(area.owner)
  21. func block_bounce_up() -> void:
  22. velocity.y = -200
  23. func block_dispense_tween() -> void:
  24. var old_z = z_index
  25. z_index = -2
  26. show()
  27. reset_physics_interpolation()
  28. AudioManager.play_sfx("item_appear", global_position)
  29. set_physics_process(false)
  30. set_process(false)
  31. global_position.y += 8
  32. var time := 1
  33. var tween = create_tween().tween_property(self, "position:y", position.y - 15, time)
  34. await tween.finished
  35. if get_parent().get_parent() is TrackRider:
  36. reparent(get_parent().get_parent().get_parent())
  37. reset_physics_interpolation()
  38. velocity.y = 0
  39. set_physics_process(true)
  40. set_process(true)
  41. z_index = old_z