| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- extends Node2D
- @export var item: PackedScene = null
- var item_amount := 0
- @export_enum("Up", "Down", "Left", "Right") var direction := 0
- func _ready() -> void:
- $Timer.start()
- func _physics_process(_delta: float) -> void:
- $Check.target_position = [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT][direction] * 16
- $Check.position = $Check.target_position.normalized()
- func on_timeout() -> void:
- if item == null or item_amount >= 3 or $Check.is_colliding(): return
- $AnimationPlayer.stop()
- var node = item.instantiate()
- node.global_position = $Joint.global_position
- add_sibling(node)
- $Joint.remote_path = node.get_path()
- item_amount += 1
- node.set_process(false)
- node.set_physics_process(false)
- node.reset_physics_interpolation()
- var z_old = node.z_index
- node.z_index = -10
- $AnimationPlayer.play(get_direction_string([Vector2.DOWN, Vector2.UP, Vector2.RIGHT, Vector2.LEFT][direction]))
- await get_tree().process_frame
- node.reset_physics_interpolation()
- await $AnimationPlayer.animation_finished
- $Joint.remote_path = ""
- if is_instance_valid(node):
- node.set_process(true)
- node.z_index = z_old
- node.set_physics_process(true)
- node.tree_exited.connect(func(): item_amount -= 1)
- func get_direction_string(direction_vector := Vector2.UP) -> String:
- match direction_vector:
- Vector2.UP:
- return "Up"
- Vector2.DOWN:
- return "Down"
- Vector2.LEFT:
- return "Left"
- Vector2.RIGHT:
- return "Right"
- _:
- return ""
|