[gd_scene load_steps=35 format=3 uid="uid://bei4nhkf8lwdo"]

[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"]
[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"]
[ext_resource type="Resource" uid="uid://ccrb5xsnphc8" path="res://systems/inputs/base_mode/rotate_floorplane.tres" id="5_4u7i3"]
[ext_resource type="Script" uid="uid://dv7v1ywmbvvcd" path="res://player_controller/Scripts/HealthSystem.cs" id="5_umw0l"]
[ext_resource type="Script" uid="uid://vuq8rjq3vegn" path="res://player_controller/Scripts/Stamina.cs" id="6_lxtc4"]
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://player_controller/Scripts/StairsSystem.cs" id="7_bmt5a"]
[ext_resource type="Resource" uid="uid://dgfww8118d8gj" path="res://systems/inputs/base_mode/aim.tres" id="7_cresl"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://systems/inputs/base_mode/aim_release.tres" id="8_lhb11"]
[ext_resource type="Script" uid="uid://dd1yrt7eiiyf4" path="res://player_controller/Scripts/CapsuleCollider.cs" id="8_lmtjd"]
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://systems/mantle/mantle_system.tscn" id="8_qu4wy"]
[ext_resource type="Resource" uid="uid://7wm8ywvujwf" path="res://systems/inputs/base_mode/aim_cancel.tres" id="9_5p2qc"]
[ext_resource type="Script" uid="uid://bt0xv2q8iv1vn" path="res://player_controller/Scripts/Gravity.cs" id="9_lsueh"]
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://systems/inputs/base_mode/jump.tres" id="10_4u7i3"]
[ext_resource type="Script" uid="uid://g8idirw62qe0" path="res://player_controller/Scripts/Bobbing.cs" id="10_7wk1w"]
[ext_resource type="Resource" uid="uid://b5gx3q8nvu72e" path="res://systems/inputs/base_mode/hit.tres" id="11_cresl"]
[ext_resource type="PackedScene" uid="uid://0ysqmqphq6mq" path="res://systems/head/head_system.tscn" id="11_rxwoh"]
[ext_resource type="Resource" uid="uid://d2r0ur8k3cuu3" path="res://systems/inputs/base_mode/drop.tres" id="12_34snm"]
[ext_resource type="Script" uid="uid://b6k73aj5povgv" path="res://player_controller/Scripts/FieldOfView.cs" id="12_m2mxi"]
[ext_resource type="Script" uid="uid://b5nk6ntlps3x0" path="res://systems/inputs/input_system.gd" id="16_v31n3"]
[ext_resource type="Resource" uid="uid://htqvokm8mufq" path="res://systems/inputs/base_mode/move.tres" id="17_h6vvl"]
[ext_resource type="PackedScene" uid="uid://cqduhd4opgwvm" path="res://systems/dash/dash_system.tscn" id="18_q5h8a"]
[ext_resource type="Script" uid="uid://dyy5njw6pxoh4" path="res://systems/move/MoveSystem.cs" id="20_rxwoh"]
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="22_rpwev"]
[ext_resource type="PackedScene" uid="uid://bcwkugn6v3oy7" path="res://addons/godot_state_charts/utilities/state_chart_debugger.tscn" id="24_q5h8a"]
[ext_resource type="Script" uid="uid://couw105c3bde4" path="res://addons/godot_state_charts/state_chart.gd" id="25_wv70j"]
[ext_resource type="Script" uid="uid://jk2jm1g6q853" path="res://addons/godot_state_charts/compound_state.gd" id="26_infe6"]
[ext_resource type="Script" uid="uid://cytafq8i1y8qm" path="res://addons/godot_state_charts/atomic_state.gd" id="27_34snm"]
[ext_resource type="Script" uid="uid://c1vp0ojjvaby1" path="res://addons/godot_state_charts/parallel_state.gd" id="27_infe6"]
[ext_resource type="Script" uid="uid://tjiji63wlom5" path="res://systems/wall_hug/WallHugSystem.cs" id="27_n7qhm"]
[ext_resource type="Script" uid="uid://cf1nsco3w0mf6" path="res://addons/godot_state_charts/transition.gd" id="28_n7qhm"]
[ext_resource type="PackedScene" uid="uid://ckm3d6k08a72u" path="res://systems/weapon/weapon.tscn" id="29_wv70j"]

[sub_resource type="CapsuleMesh" id="CapsuleMesh_xc2g5"]

[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_wydro"]

[node name="Player" type="CharacterBody3D"]
script = ExtResource("1_poq2x")
TimeScaleAimInAir = 0.15
MaxJumpBoostAfterDashing = 1.4

[node name="InputController" type="Node3D" parent="."]
script = ExtResource("16_v31n3")
base_mode = ExtResource("3_cresl")
move = ExtResource("17_h6vvl")
rotate_y = ExtResource("4_rxwoh")
rotate_floorplane = ExtResource("5_4u7i3")
aim_pressed = ExtResource("7_cresl")
aim_released = ExtResource("8_lhb11")
aim_canceled = ExtResource("9_5p2qc")
jump = ExtResource("10_4u7i3")
hit = ExtResource("11_cresl")
drop = ExtResource("12_34snm")

[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
mesh = SubResource("CapsuleMesh_xc2g5")

[node name="CapsuleCollider" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_wydro")
script = ExtResource("8_lmtjd")

[node name="HeadSystem" parent="." instance=ExtResource("11_rxwoh")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.68, 0)

[node name="HealthSystem" type="Node3D" parent="."]
script = ExtResource("5_umw0l")

[node name="Stamina" type="Node3D" parent="."]
script = ExtResource("6_lxtc4")

[node name="StairsSystem" type="Node3D" parent="."]
script = ExtResource("7_bmt5a")

[node name="StairsAheadRayCast3D" type="RayCast3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.828)
target_position = Vector3(0, -0.55, 0)

[node name="StairsBelowRayCast3D" type="RayCast3D" parent="."]
target_position = Vector3(0, -0.75, 0)

[node name="MantleSystem" parent="." instance=ExtResource("8_qu4wy")]
MantleEndLocationDistanceFromWall = 0.3
MantleHeightCastStart = 2.0

[node name="Bobbing" type="Node3D" parent="."]
script = ExtResource("10_7wk1w")

[node name="FieldOfView" type="Node3D" parent="."]
script = ExtResource("12_m2mxi")

[node name="HeadCollisionDetectors" type="Node3D" parent="."]

[node name="HeadCollisionDetector0" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, -0.210707)
target_position = Vector3(0, 1, 0)

[node name="HeadCollisionDetector1" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, 0.23061)
target_position = Vector3(0, 1, 0)

[node name="HeadCollisionDetector2" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.296, 1.4, 0)
target_position = Vector3(0, 1, 0)

[node name="HeadCollisionDetector3" type="RayCast3D" parent="HeadCollisionDetectors"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.296, 1.4, 0)
target_position = Vector3(0, 1, 0)

[node name="MoveSystem" type="Node3D" parent="."]
script = ExtResource("20_rxwoh")
WalkSpeed = 10.0
SprintSpeed = 15.0
DoubleJumpSpeedFactor = 1.4

[node name="Gravity" type="Node3D" parent="."]
script = ExtResource("9_lsueh")
Weight = 6.5
StartVelocity = 4.0

[node name="TweenQueueSystem" parent="." instance=ExtResource("22_rpwev")]

[node name="WallHugSystem" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
script = ExtResource("27_n7qhm")

[node name="back" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, 1)
collision_mask = 2

[node name="front" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(0, 0, -1)
collision_mask = 2

[node name="right" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(1, 0, 0)
collision_mask = 2

[node name="left" type="RayCast3D" parent="WallHugSystem"]
target_position = Vector3(-1, 0, 0)
collision_mask = 2

[node name="DashSystem" parent="." instance=ExtResource("18_q5h8a")]
DashSpeed = 0.1
PostDashSpeed = 30.0

[node name="WeaponRoot" type="Node3D" parent="."]

[node name="WeaponSystem" parent="WeaponRoot" instance=ExtResource("29_wv70j")]
transform = Transform3D(1, 0, 0, 0, 0.173648, -0.984808, 0, 0.984808, 0.173648, 0.45268, 1.44035, -0.692528)
ThrowForce = 15.0
StraightThrowDuration = 0.05

[node name="CoyoteTime" type="Timer" parent="."]
wait_time = 0.2
one_shot = true

[node name="TimeScaleAimInAir" type="Timer" parent="."]
wait_time = 2.0
one_shot = true
ignore_time_scale = true

[node name="TimeAfterDashing" type="Timer" parent="."]
wait_time = 0.3
one_shot = true

[node name="StateChartDebugger" parent="." instance=ExtResource("24_q5h8a")]
offset_left = 1530.0
offset_top = 1.0
offset_right = -2.0
offset_bottom = 1.0
enabled = false
initial_node_to_watch = NodePath("../StateChart")

[node name="StateChart" type="Node" parent="."]
script = ExtResource("25_wv70j")
metadata/_custom_type_script = "uid://couw105c3bde4"

[node name="Root" type="Node" parent="StateChart"]
script = ExtResource("27_infe6")

[node name="Actions" type="Node" parent="StateChart/Root"]
script = ExtResource("26_infe6")
initial_state = NodePath("WeaponInHand")
metadata/_custom_type_script = "uid://c1vp0ojjvaby1"

[node name="WeaponInHand" type="Node" parent="StateChart/Root/Actions"]
script = ExtResource("27_34snm")

[node name="ToAiming" type="Node" parent="StateChart/Root/Actions/WeaponInHand"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Aiming")
event = &"aim_pressed"
delay_in_seconds = "0.0"

[node name="Aiming" type="Node" parent="StateChart/Root/Actions"]
script = ExtResource("27_34snm")

[node name="ToWeaponInHand" type="Node" parent="StateChart/Root/Actions/Aiming"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponInHand")
event = &"aim_canceled"
delay_in_seconds = "0.0"

[node name="ToDashing" type="Node" parent="StateChart/Root/Actions/Aiming"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing")
event = &"aim_released"
delay_in_seconds = "0.0"

[node name="ToWeaponThrown" type="Node" parent="StateChart/Root/Actions/Aiming"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponThrown")
event = &"hit_pressed"
delay_in_seconds = "0.0"

[node name="Dashing" type="Node" parent="StateChart/Root/Actions"]
script = ExtResource("27_34snm")

[node name="ToWeaponInHand" type="Node" parent="StateChart/Root/Actions/Dashing"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponInHand")
event = &"dash_ended"
delay_in_seconds = "0.0"

[node name="ToHanging" type="Node" parent="StateChart/Root/Actions/Dashing"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Hanging")
event = &"dash_to_planted"
delay_in_seconds = "0.0"

[node name="WeaponThrown" type="Node" parent="StateChart/Root/Actions"]
script = ExtResource("27_34snm")

[node name="OnAim" type="Node" parent="StateChart/Root/Actions/WeaponThrown"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Dashing")
event = &"aim_pressed"
delay_in_seconds = "0.0"

[node name="Hanging" type="Node" parent="StateChart/Root/Actions"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Actions/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponInHand")
event = &"jump"
delay_in_seconds = "0.0"

[node name="OnDrop" type="Node" parent="StateChart/Root/Actions/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponInHand")
event = &"drop"
delay_in_seconds = "0.0"

[node name="OnMantle" type="Node" parent="StateChart/Root/Actions/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../WeaponInHand")
event = &"mantle"
delay_in_seconds = "0.0"

[node name="Movement" type="Node" parent="StateChart/Root"]
script = ExtResource("26_infe6")
initial_state = NodePath("Grounded")

[node name="OnMantle" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("28_n7qhm")
to = NodePath("../Mantling")
event = &"mantle"
delay_in_seconds = "0.0"

[node name="OnHang" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("28_n7qhm")
to = NodePath("../Hanging")
event = &"dash_to_planted"
delay_in_seconds = "0.0"

[node name="Grounded" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/Jump")
event = &"jump"
delay_in_seconds = "0.0"

[node name="OnAirborne" type="Node" parent="StateChart/Root/Movement/Grounded"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/CoyoteEnabled")
event = &"start_falling"
delay_in_seconds = "0.0"

[node name="Mantling" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")

[node name="ToGrounded" type="Node" parent="StateChart/Root/Movement/Mantling"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"to_grounded"
delay_in_seconds = "0.0"

[node name="Hanging" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/JumpFromWall")
event = &"jump"
delay_in_seconds = "0.0"

[node name="OnDrop" type="Node" parent="StateChart/Root/Movement/Hanging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Airborne/CoyoteEnabled")
event = &"drop"
delay_in_seconds = "0.0"

[node name="Airborne" type="Node" parent="StateChart/Root/Movement"]
script = ExtResource("26_infe6")
initial_state = NodePath("CoyoteEnabled")

[node name="OnGrounded" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Grounded")
event = &"grounded"
delay_in_seconds = "0.0"

[node name="OnWallHug" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("28_n7qhm")
to = NodePath("../WallHugging")
event = &"wall_hug"
delay_in_seconds = "0.0"

[node name="WallHugging" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Airborne/WallHugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../JumpFromWall")
event = &"jump"
delay_in_seconds = "0.0"

[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/Airborne/WallHugging"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Falling")
event = &"start_falling"
delay_in_seconds = "0.0"

[node name="CoyoteEnabled" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Airborne/CoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump")
event = &"jump"
delay_in_seconds = "0.0"

[node name="OnExpiration" type="Node" parent="StateChart/Root/Movement/Airborne/CoyoteEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../DoubleJumpEnabled")
event = &"coyote_expired"
delay_in_seconds = "0.0"

[node name="Jump" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="ToDoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne/Jump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../DoubleJumpEnabled")
event = &"to_double_jump"
delay_in_seconds = "0.0"

[node name="JumpFromWall" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="ToDoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne/JumpFromWall"]
script = ExtResource("28_n7qhm")
to = NodePath("../../DoubleJumpEnabled")
event = &"to_double_jump"
delay_in_seconds = "0.0"

[node name="DoubleJumpEnabled" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="OnJump" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJumpEnabled"]
script = ExtResource("28_n7qhm")
to = NodePath("../../DoubleJump")
event = &"jump"
delay_in_seconds = "0.0"

[node name="DoubleJump" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[node name="ToFalling" type="Node" parent="StateChart/Root/Movement/Airborne/DoubleJump"]
script = ExtResource("28_n7qhm")
to = NodePath("../../Falling")
event = &"to_falling"
delay_in_seconds = "0.0"

[node name="Falling" type="Node" parent="StateChart/Root/Movement/Airborne"]
script = ExtResource("27_34snm")

[connection signal="input_aim_canceled" from="InputController" to="." method="OnInputAimCanceled"]
[connection signal="input_aim_pressed" from="InputController" to="." method="OnInputAimPressed"]
[connection signal="input_aim_released" from="InputController" to="." method="OnInputAimReleased"]
[connection signal="input_drop" from="InputController" to="." method="OnInputDropPressed"]
[connection signal="input_hit" from="InputController" to="." method="OnInputHitPressed"]
[connection signal="input_jump" from="InputController" to="." method="OnInputJumpPressed"]
[connection signal="input_move" from="InputController" to="." method="OnInputMove"]
[connection signal="input_rotate_floorplane" from="InputController" to="." method="OnInputRotateFloorplane"]
[connection signal="input_rotate_y" from="InputController" to="." method="OnInputRotateY"]
