36 lines
1 KiB
GDScript
36 lines
1 KiB
GDScript
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
|