Add FSM components for player and enemy state management, including initialization and module resolution

This commit is contained in:
MaddoScientisto 2026-02-26 23:13:57 +01:00
commit b6cc5a00e8
57 changed files with 526 additions and 506 deletions

View file

@ -1,9 +1,9 @@
[gd_scene load_steps=38 format=3 uid="uid://bh3vxmqflijgj"]
[gd_scene format=3 uid="uid://bh3vxmqflijgj"]
[ext_resource type="Script" uid="uid://dwregubt4iila" path="res://Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs" id="1_a3crc"]
[ext_resource type="Resource" uid="uid://ccym6mcq4fbul" path="res://Resources/Enemies/Fairy_Guard_3D.tres" id="2_jgarc"]
[ext_resource type="Script" uid="uid://c651imhj6rjsh" path="res://Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs" id="2_xne4s"]
[ext_resource type="Script" uid="uid://cy34e3htvbvnl" path="res://Scripts/Components/FSM/Enemy/3D/Init.cs" id="4_jgarc"]
[ext_resource type="Script" uid="uid://dkmwqvhenu1xq" path="res://Scripts/Components/FSM/Enemy/3D/InitState.cs" id="4_2ut2v"]
[ext_resource type="Script" uid="uid://jpdgfn701crh" path="res://Scripts/Components/FSM/Enemy/3D/Idle.cs" id="5_rg1hb"]
[ext_resource type="Script" uid="uid://dvtdw2hcp4rm2" path="res://Scripts/Components/FSM/Enemy/3D/Alert.cs" id="6_jgarc"]
[ext_resource type="Script" uid="uid://crahxykgis2bp" path="res://Scripts/Components/FSM/Enemy/3D/Shooting.cs" id="7_rg1hb"]
@ -88,36 +88,30 @@ animations = [{
"speed": 5.0
}]
[node name="Enemy" type="CharacterBody3D" node_paths=PackedStringArray("EnemyFSM")]
[node name="Enemy" type="CharacterBody3D" unique_id=1428692983 node_paths=PackedStringArray("EnemyFSM")]
collision_layer = 64
collision_mask = 1553
script = ExtResource("1_a3crc")
EnemyFSM = NodePath("StateMachine")
EnemyResource = ExtResource("2_jgarc")
[node name="CollisionShape2D" type="CollisionShape3D" parent="."]
[node name="CollisionShape2D" type="CollisionShape3D" parent="." unique_id=397512658]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.047, 0)
shape = SubResource("CapsuleShape3D_jgarc")
[node name="StateMachine" type="Node" parent="."]
[node name="StateMachine" type="Node" parent="." unique_id=146081447]
script = ExtResource("2_xne4s")
[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider", "HealthProvider", "_moduleNodes")]
script = ExtResource("4_jgarc")
Storage = NodePath("../../Storage")
DetectionProvider = NodePath("../../PlayerDetectionProvider")
HealthProvider = NodePath("../../DamageReceiver/HealthProvider")
[node name="Init" type="Node" parent="StateMachine" unique_id=321304267 node_paths=PackedStringArray("_moduleNodes")]
script = ExtResource("4_2ut2v")
_moduleNodes = [NodePath("../../AnimationModule")]
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "GravityProvider", "_moduleNodes")]
[node name="Idle" type="Node" parent="StateMachine" unique_id=1798192567 node_paths=PackedStringArray("_moduleNodes")]
script = ExtResource("5_rg1hb")
Storage = NodePath("../../Storage")
PlayerDetection = NodePath("../../PlayerDetectionProvider")
GravityProvider = NodePath("../../GravityProvider")
DebugEnabled = true
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule"), NodePath("../../SoundModule")]
[node name="Alert" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "NavigationModule", "GravityProvider", "_moduleNodes")]
[node name="Alert" type="Node" parent="StateMachine" unique_id=2023331935 node_paths=PackedStringArray("Storage", "PlayerDetection", "NavigationModule", "GravityProvider", "_moduleNodes")]
script = ExtResource("6_jgarc")
Storage = NodePath("../../Storage")
PlayerDetection = NodePath("../../PlayerDetectionProvider")
@ -126,32 +120,28 @@ GravityProvider = NodePath("../../GravityProvider")
DebugEnabled = true
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule"), NodePath("../../SoundModule")]
[node name="Shooting" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "EquippedWeapon", "NavigationModule", "GravityProvider", "_moduleNodes")]
[node name="Shooting" type="Node" parent="StateMachine" unique_id=767265433 node_paths=PackedStringArray("EquippedWeapon", "_moduleNodes")]
script = ExtResource("7_rg1hb")
Storage = NodePath("../../Storage")
PlayerDetection = NodePath("../../PlayerDetectionProvider")
EquippedWeapon = NodePath("../../Weapon")
NavigationModule = NodePath("../../NavigationProvider")
GravityProvider = NodePath("../../GravityProvider")
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule"), NodePath("../../SoundModule")]
[node name="Dead" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "_moduleNodes")]
[node name="Dead" type="Node" parent="StateMachine" unique_id=1312501461 node_paths=PackedStringArray("Storage", "_moduleNodes")]
script = ExtResource("8_5j04l")
Storage = NodePath("../../Storage")
_moduleNodes = [NodePath("../../LootModule")]
[node name="Controlled" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "_moduleNodes")]
[node name="Controlled" type="Node" parent="StateMachine" unique_id=481921517 node_paths=PackedStringArray("Storage", "_moduleNodes")]
script = ExtResource("9_dm2sd")
Storage = NodePath("../../Storage")
_moduleNodes = [NodePath("../../DamageModule")]
[node name="AnimationModule" type="Node" parent="." node_paths=PackedStringArray("AnimationProvider", "Storage", "HealthProvider")]
[node name="AnimationModule" type="Node" parent="." unique_id=920204467 node_paths=PackedStringArray("AnimationProvider", "Storage", "HealthProvider")]
script = ExtResource("10_d6h7c")
AnimationProvider = NodePath("../AnimationProvider")
Storage = NodePath("../Storage")
HealthProvider = NodePath("../DamageReceiver/HealthProvider")
[node name="AnimationProvider" type="Node3D" parent="." node_paths=PackedStringArray("AnimatedSprite")]
[node name="AnimationProvider" type="Node3D" parent="." unique_id=2053395074 node_paths=PackedStringArray("AnimatedSprite")]
script = ExtResource("10_5gcuf")
AnimatedSprite = NodePath("../AnimatedSprite3D")
WalkRightAnimationName = &"right"
@ -160,7 +150,7 @@ WalkDownAnimationName = &"down"
WalkUpAnimationName = &"up"
BlinkMaterial = ExtResource("10_05pdu")
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."]
[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="." unique_id=1186020475]
transform = Transform3D(0.707107, -0.5, 0.5, 0, 0.707107, 0.707107, -0.707107, -0.5, 0.5, 0, 0, 0)
material_override = SubResource("ShaderMaterial_d6h7c")
pixel_size = 0.05
@ -172,38 +162,38 @@ frame = 2
frame_progress = 0.92087
script = ExtResource("11_jgarc")
[node name="Storage" type="Node" parent="." node_paths=PackedStringArray("Root")]
[node name="Storage" type="Node" parent="." unique_id=8651828 node_paths=PackedStringArray("Root")]
script = ExtResource("11_xne4s")
Root = NodePath("..")
[node name="PlayerDetectionProvider" type="Area3D" parent="."]
[node name="PlayerDetectionProvider" type="Area3D" parent="." unique_id=77201234]
collision_layer = 0
collision_mask = 2
script = ExtResource("13_rg1hb")
ObstaclesCollisionMask = 17
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetectionProvider"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetectionProvider" unique_id=1149305496]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.557434, 0)
shape = SubResource("CylinderShape3D_5j04l")
[node name="NavigationProvider" type="Node" parent="." node_paths=PackedStringArray("NavigationAgent", "StorageModule")]
[node name="NavigationProvider" type="Node" parent="." unique_id=1851675964 node_paths=PackedStringArray("NavigationAgent", "StorageModule")]
script = ExtResource("14_dm2sd")
NavigationAgent = NodePath("../NavigationAgent3D")
StorageModule = NodePath("../Storage")
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."]
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="." unique_id=1202654381]
path_postprocessing = 1
debug_enabled = true
[node name="Weapon" parent="." instance=ExtResource("15_27vgy")]
[node name="Weapon" parent="." unique_id=771249458 instance=ExtResource("15_27vgy")]
[node name="DamageModule" type="Node" parent="." node_paths=PackedStringArray("DamageReceiver", "StorageModule", "AnimationProvider")]
[node name="DamageModule" type="Node" parent="." unique_id=430721165 node_paths=PackedStringArray("DamageReceiver", "StorageModule", "AnimationProvider")]
script = ExtResource("16_27vgy")
DamageReceiver = NodePath("../DamageReceiver")
StorageModule = NodePath("../Storage")
AnimationProvider = NodePath("../AnimationProvider")
[node name="DamageReceiver" type="Area3D" parent="." node_paths=PackedStringArray("HealthProvider")]
[node name="DamageReceiver" type="Area3D" parent="." unique_id=1792872756 node_paths=PackedStringArray("HealthProvider")]
collision_layer = 64
collision_mask = 8
script = ExtResource("17_tabhk")
@ -211,20 +201,20 @@ HealthProvider = NodePath("HealthProvider")
BulletGroup = 2
DeleteParentOnDeath = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="DamageReceiver"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="DamageReceiver" unique_id=1457345703]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00463867, 0)
shape = SubResource("CylinderShape3D_uv2lf")
[node name="HealthProvider" type="Node" parent="DamageReceiver"]
[node name="HealthProvider" type="Node" parent="DamageReceiver" unique_id=610376220]
script = ExtResource("18_4fnoq")
ResourceName = "Health"
[node name="GravityProvider" type="Node" parent="."]
[node name="GravityProvider" type="Node" parent="." unique_id=2086594224]
script = ExtResource("25_qg061")
Gravity = -20.0
MaxFallSpeed = 50.0
[node name="SoundModule" type="Node" parent="." node_paths=PackedStringArray("DamageReceiver", "StorageModule", "HitPlayer", "DeathPlayer", "AlertPlayer")]
[node name="SoundModule" type="Node" parent="." unique_id=540759764 node_paths=PackedStringArray("DamageReceiver", "StorageModule", "HitPlayer", "DeathPlayer", "AlertPlayer")]
script = ExtResource("26_ojvcb")
DamageReceiver = NodePath("../DamageReceiver")
StorageModule = NodePath("../Storage")
@ -232,19 +222,19 @@ HitPlayer = NodePath("HitPlayer")
DeathPlayer = NodePath("DeathPlayer")
AlertPlayer = NodePath("AlertPlayer")
[node name="HitPlayer" type="AudioStreamPlayer3D" parent="SoundModule"]
[node name="HitPlayer" type="AudioStreamPlayer3D" parent="SoundModule" unique_id=1334761769]
unit_size = 30.0
bus = &"Effects"
[node name="AlertPlayer" type="AudioStreamPlayer3D" parent="SoundModule"]
[node name="AlertPlayer" type="AudioStreamPlayer3D" parent="SoundModule" unique_id=1111891836]
unit_size = 30.0
bus = &"Effects"
[node name="DeathPlayer" type="AudioStreamPlayer3D" parent="SoundModule"]
[node name="DeathPlayer" type="AudioStreamPlayer3D" parent="SoundModule" unique_id=1385917323]
unit_size = 30.0
bus = &"Effects"
[node name="Hitbox" type="AnimatedSprite3D" parent="."]
[node name="Hitbox" type="AnimatedSprite3D" parent="." unique_id=123796697]
transform = Transform3D(0.707107, -0.5, 0.5, 0, 0.707107, 0.707107, -0.707107, -0.5, 0.5, 0, 0, 0)
material_overlay = SubResource("StandardMaterial3D_2ut2v")
ignore_occlusion_culling = true
@ -254,11 +244,11 @@ texture_filter = 0
render_priority = -1
sprite_frames = SubResource("SpriteFrames_t121s")
[node name="LootModule" type="Node" parent="." node_paths=PackedStringArray("StorageModule")]
[node name="LootModule" type="Node" parent="." unique_id=729648693 node_paths=PackedStringArray("StorageModule")]
script = ExtResource("28_2ut2v")
StorageModule = NodePath("../Storage")
[node name="Shadow2" type="Decal" parent="."]
[node name="Shadow2" type="Decal" parent="." unique_id=2007780472]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.13562012, -0.118652344, 0.13336182)
size = Vector3(0.5, 0.7373047, 0.5)
texture_albedo = ExtResource("28_t121s")