extends NetworkWeapon3D
class_name BrawlerWeapon

@export var projectile: PackedScene
@export var fire_cooldown: float = 0.15

@onready var input: BrawlerInput = $"../Input"
@onready var sound: AudioStreamPlayer3D = $AudioStreamPlayer3D

var last_fire: int = -1

static var _logger := NetfoxLogger.new("fb", "BrawlerWeapon")

func _ready():
	NetworkTime.on_tick.connect(_tick)

func _can_fire() -> bool:
	return NetworkTime.seconds_between(last_fire, NetworkTime.tick) >= fire_cooldown

func _can_peer_use(peer_id: int) -> bool:
	return peer_id == input.get_multiplayer_authority()

func _after_fire(projectile: Node3D):
	var bomb := projectile as BombProjectile
	last_fire = get_fired_tick()
	sound.play()

	_logger.trace("[%s] Ticking new bomb %d -> %d", [bomb.name, get_fired_tick(), NetworkTime.tick])
	for t in range(get_fired_tick(), NetworkTime.tick):
		if bomb.is_queued_for_deletion():
			break
		bomb._tick(NetworkTime.ticktime, t)

func _spawn() -> Node3D:
	var bomb_projectile: BombProjectile = projectile.instantiate() as BombProjectile
	get_tree().root.add_child(bomb_projectile, true)
	bomb_projectile.global_transform = global_transform
	bomb_projectile.fired_by = get_parent()

	return bomb_projectile

func _tick(_delta: float, _t: int):
	if input.is_firing:
		fire()
