2024-09-20 22:50:26 +03:00
|
|
|
class_name ArrowShooter
|
2024-09-17 21:37:22 +03:00
|
|
|
extends RayCast2D
|
|
|
|
|
|
|
|
@onready var arrow: PackedScene = preload("res://puzzles/arrow/arrow.tscn")
|
|
|
|
@onready var timer: Timer = $ShootTimer
|
|
|
|
@onready var shoot_dir: Vector2i = self.target_position.normalized()
|
|
|
|
|
|
|
|
@export var arrow_speed: int = 400
|
|
|
|
@export var shoot_timer: float = 3.0
|
2024-09-20 22:50:26 +03:00
|
|
|
@export var offset_start_time: float = 0.0
|
|
|
|
var _default_offset: float = 0.0
|
|
|
|
|
|
|
|
var is_stopped = false
|
|
|
|
var _arrows_shot: Array[Arrow] = []
|
2024-09-17 21:37:22 +03:00
|
|
|
|
|
|
|
func _ready():
|
2024-09-20 22:50:26 +03:00
|
|
|
_default_offset = offset_start_time
|
2024-09-17 21:37:22 +03:00
|
|
|
|
|
|
|
func _process(delta):
|
2024-09-20 22:50:26 +03:00
|
|
|
if is_stopped:
|
|
|
|
timer.stop()
|
|
|
|
|
|
|
|
if offset_start_time > 0:
|
|
|
|
offset_start_time -= 1
|
|
|
|
elif offset_start_time <= 0 and timer.is_stopped():
|
|
|
|
timer.start(shoot_timer)
|
2024-09-17 21:37:22 +03:00
|
|
|
|
|
|
|
func _on_shoot_timer_timeout():
|
|
|
|
var inst: Arrow = arrow.instantiate()
|
|
|
|
inst.shoot(shoot_dir, arrow_speed)
|
|
|
|
add_child(inst)
|
2024-09-20 22:50:26 +03:00
|
|
|
_arrows_shot.push_back(inst)
|
|
|
|
|
2024-09-21 18:25:26 +03:00
|
|
|
func reset():
|
2024-09-20 22:50:26 +03:00
|
|
|
for arrow in _arrows_shot:
|
|
|
|
if arrow != null:
|
|
|
|
arrow.queue_free()
|
|
|
|
offset_start_time = _default_offset
|
2024-09-21 18:25:26 +03:00
|
|
|
is_stopped = true
|