feat: WIP find weapon behaviour branch

This commit is contained in:
Sara Gerretsen 2026-03-17 23:48:19 +01:00
parent 86d8fe9a8e
commit 425525e56f
8 changed files with 86 additions and 39 deletions

View file

@ -0,0 +1,12 @@
extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter():
var targets : Array[Node3D] = body.find_weapons()
if targets.is_empty():
body.target = null
return Fail
else:
body.target = targets[0]
return Success

View file

@ -0,0 +1 @@
uid://bavm4ks4nsdbe

View file

@ -4,7 +4,9 @@
[ext_resource type="PackedScene" uid="uid://cpedp17gycei5" path="res://behaviours/branches/sequence_hit_high.tscn" id="1_jqoh2"]
[ext_resource type="Script" uid="uid://ywfmsbsdc6s7" path="res://behaviours/select_target.gd" id="2_1p4o0"]
[ext_resource type="Script" uid="uid://bp4utstetxnhr" path="res://behaviours/animate.gd" id="3_o2gvu"]
[ext_resource type="Script" uid="uid://cn8wlp7qayg1n" path="res://behaviours/check_weapon.gd" id="4_1fc8h"]
[ext_resource type="PackedScene" uid="uid://blpbabfwxdvfr" path="res://behaviours/branches/sequence_jab_chain.tscn" id="4_xqvpn"]
[ext_resource type="Script" uid="uid://bavm4ks4nsdbe" path="res://behaviours/find_weapon.gd" id="5_bmb0k"]
[sub_resource type="GDScript" id="GDScript_xqvpn"]
resource_name = "Wait"
@ -20,18 +22,6 @@ func _execute() -> int:
return Success if $Timer.time_left == 0 else Running if not body.hurt_high else Fail
"
[sub_resource type="GDScript" id="GDScript_o2gvu"]
resource_name = "AtPlayer"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
if body.target == null or body.target.global_position.distance_to(body.global_position) > 1.2:
return Fail
return Success
"
[sub_resource type="GDScript" id="GDScript_1p4o0"]
resource_name = "ApproachTarget"
script/source = "extends BehaviourAction
@ -43,7 +33,10 @@ func _enter() -> int:
var full_angle := body.global_basis.z.signed_angle_to((body.global_position - body.target.global_position), Vector3.UP)
body.rotate_y(full_angle)
anim.play(\"run\", .1)
return Success
if body.target == null or body.target.global_position.distance_to(body.global_position) > 1.2:
return Fail
else:
return Success
"
[sub_resource type="GDScript" id="GDScript_41oev"]
@ -82,36 +75,59 @@ one_shot = true
[node name="SelectTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence" unique_id=56930655]
script = ExtResource("2_1p4o0")
[node name="BehaviourAlwaysSuccess" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/CombatSequence" unique_id=1246764318]
[node name="SelectorCombat" type="BehaviourSelector" parent="BehaviourRepeater/BehaviourSelector/CombatSequence" unique_id=460186240]
[node name="BehaviourSequence" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess" unique_id=560445563]
[node name="SequenceFindWeapon" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat" unique_id=2110472996]
[node name="BehaviourSelector" type="BehaviourSelector" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1389418648]
[node name="IsUnarmed" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/SequenceFindWeapon" unique_id=1668738825]
script = ExtResource("4_1fc8h")
[node name="AtPlayer" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence/BehaviourSelector" unique_id=1884043694]
script = SubResource("GDScript_o2gvu")
[node name="FindWeapon" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/SequenceFindWeapon" unique_id=2113011800]
script = ExtResource("5_bmb0k")
[node name="ApproachTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence/BehaviourSelector" unique_id=2073752420]
[node name="BehaviourAlwaysSuccess" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/SequenceFindWeapon" unique_id=734558409]
[node name="BehaviourSequence" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/SequenceFindWeapon/BehaviourAlwaysSuccess" unique_id=356660420]
[node name="ApproachTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/SequenceFindWeapon/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=983176567]
script = SubResource("GDScript_1p4o0")
[node name="AtPlayer" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1885476200]
script = SubResource("GDScript_o2gvu")
[node name="AlwaysSuccessAttack" type="BehaviourAlwaysSuccess" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat" unique_id=1246764318]
[node name="PlayReady" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1015744062]
[node name="AttackSequence" type="BehaviourSequence" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack" unique_id=560445563]
[node name="SelectTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence" unique_id=1912259269]
script = ExtResource("2_1p4o0")
[node name="ApproachTarget" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence" unique_id=2073752420]
script = SubResource("GDScript_1p4o0")
[node name="PlayReady" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence" unique_id=1015744062]
script = ExtResource("3_o2gvu")
anim_name = "ready_unarmed"
wait_for_finish = false
[node name="Wait" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=1130580040]
[node name="Wait" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence" unique_id=1130580040]
script = SubResource("GDScript_xqvpn")
[node name="Timer" type="Timer" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence/Wait" unique_id=332191936]
[node name="Timer" type="Timer" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence/Wait" unique_id=332191936]
wait_time = 0.2
one_shot = true
[node name="SequenceJabChain" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/BehaviourAlwaysSuccess/BehaviourSequence" unique_id=376452224 instance=ExtResource("4_xqvpn")]
[node name="SequenceJabChain" parent="BehaviourRepeater/BehaviourSelector/CombatSequence/SelectorCombat/AlwaysSuccessAttack/AttackSequence" unique_id=376452224 instance=ExtResource("4_xqvpn")]
[node name="Idle" type="BehaviourAction" parent="BehaviourRepeater/BehaviourSelector" unique_id=2051783162]
script = SubResource("GDScript_41oev")
[node name="SequenceFindWeapon" type="BehaviourSequence" parent="." unique_id=1390744936]
[node name="IsUnarmed" type="BehaviourAction" parent="SequenceFindWeapon" unique_id=1447353302]
script = ExtResource("4_1fc8h")
[node name="FindWeapon" type="BehaviourAction" parent="SequenceFindWeapon" unique_id=328604984]
script = ExtResource("5_bmb0k")
[node name="ApproachTarget" type="BehaviourAction" parent="SequenceFindWeapon" unique_id=1540477164]
script = SubResource("GDScript_1p4o0")
[editable path="BehaviourRepeater/BehaviourSelector/SequenceHitHigh"]

View file

@ -32,9 +32,18 @@ func _physics_process(delta : float):
velocity += get_gravity() * delta
move_and_slide()
func get_current_weapon_type() -> String:
return \"\" if %WeaponParent.weapon == null else %WeaponParent.weapon.animations
func find_targets() -> Array[Node3D]:
return $AwarenessArea.aware
func weapon_filter(node : Node3D):
return node.can_interact()
func find_weapons() -> Array[Node3D]:
return $ItemAwareness.aware.filter(weapon_filter)
func wants_jab_attack() -> bool:
return target and target.global_position.distance_to(global_position) < 1.5
"
@ -50,17 +59,17 @@ radius = 0.2133789
[sub_resource type="CylinderShape3D" id="CylinderShape3D_we7g8"]
height = 3.3642578
radius = 5.7021484
radius = 9.955078
[node name="bot" unique_id=161717875 groups=["EnemyHitbox"] instance=ExtResource("1_882u1")]
collision_layer = 2
collision_mask = 3
script = SubResource("GDScript_882u1")
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1160354937) index="0" unique_id=721045080]
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1480016001) index="0" unique_id=825969686]
material_override = SubResource("StandardMaterial3D_41oev")
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1160354937) index="1" unique_id=957498611]
[node name="HandR" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1480016001) index="1" unique_id=957498611]
transform = Transform3D(0.015967373, -0.083946444, 0.9963424, -0.17989334, -0.98045003, -0.07972447, 0.9835564, -0.17796235, -0.030756809, 0.27221423, 0.7951686, 0.024477992)
bone_name = "hand.r"
bone_idx = 10
@ -86,7 +95,7 @@ script = ExtResource("3_3hb37")
damage_group = "EnemyHitbox"
deal_damage = true
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1160354937) index="2" unique_id=1761081841]
[node name="HandL" type="BoneAttachment3D" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(1480016001) index="2" unique_id=1761081841]
transform = Transform3D(-0.039434362, 0.07924447, -0.9960749, 0.12679999, -0.9883944, -0.083653376, -0.99114394, -0.12960118, 0.028928574, -0.2710728, 0.7714727, 0.0945672)
bone_name = "hand.l"
bone_idx = 7
@ -105,7 +114,7 @@ transform = Transform3D(1.0000169, -1.5795231e-06, -3.874302e-07, 8.046627e-07,
shape = SubResource("BoxShape3D_we7g8")
debug_color = Color(0.9966913, 0, 0.17880186, 1)
[node name="AnimationPlayer" parent="." index="1" unique_id=1336045799]
[node name="AnimationPlayer" parent="." index="1" unique_id=2115366661]
unique_name_in_owner = true
root_motion_track = NodePath("Character/Skeleton3D:root")

View file

@ -21,7 +21,7 @@ var health : int = 10
func _ready():
damaged.connect(_damaged)
func _damaged(amount : int, source : Node3D):
hurt_high = true
target = source
@ -152,12 +152,12 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7066379, 0)
script = SubResource("GDScript_nmc1l")
[node name="SpringArm3D" type="SpringArm3D" parent="CameraPivot" index="0" unique_id=1656112632]
transform = Transform3D(0.9981222, 0, 0.061254278, 0, 1, 0, -0.061254278, 0, 0.9981222, 0.06544638, 0.5373664, 0)
transform = Transform3D(0.98211235, 0, 0.18829599, 0, 1, 0, -0.18829599, 0, 0.98211235, 0.06544638, 0.5373664, 0)
shape = SubResource("SphereShape3D_nmc1l")
spring_length = 4.0
[node name="Camera3D" type="Camera3D" parent="CameraPivot/SpringArm3D" index="0" unique_id=552400396]
transform = Transform3D(0.9979606, -5.2219344e-12, -0.0638317, 5.2317426e-12, 1, -1.2884713e-14, 0.0638317, -3.204676e-13, 0.9979606, 0, 0, 0)
transform = Transform3D(0.981895, -5.3638707e-09, -0.18942553, 5.529141e-09, 1, 3.4402312e-10, 0.18942553, -1.3851523e-09, 0.981895, 0, 0, 0)
current = true
fov = 52.5

View file

@ -51,9 +51,9 @@ shadow_enabled = true
use_collision = true
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D" unique_id=624831705]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.121719554, -0.14361572)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.4172363, -0.121719554, -3.3309174)
material_override = SubResource("StandardMaterial3D_75bvq")
size = Vector3(37.69922, 0.25, 28.495972)
size = Vector3(32.864746, 0.25, 34.870575)
material = SubResource("StandardMaterial3D_b3nq0")
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1468524701]
@ -69,13 +69,22 @@ mesh = SubResource("PrismMesh_hyc8p")
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.81944275, 2.9908073, -16.53226)
[node name="bot2" parent="." unique_id=1248097680 instance=ExtResource("2_w0s2s")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, -3)
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -4.2919784, 0, -9.428478)
[node name="bot7" parent="." unique_id=161717875 instance=ExtResource("2_w0s2s")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 14.586861, 0, -2.4284782)
[node name="bot3" parent="." unique_id=967250519 instance=ExtResource("2_w0s2s")]
transform = Transform3D(0.3496833, 0, -0.93686795, 0, 1, 0, 0.93686795, 0, 0.3496833, -5.7783833, 0, 3.5097082)
transform = Transform3D(0.3496833, 0, -0.93686795, 0, 1, 0, 0.93686795, 0, 0.3496833, -10.070362, 0, -2.91877)
[node name="arming_sword" parent="." unique_id=2052632295 instance=ExtResource("5_hyc8p")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.2453568, 3.01506, -13.157142)
[node name="bot4" parent="." unique_id=1043461858 instance=ExtResource("2_w0s2s")]
transform = Transform3D(0.9275529, 0, -0.3736921, 0, 1, 0, 0.3736921, 0, 0.9275529, -2.7036862, 0, 2.7785006)
[node name="bot5" parent="." unique_id=413626826 instance=ExtResource("2_w0s2s")]
transform = Transform3D(0.98013043, 0, 0.1983546, 0, 1, 0, -0.1983546, 0, 0.98013043, 2.8221688, 0, 0.37355423)
[node name="bot6" parent="." unique_id=824166803 instance=ExtResource("2_w0s2s")]
transform = Transform3D(0.98013043, 0, 0.1983546, 0, 1, 0, -0.1983546, 0, 0.98013043, 10.450586, 0, -1.7386198)
[node name="arming_sword2" parent="." unique_id=1836860855 instance=ExtResource("5_hyc8p")]
transform = Transform3D(0.7200159, -0.69395757, -3.0333847e-08, 0, -4.371139e-08, 1, -0.69395757, -0.7200159, -3.1472894e-08, -5.5797243, 0.030811165, 0.26892662)