diff --git a/Cirno.sln.DotSettings.user b/Cirno.sln.DotSettings.user
index 3dbfa053..f424602c 100644
--- a/Cirno.sln.DotSettings.user
+++ b/Cirno.sln.DotSettings.user
@@ -10,6 +10,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn
index 48295de1..0228cc1d 100644
--- a/Scenes/Actors/fsm_player.tscn
+++ b/Scenes/Actors/fsm_player.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=60 format=3 uid="uid://c4pr2707hbeph"]
+[gd_scene load_steps=61 format=3 uid="uid://c4pr2707hbeph"]
[ext_resource type="Script" uid="uid://d2ubk5gucny6s" path="res://Scripts/Components/FSM/PlayerFSMProxy.cs" id="1_g3wua"]
[ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"]
@@ -32,6 +32,7 @@
[ext_resource type="Script" uid="uid://d0bebi2vn171l" path="res://Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs" id="29_m323t"]
[ext_resource type="Texture2D" uid="uid://ddwhrlrgj6i00" path="res://Sprites/Actors/Cirno.png" id="30_li0ug"]
[ext_resource type="Script" uid="uid://camgjo4302qmq" path="res://Scripts/Components/Actors/ConveyorBeltMover.cs" id="32_4f2wn"]
+[ext_resource type="Script" uid="uid://dbxbvjonbtib2" path="res://Scripts/Components/FSM/Player/PlayerStorageModule.cs" id="33_fnw0c"]
[sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"]
radius = 5.0
@@ -242,11 +243,12 @@ metadata/_edit_group_ = true
[node name="StateMachine" type="Node2D" parent="."]
script = ExtResource("1_mpmil")
-[node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider")]
+[node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider", "_storageModule")]
script = ExtResource("2_i6wc8")
_animationProvider = NodePath("../../AnimationProvider")
+_storageModule = NodePath("../../Storage")
-[node name="Active" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider", "_damageReceiver", "_activationProvider", "_interactionController", "_moduleNodes")]
+[node name="Active" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider", "_damageReceiver", "_activationProvider", "_interactionController", "_storageModule", "_moduleNodes")]
script = ExtResource("3_3tuio")
_weaponProvider = NodePath("../../WeaponProvider")
_animationProvider = NodePath("../../AnimationProvider")
@@ -256,6 +258,7 @@ _inputProvider = NodePath("../../InputProvider")
_damageReceiver = NodePath("../../DamageReceiver")
_activationProvider = NodePath("../../InteractionProvider")
_interactionController = NodePath("../../InteractionController")
+_storageModule = NodePath("../../Storage")
_moduleNodes = [NodePath("../../InteractionController"), NodePath("../../ItemUser"), NodePath("../../ConveyorBeltMover")]
[node name="Cutscene" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider")]
@@ -388,10 +391,11 @@ Shield = NodePath("../DamageReceiver/ShieldProvider")
[node name="CollisionShape2D2" type="CollisionShape2D" parent="InteractionController"]
shape = SubResource("CircleShape2D_g3wua")
-[node name="ItemUser" type="Node2D" parent="." node_paths=PackedStringArray("Health", "Shield")]
+[node name="ItemUser" type="Node2D" parent="." node_paths=PackedStringArray("Health", "Shield", "_storageModule")]
script = ExtResource("29_m323t")
Health = NodePath("../DamageReceiver/HealthProvider")
Shield = NodePath("../DamageReceiver/ShieldProvider")
+_storageModule = NodePath("../Storage")
[node name="Sprite2D" type="Sprite2D" parent="."]
visible = false
@@ -423,6 +427,9 @@ script = ExtResource("32_4f2wn")
position = Vector2(0, 6.48)
shape = SubResource("CircleShape2D_fnw0c")
+[node name="Storage" type="Node2D" parent="."]
+script = ExtResource("33_fnw0c")
+
[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
[connection signal="area_entered" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_entered"]
[connection signal="area_exited" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_exited"]
diff --git a/Scripts/Components/FSM/Player/Active.cs b/Scripts/Components/FSM/Player/Active.cs
index ba7613ec..8a9bbd95 100644
--- a/Scripts/Components/FSM/Player/Active.cs
+++ b/Scripts/Components/FSM/Player/Active.cs
@@ -8,7 +8,11 @@ public partial class Active : PlayerStateBase
{
public override PlayerState StateId => PlayerState.Active;
private Vector2 _movementDirection { get; set; }
- public Vector2 FacingDirection { get; private set; } = Vector2.Down;
+ public Vector2 FacingDirection
+ {
+ get => _storageModule.FacingDirection;
+ private set => _storageModule.FacingDirection = value;
+ }
[Export]
public int Speed { get; set; } = 45;
@@ -32,6 +36,8 @@ public partial class Active : PlayerStateBase
[Export] private ActivationProvider _activationProvider;
[Export] private InteractionController _interactionController;
+
+ [Export] private PlayerStorageModule _storageModule;
private bool _isStrafing;
diff --git a/Scripts/Components/FSM/Player/Init.cs b/Scripts/Components/FSM/Player/Init.cs
index cad0b296..0b9f8db6 100644
--- a/Scripts/Components/FSM/Player/Init.cs
+++ b/Scripts/Components/FSM/Player/Init.cs
@@ -10,8 +10,12 @@ public partial class Init : PlayerStateBase
[Export]
private PlayerAnimationProvider _animationProvider;
+
+ [Export] private PlayerStorageModule _storageModule;
+
public override void EnterState()
{
+ _storageModule.FacingDirection = ((PlayerStateMachine)StateMachine).StartingDirection;
_animationProvider.PlayUnteleportAnimation();
_ = AutoSwitchToStart();
}
diff --git a/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs b/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs
index 72364c4b..318083fd 100644
--- a/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs
+++ b/Scripts/Components/FSM/Player/PlayerFSMItemUseModule.cs
@@ -13,6 +13,14 @@ public partial class PlayerFSMItemUseModule : ModuleBase _storageModule.FacingDirection;
+ private set => _storageModule.FacingDirection = value;
+ }
+
public bool Enabled { get; set; } = false;
public override void EnterState(PlayerState state)
@@ -105,7 +113,8 @@ public partial class PlayerFSMItemUseModule : ModuleBase