[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"]