extends Node3D @export var damage_group : String = "EnemyHitboxes" @export var deal_damage : bool = false @onready var source := owner var ground_rotation : Basis var weapon : Area3D func _body_entered(node : Node3D): if deal_damage and node.is_in_group(damage_group): node.emit_signal("damaged", weapon.power, source) func drop_weapon(): if weapon: weapon.body_entered.disconnect(_body_entered) remove_child(weapon) get_tree().current_scene.add_child(weapon) weapon.global_position = owner.global_position weapon.global_basis = ground_rotation weapon.held = false func set_weapon(instance : Area3D): if instance == null: push_error("Requested node is not a weapon, expected Area3D") return drop_weapon() ground_rotation = instance.global_basis if instance.is_inside_tree(): instance.get_parent().remove_child(instance) add_child(instance) deal_damage = false weapon = instance instance.held = true instance.body_entered.connect(_body_entered) instance.global_transform = global_transform