behaviour-tree-test/project/objects/ninja.tscn
2026-03-20 19:42:36 +01:00

197 lines
7.8 KiB
Text

[gd_scene format=3 uid="uid://cu1nh3rbcnn3w"]
[ext_resource type="PackedScene" uid="uid://hirlnhjbqv2u" path="res://assets/characters/bot.blend" id="1_fssyu"]
[ext_resource type="Script" uid="uid://66dkrpu2h7kw" path="res://behaviours/move_to_target.gd" id="2_exeof"]
[ext_resource type="Script" uid="uid://bm6unenoiyy5h" path="res://behaviours/follow_target.gd" id="2_klwnj"]
[ext_resource type="Script" uid="uid://bp4utstetxnhr" path="res://behaviours/animate.gd" id="3_klwnj"]
[ext_resource type="PackedScene" uid="uid://deuif6d8spece" path="res://objects/awareness_area.tscn" id="3_tpgvx"]
[ext_resource type="PackedScene" uid="uid://dplnyssh3gglv" path="res://objects/smokebomb.tscn" id="4_obqat"]
[ext_resource type="PackedScene" uid="uid://ljmtmtljlyoc" path="res://objects/debug_label.tscn" id="5_jh7vn"]
[sub_resource type="GDScript" id="GDScript_klwnj"]
resource_name = "NinjaBody"
script/source = "extends CharacterBody3D
@export var player : Node3D
var hurt_high : bool = false
var target : Node3D
func _physics_process(delta : float):
var motion : Vector3 = %AnimationPlayer.get_root_motion_position() / delta
velocity = motion.x * global_basis.x + motion.z * global_basis.z + velocity.y * Vector3.UP
velocity += get_gravity() * delta
move_and_slide()
func get_hiding_spot():
return null if %HidingSpotAwareness.aware.is_empty() else %HidingSpotAwareness.aware[0]
"
[sub_resource type="GDScript" id="GDScript_jh7vn"]
resource_name = "EnemyInPlayerRange"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
return Success if body.player.target and body.player.target.is_in_group(\"EnemyHitbox\") else Fail
"
[sub_resource type="GDScript" id="GDScript_exeof"]
resource_name = "SelectHidingSpot"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
body.target = body.get_hiding_spot()
if body.target != null:
return Success
else:
return Fail
"
[sub_resource type="GDScript" id="GDScript_obqat"]
resource_name = "SelectEnemy"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
if body.player.target and body.player.target.is_in_group(\"EnemyHitbox\"):
body.target = body.player.target
return Success
else:
return Fail
"
[sub_resource type="GDScript" id="GDScript_tyg5v"]
resource_name = "ThrowSmokeBomb"
script/source = "extends BehaviourAction
@export var smoke_bomb : PackedScene
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
if not body.target or not smoke_bomb:
return Fail
var instance := smoke_bomb.instantiate() as Node3D
if not instance:
push_error(\"what? (invalid smoke bomb scene, ensure root is Node3D derived)\")
return Fail
instance.position = body.target.global_position
get_tree().current_scene.add_child(instance)
return Success
"
[sub_resource type="GDScript" id="GDScript_o1uh3"]
resource_name = "WaitForSafety"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
return Running
func _execute() -> int:
return Running if body.player.target and body.player.target.is_in_group(\"EnemyHitbox\") else Success
"
[sub_resource type="GDScript" id="GDScript_tpgvx"]
resource_name = "SelectPlayer"
script/source = "extends BehaviourAction
@onready var body := get_behaviour_tree().get_parent() as CharacterBody3D
func _enter() -> int:
body.target = body.player
return Success if body.player else Fail
"
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lyptg"]
albedo_color = Color(0.4745098, 0.16862746, 0.61960787, 1)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_lyptg"]
radius = 0.30273438
[sub_resource type="CylinderShape3D" id="CylinderShape3D_exeof"]
height = 6.5117188
radius = 13.45459
[node name="Ninja" unique_id=1341242765 instance=ExtResource("1_fssyu")]
collision_layer = 2
collision_mask = 3
script = SubResource("GDScript_klwnj")
[node name="BehaviourTree" type="BehaviourTree" parent="." index="0" unique_id=1843075231]
[node name="BehaviourRepeater" type="BehaviourRepeater" parent="BehaviourTree" index="0" unique_id=1408557668]
[node name="BehaviourSelector" type="BehaviourSelector" parent="BehaviourTree/BehaviourRepeater" index="0" unique_id=487995934]
[node name="SequenceCombat" type="BehaviourSequence" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector" index="0" unique_id=664462649]
[node name="EnemyInPlayerRange" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="0" unique_id=1499130003]
script = SubResource("GDScript_jh7vn")
[node name="SelectHidingSpot" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="1" unique_id=1743644615]
script = SubResource("GDScript_exeof")
[node name="MoveToHide" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="2" unique_id=1071198062]
script = ExtResource("2_exeof")
[node name="PlayHide" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="3" unique_id=1052844547]
script = ExtResource("3_klwnj")
anim_name = "duck"
wait_for_finish = false
[node name="SelectAttacker" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="4" unique_id=520574199]
script = SubResource("GDScript_obqat")
[node name="ThrowSmokeBomb" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="5" unique_id=1944021610]
script = SubResource("GDScript_tyg5v")
smoke_bomb = ExtResource("4_obqat")
[node name="WaitForSafety" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceCombat" index="6" unique_id=622297891]
script = SubResource("GDScript_o1uh3")
[node name="SequenceFollowPlayer" type="BehaviourSequence" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector" index="1" unique_id=1977466711]
[node name="SelectPlayer" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceFollowPlayer" index="0" unique_id=92830272]
script = SubResource("GDScript_tpgvx")
[node name="FollowTarget" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector/SequenceFollowPlayer" index="1" unique_id=282888066]
script = ExtResource("2_klwnj")
target_distance = 3.0
[node name="Idle" type="BehaviourAction" parent="BehaviourTree/BehaviourRepeater/BehaviourSelector" index="2" unique_id=1038185599]
script = ExtResource("3_klwnj")
anim_name = "duck"
allow_interrupt = false
wait_for_finish = false
blend = 0.2
[node name="Mesh" parent="Character/Skeleton3D" parent_id_path=PackedInt32Array(750883464) index="0" unique_id=233192374]
material_override = SubResource("StandardMaterial3D_lyptg")
[node name="AnimationPlayer" parent="." index="2" unique_id=1278488642]
unique_name_in_owner = true
root_motion_track = NodePath("Character/Skeleton3D:root")
[node name="CollisionShape3D" type="CollisionShape3D" parent="." index="3" unique_id=1579307622]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_lyptg")
[node name="HidingSpotAwareness" parent="." index="4" unique_id=986494999 instance=ExtResource("3_tpgvx")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.92650235, 0)
target_group = "HidingSpot"
[node name="CollisionShape3D" parent="HidingSpotAwareness" index="0" unique_id=2035583636]
shape = SubResource("CylinderShape3D_exeof")
[node name="DebugLabel" parent="." index="5" unique_id=1911478572 instance=ExtResource("5_jh7vn")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.1390142, 0)
[editable path="HidingSpotAwareness"]