behaviour-tree-test/project/scripts/weapon_parent.gd

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