diff --git a/game/characters/player/player.tscn b/game/characters/player/player.tscn index 247b280..d4b9c6d 100644 --- a/game/characters/player/player.tscn +++ b/game/characters/player/player.tscn @@ -3,6 +3,9 @@ [ext_resource type="Script" uid="uid://bb8kc32sggrn2" path="res://game/characters/player/player.gd" id="1_xln5q"] [ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="2_j06tb"] [ext_resource type="PackedScene" uid="uid://cvx6akiplg21s" path="res://game/characters/player/player_sprite.tscn" id="2_n6ad3"] +[ext_resource type="PackedScene" uid="uid://3ll3i1fgktg2" path="res://game/state_machine/state_machine.tscn" id="4_65114"] +[ext_resource type="PackedScene" uid="uid://c7adrbfobmvl8" path="res://game/state_machine/abstract_state.tscn" id="5_65114"] +[ext_resource type="Script" uid="uid://bnxccvt265hlu" path="res://game/characters/player/states/idle_state.gd" id="6_3qf5w"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_xln5q"] radius = 4.0 @@ -48,5 +51,10 @@ collision_mask = 35 [node name="CollisionShape2D" type="CollisionShape2D" parent="CenterArea2D" unique_id=1350886064] shape = SubResource("CapsuleShape2D_t6gq4") +[node name="StateMachine" parent="." unique_id=633169960 instance=ExtResource("4_65114")] + +[node name="IdleState" parent="StateMachine" unique_id=739226464 instance=ExtResource("5_65114")] +script = ExtResource("6_3qf5w") + [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_animation_finished"] [connection signal="animation_looped" from="AnimatedSprite2D" to="." method="_on_animation_looped"] diff --git a/game/characters/player/states/idle_state.gd b/game/characters/player/states/idle_state.gd new file mode 100644 index 0000000..bcfcae5 --- /dev/null +++ b/game/characters/player/states/idle_state.gd @@ -0,0 +1 @@ +extends AbstractState diff --git a/game/characters/player/states/idle_state.gd.uid b/game/characters/player/states/idle_state.gd.uid new file mode 100644 index 0000000..98b904f --- /dev/null +++ b/game/characters/player/states/idle_state.gd.uid @@ -0,0 +1 @@ +uid://bnxccvt265hlu diff --git a/game/state_machine/abstract_state.gd b/game/state_machine/abstract_state.gd new file mode 100644 index 0000000..be645cf --- /dev/null +++ b/game/state_machine/abstract_state.gd @@ -0,0 +1,24 @@ +class_name AbstractState +extends Node + + +@warning_ignore("unused_signal") +signal new_state(state: AbstractState) + + +func enter() -> void: + pass + + +func exit() -> void: + pass + + +@warning_ignore("unused_parameter") +func process(delta: float) -> void: + pass + + +@warning_ignore("unused_parameter") +func physics_process(delta: float) -> void: + pass diff --git a/game/state_machine/abstract_state.gd.uid b/game/state_machine/abstract_state.gd.uid new file mode 100644 index 0000000..057ec45 --- /dev/null +++ b/game/state_machine/abstract_state.gd.uid @@ -0,0 +1 @@ +uid://ciuxe344aok4n diff --git a/game/state_machine/abstract_state.tscn b/game/state_machine/abstract_state.tscn new file mode 100644 index 0000000..5c17c93 --- /dev/null +++ b/game/state_machine/abstract_state.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://c7adrbfobmvl8"] + +[ext_resource type="Script" uid="uid://ciuxe344aok4n" path="res://game/state_machine/abstract_state.gd" id="1_80326"] + +[node name="AbstractState" type="Node" unique_id=739226464] +script = ExtResource("1_80326") diff --git a/game/state_machine/state_machine.gd b/game/state_machine/state_machine.gd new file mode 100644 index 0000000..5cc20e6 --- /dev/null +++ b/game/state_machine/state_machine.gd @@ -0,0 +1,22 @@ +class_name StateMachine +extends Node + + +var current_state : AbstractState + + +func _process(delta: float) -> void: + if current_state: + current_state.process(delta) + + +func _physics_process(delta: float) -> void: + if current_state: + current_state.physics_process(delta) + + +func change_state(new_state: AbstractState) -> void: + if current_state: + current_state.exit() + current_state = new_state + current_state.enter() diff --git a/game/state_machine/state_machine.gd.uid b/game/state_machine/state_machine.gd.uid new file mode 100644 index 0000000..213fe51 --- /dev/null +++ b/game/state_machine/state_machine.gd.uid @@ -0,0 +1 @@ +uid://bghuevstlp4yp diff --git a/game/state_machine/state_machine.tscn b/game/state_machine/state_machine.tscn new file mode 100644 index 0000000..9ddcc6e --- /dev/null +++ b/game/state_machine/state_machine.tscn @@ -0,0 +1,6 @@ +[gd_scene format=3 uid="uid://3ll3i1fgktg2"] + +[ext_resource type="Script" uid="uid://bghuevstlp4yp" path="res://game/state_machine/state_machine.gd" id="1_ncw1q"] + +[node name="StateMachine" type="Node" unique_id=633169960] +script = ExtResource("1_ncw1q")