From ee09c50dbde3b633558d2fffdaa7974cb555dea2 Mon Sep 17 00:00:00 2001 From: Marco Date: Sat, 1 Mar 2025 18:02:11 +0100 Subject: [PATCH] FSM Selector with sound --- SFX/581602__samsterbirdies__beep-error.flac | Bin 0 -> 24421 bytes SFX/581602__samsterbirdies__beep-error.mp3 | 3 + ...602__samsterbirdies__beep-error.mp3.import | 19 ++++ Scenes/Actors/fsm_player.tscn | 48 +++++++- Scenes/Maps/PlayerFSMTest.tscn | 27 +++-- Scenes/Selector.tscn | 2 + .../Components/Actors/ActivationProvider.cs | 106 ++++++++++++++++++ .../Actors/ActivationProvider.cs.uid | 1 + Scripts/Components/Actors/InputProvider.cs | 1 + .../Actors/KeyboardInputProvider.cs | 5 + Scripts/Components/FSM/Player/Active.cs | 12 +- Scripts/Components/FSM/Player/Controlling.cs | 29 +++++ .../Components/FSM/Player/Controlling.cs.uid | 1 + Scripts/Components/FSM/Player/Cutscene.cs | 29 +++++ Scripts/Components/FSM/Player/Cutscene.cs.uid | 1 + Scripts/Components/FSM/Player/Dead.cs | 11 +- Scripts/Components/FSM/Player/Teleporting.cs | 29 +++++ .../Components/FSM/Player/Teleporting.cs.uid | 1 + Scripts/PlayerMovement.cs | 1 + Scripts/Selector.cs | 32 +++--- 20 files changed, 330 insertions(+), 28 deletions(-) create mode 100644 SFX/581602__samsterbirdies__beep-error.flac create mode 100644 SFX/581602__samsterbirdies__beep-error.mp3 create mode 100644 SFX/581602__samsterbirdies__beep-error.mp3.import create mode 100644 Scripts/Components/Actors/ActivationProvider.cs create mode 100644 Scripts/Components/Actors/ActivationProvider.cs.uid create mode 100644 Scripts/Components/FSM/Player/Controlling.cs create mode 100644 Scripts/Components/FSM/Player/Controlling.cs.uid create mode 100644 Scripts/Components/FSM/Player/Cutscene.cs create mode 100644 Scripts/Components/FSM/Player/Cutscene.cs.uid create mode 100644 Scripts/Components/FSM/Player/Teleporting.cs create mode 100644 Scripts/Components/FSM/Player/Teleporting.cs.uid diff --git a/SFX/581602__samsterbirdies__beep-error.flac b/SFX/581602__samsterbirdies__beep-error.flac new file mode 100644 index 0000000000000000000000000000000000000000..ccadf351f13636db5ab18ae974d8c94757656f5c GIT binary patch literal 24421 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

@o5Iz=xKD-Um6Rf)4s1Y;F@371%5v zE3*){zK7q~GF-G=i9;%k;1zJLBmuICfo6$TJ%}m}U`!xmnUz>_raciy;-DYV8vCAs zTcojYKw1F++Ff$Gan4~J!t$**&n*XJ*JRY7f>TCbW=Do zvDx^{ZKqApjPC(*Q#b<$zYwdp^lg#<3@goNBdoSyIWAZNKu}8A-r5x8cNp4xt26S$ z81K<$tLTl!Tub~!%eve2s#nv(Hbxmp2T0i%yh@x0QPe`|@bQsh|(#1ELI`E3xm8AIbT0An=|p7wBaZ>>jsQ-#z%qz2baAhD zIF^eRiru+2#^eH(86ZZ31@hv$UfR)3=a*8(Q$78S({u>L8Y$BXX6&(Y=P+~}#v!WF zXcH-vEJ0UBI3dsy(Xf;{WE#||f_IxI1*)a+agdY)ZDuhl6ctW+v;%!vR@Awd^^=pG z%>Z1$z_8nq&^8bRLJ&fnmAU#USrkxdSC3b!pekt*$eb=ylB1C+2vwvJelpKCeN>5Q(s2b~Phhz>G|WG#Nk+`dyQI3}dU zU^IlN`g82wDAm3XD81e2MzNs>W|EH3KHny7j?G6h3a~s-nn}PBl}wof^;*0uhD2X3 z6qA-I@Z0jt5#@q46@*Q(bmOHsaQwXDev53>4hrVI@FI<3C8>HSR5OWX=Vibdxm>K= zuFiq#4~isV<;*zt`G7nlKuocR2+cq-u2PFL;}o5(OT-x;9(o^*M0EP`hl#sCMY+i5 z$&Ol&tICxJ^7O zlc}|`L{m>?W8{hgHk0b6lcbJYK)dx5cS$mKG%CoMxyhsgl@C`9li(O1H;YG zjgD~N26T6$t0SU*S}{QoYW>74GGO1^-P1q|2*5lBGiw6ML5XS$l$5Sw{`O&BP{ zA!6Wu@B$vgL=*u%r?U-pD!`a4C~AjDxjZLN0^P1d?U6bSK{+H0LnTI2yG_PCGh zjA5(D7X)T1Kw-e`2gN}hA`AiW0&*Zz9Q(SaE#)rA1o^}TKPRcU)B1vlIDIiEZa3gC zEp?`N%j_iFMusJ;#b1YrwJZe-1fXge#=F%NXYUWKj$`g;ATy9qKbCi1t#z+~kDX}I z8@8$*g(UR|)XvhBIIsCIVW+14}?4P8L8M=Me-b6Z_|pC8CW3)!r+IUW1#C~t)Nb!9&789Rhmi=#Ny(P$CW|br1RB| z_F(!QwXbl?A?B?xCWKj+lQTnmmDw^dh9x0Fx=K)%dm^L1-vY> z6$*B+5myE0K$T&q*zJU?dzLah>Bg6AR{zTv6i3|!D*+^fqjOM2I6PhD2d`w;YGVz) z!!1cbMK2Ud)S{033k36-ZRazAc@M86ZXp2+8pHhT9HJy)Wx};;oEQLT;|E05HR1dx zH&z-LGFpo@i&gggwH~9e67RD!;n$P#+!E17Lrw@+D#=GgHHp!P0I7~>DGee5_BiON z7CC7np$A1P98f`JXo6e5mlM)ZPHJ^rq0E^?jUf!6de~2cid9&xs$PL8^*w+w{}}Ss zR9a?#O;mxFGoTFcuY#IDfF7-t&JZ3dg8+Spp9hkPz%e%G1W82&4^9nAsn9A5gKIBmjfs8B{Cwt?>k$aRc}2nfY$>yXm|+JJq6SnqWmU-t zEuD~!gN!>6d_SY*=j50iVhW*-A##bG#|Q~q2E1BLthgpr5vdUhjcedWj=B2Gg8|t< zn=3g5)uxK#%Fkbe$<#{BhA;cAF<2Q*moL`wfXO;|aV9}Ukdp8lhhTCdQvQgK+(9fz zo_H{&2`}5#I)-ADK|%+O5r1*C>~S`Z!&Fb9cVmP0;zWr`T{hr9BQ2RQd2l3!@7sdr zK>-{t#WY3~Otpj7kSwCrg)o|^T&if0HJ{YZ7t#_?Di3r<2fxL+=>kJzSsWCUQSS1l z1N9B83hKa@W)~UnD&WMOKGtnPHCiQ~7?3HHr?T}Nm^5eXh2gIJ5*=Hg@UdI{4GGoT zLEAriuyL?#iXi4IEP<&5%5V-e4ZDql=wc~=Ic9_ZUdkakTk3C$^j})cFCD1oEcN0%>3fnj_*6E{Pcj{tpPOcXt2) literal 0 HcmV?d00001 diff --git a/SFX/581602__samsterbirdies__beep-error.mp3 b/SFX/581602__samsterbirdies__beep-error.mp3 new file mode 100644 index 00000000..c6bcba66 --- /dev/null +++ b/SFX/581602__samsterbirdies__beep-error.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:416ac4f02581dd0cb6a415cc644da56413ef19595ceaaabf2f7843857d14e876 +size 10496 diff --git a/SFX/581602__samsterbirdies__beep-error.mp3.import b/SFX/581602__samsterbirdies__beep-error.mp3.import new file mode 100644 index 00000000..43db6622 --- /dev/null +++ b/SFX/581602__samsterbirdies__beep-error.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://myr6n2c1u503" +path="res://.godot/imported/581602__samsterbirdies__beep-error.mp3-f3f329247704643528e2ce4967834675.mp3str" + +[deps] + +source_file="res://SFX/581602__samsterbirdies__beep-error.mp3" +dest_files=["res://.godot/imported/581602__samsterbirdies__beep-error.mp3-f3f329247704643528e2ce4967834675.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 066b0bed..f8a1a854 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -1,13 +1,16 @@ -[gd_scene load_steps=28 format=3 uid="uid://c4pr2707hbeph"] +[gd_scene load_steps=35 format=3 uid="uid://c4pr2707hbeph"] [ext_resource type="Script" uid="uid://bw2hakslndaxm" path="res://Scripts/Components/FSM/PlayerStateMachine.cs" id="1_mpmil"] [ext_resource type="Script" uid="uid://chwqogny2v8t1" path="res://Scripts/Components/FSM/Player/Init.cs" id="2_i6wc8"] [ext_resource type="Script" uid="uid://bl0o35xt8wxtg" path="res://Scripts/Components/FSM/Player/Active.cs" id="3_3tuio"] [ext_resource type="Script" uid="uid://bo6xcjnw3yn6s" path="res://Scripts/Components/FSM/Player/Dead.cs" id="4_0pqs8"] [ext_resource type="Material" uid="uid://dnvwgyt2tbqmr" path="res://Resources/Materials/Player_Blink_Teleport_Material.tres" id="4_5qlss"] +[ext_resource type="Script" uid="uid://dn2rrgw3e027b" path="res://Scripts/Components/FSM/Player/Cutscene.cs" id="4_22ff8"] [ext_resource type="SpriteFrames" uid="uid://bc7mghjx75qip" path="res://Resources/Sprites/player.tres" id="4_s0ir4"] [ext_resource type="Script" uid="uid://b4nixnxhj5qhw" path="res://Scripts/Components/Actors/PlayerWeaponProvider.cs" id="5_gp3hw"] +[ext_resource type="Script" uid="uid://b0khv2fcrgm6t" path="res://Scripts/Components/FSM/Player/Teleporting.cs" id="5_yifvs"] [ext_resource type="PackedScene" uid="uid://crry0rgk7a8sm" path="res://Scenes/Weapons/BaseWeapon.tscn" id="6_8dcio"] +[ext_resource type="Script" uid="uid://bwtcgcvfw8urt" path="res://Scripts/Components/FSM/Player/Controlling.cs" id="6_82vrk"] [ext_resource type="Script" uid="uid://bo5sgbv1t8ril" path="res://Scripts/Components/Actors/PlayerAnimationProvider.cs" id="7_pmkfo"] [ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="8_i6wc8"] [ext_resource type="PackedScene" uid="uid://biugfbp0yae2s" path="res://Scenes/Particles/DeathParticles.tscn" id="9_0pyos"] @@ -18,6 +21,9 @@ [ext_resource type="Texture2D" uid="uid://bf37ce6jskdel" path="res://Sprites/SmallHitbox.png" id="13_pmkfo"] [ext_resource type="Script" uid="uid://dkmsw828qwikk" path="res://Scripts/Components/Actors/PlayerDamageReceiver.cs" id="14_igu66"] [ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="15_5qlss"] +[ext_resource type="Script" uid="uid://dv205x8msohpv" path="res://Scripts/Components/Actors/ActivationProvider.cs" id="22_12cwd"] +[ext_resource type="PackedScene" uid="uid://chkpk7erlqajg" path="res://Scenes/Selector.tscn" id="23_5tmtw"] +[ext_resource type="AudioStream" uid="uid://myr6n2c1u503" path="res://SFX/581602__samsterbirdies__beep-error.mp3" id="24_5tmtw"] [sub_resource type="CircleShape2D" id="CircleShape2D_b3hxm"] @@ -78,6 +84,9 @@ animations = [{ [sub_resource type="CircleShape2D" id="CircleShape2D_igu66"] radius = 2.23607 +[sub_resource type="CircleShape2D" id="CircleShape2D_7n10g"] +radius = 17.2627 + [node name="FSMPlayer" type="CharacterBody2D"] collision_layer = 2 collision_mask = 97 @@ -88,7 +97,7 @@ InitialState = 1 [node name="Init" type="Node2D" parent="."] script = ExtResource("2_i6wc8") -[node name="Active" type="Node2D" parent="." node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider", "_damageReceiver")] +[node name="Active" type="Node2D" parent="." node_paths=PackedStringArray("_weaponProvider", "_animationProvider", "_crosshairProvider", "_hitboxSpriteProvider", "_inputProvider", "_damageReceiver", "_activationProvider")] script = ExtResource("3_3tuio") _weaponProvider = NodePath("../WeaponProvider") _animationProvider = NodePath("../AnimationProvider") @@ -96,12 +105,28 @@ _crosshairProvider = NodePath("../CrosshairProvider") _hitboxSpriteProvider = NodePath("../StrafeSpriteProvider") _inputProvider = NodePath("../InputProvider") _damageReceiver = NodePath("../DamageReceiver") +_activationProvider = NodePath("../InteractionProvider") State = 1 +[node name="Cutscene" type="Node2D" parent="." node_paths=PackedStringArray("_animationProvider")] +script = ExtResource("4_22ff8") +_animationProvider = NodePath("../AnimationProvider") +State = 2 + +[node name="Teleporting" type="Node2D" parent="." node_paths=PackedStringArray("_animationProvider")] +script = ExtResource("5_yifvs") +_animationProvider = NodePath("../AnimationProvider") +State = 3 + +[node name="Controlling" type="Node2D" parent="." node_paths=PackedStringArray("_animationProvider")] +script = ExtResource("6_82vrk") +_animationProvider = NodePath("../AnimationProvider") +State = 4 + [node name="Dead" type="Node2D" parent="." node_paths=PackedStringArray("_animationProvider")] script = ExtResource("4_0pqs8") _animationProvider = NodePath("../AnimationProvider") -State = 4 +State = 5 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_b3hxm") @@ -174,4 +199,21 @@ MaxResource = 32.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] shape = SubResource("CircleShape2D_igu66") +[node name="InteractionProvider" type="Area2D" parent="." node_paths=PackedStringArray("_inputProvider", "_errorSound")] +visible = false +collision_layer = 2 +collision_mask = 4 +script = ExtResource("22_12cwd") +SelectorScene = ExtResource("23_5tmtw") +_inputProvider = NodePath("../InputProvider") +_errorSound = NodePath("Error") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="InteractionProvider"] +shape = SubResource("CircleShape2D_7n10g") + +[node name="Error" type="AudioStreamPlayer2D" parent="InteractionProvider"] +stream = ExtResource("24_5tmtw") + [connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] +[connection signal="InteractableAreaEntered" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_entered"] +[connection signal="InteractableAreaExited" from="InteractionProvider" to="InteractionProvider" method="_on_interaction_controller_area_exited"] diff --git a/Scenes/Maps/PlayerFSMTest.tscn b/Scenes/Maps/PlayerFSMTest.tscn index 1bb9eb77..0cd082f6 100644 --- a/Scenes/Maps/PlayerFSMTest.tscn +++ b/Scenes/Maps/PlayerFSMTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=4 uid="uid://dqyfnby0t7gu1"] +[gd_scene load_steps=22 format=4 uid="uid://dqyfnby0t7gu1"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_c3v4x"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_w1v1g"] @@ -10,13 +10,16 @@ [ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_yyg8m"] [ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="8_c3v4x"] [ext_resource type="Script" uid="uid://cfya7sndh7vy2" path="res://Scenes/CameraController.gd" id="9_dj0ui"] +[ext_resource type="PackedScene" uid="uid://cmr6fclttrpkb" path="res://Scenes/Items/Ammo1.tscn" id="10_6314l"] [ext_resource type="Script" uid="uid://c5nxsq3tyxcx6" path="res://Scripts/InventoryManager.cs" id="10_qmakk"] [ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="11_hmqao"] [ext_resource type="Script" uid="uid://bdshph801ac2i" path="res://Scenes/CameraTarget.gd" id="12_8to53"] [ext_resource type="Script" uid="uid://cnkipcolyj61w" path="res://Scripts/AlarmManager.cs" id="13_8fnge"] +[ext_resource type="PackedScene" uid="uid://b0gpbkxdfbnjh" path="res://Scenes/Actors/ForceField_Horizontal.tscn" id="13_mljl7"] [ext_resource type="PackedScene" uid="uid://b3tyacxxw88lx" path="res://Scenes/Utils/StreamPlayerWithName.tscn" id="14_q7rh4"] [ext_resource type="PackedScene" uid="uid://cd36ch65jijg0" path="res://Scenes/Activable/BulletEmitter.tscn" id="15_b3hxm"] [ext_resource type="Resource" uid="uid://bj331rcsq65es" path="res://Resources/Bullets/EmitterTestBullet.tres" id="16_u1i8n"] +[ext_resource type="PackedScene" uid="uid://crph24e6e0v0q" path="res://Scenes/Interactable/Control_Pad.tscn" id="20_0knpf"] [sub_resource type="Resource" id="Resource_6wo78"] script = ExtResource("4_u1i8n") @@ -58,6 +61,17 @@ metadata/_edit_lock_ = true [node name="FSMPlayer" parent="Tilemaps/Actors" instance=ExtResource("8_c3v4x")] position = Vector2(76, 295) +[node name="Ammo1" parent="Tilemaps/Actors" instance=ExtResource("10_6314l")] +position = Vector2(163, 302) + +[node name="BulletEmitter" parent="Tilemaps/Actors" instance=ExtResource("15_b3hxm")] +position = Vector2(59.7855, 263.59) +BulletResource = ExtResource("16_u1i8n") +EmitOnStart = true + +[node name="HorizontalForceField" parent="Tilemaps/Actors" instance=ExtResource("13_mljl7")] +position = Vector2(304, 303) + [node name="CameraController" type="Camera2D" parent="."] process_mode = 1 script = ExtResource("9_dj0ui") @@ -76,11 +90,11 @@ script = ExtResource("10_qmakk") [node name="HUD" parent="." instance=ExtResource("11_hmqao")] [node name="CameraTarget" type="Node2D" parent="."] -position = Vector2(115, 328) +position = Vector2(124, 338) script = ExtResource("12_8to53") [node name="PlayerStartPosition" type="Marker2D" parent="."] -position = Vector2(111, 305) +position = Vector2(155, 370) [node name="AlarmManager" type="Node2D" parent="."] process_mode = 1 @@ -90,7 +104,6 @@ script = ExtResource("13_8fnge") process_mode = 3 autoplay = true -[node name="BulletEmitter" parent="." instance=ExtResource("15_b3hxm")] -position = Vector2(59.7855, 263.59) -BulletResource = ExtResource("16_u1i8n") -EmitOnStart = true +[node name="ControlPad" parent="." node_paths=PackedStringArray("Targets") instance=ExtResource("20_0knpf")] +position = Vector2(279, 306) +Targets = [NodePath("../Tilemaps/Actors/HorizontalForceField")] diff --git a/Scenes/Selector.tscn b/Scenes/Selector.tscn index be1ca5a5..2b21242e 100644 --- a/Scenes/Selector.tscn +++ b/Scenes/Selector.tscn @@ -33,3 +33,5 @@ script = ExtResource("1_pp2dj") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] z_index = -5 sprite_frames = SubResource("SpriteFrames_kehny") +autoplay = "default" +frame_progress = 0.00057048 diff --git a/Scripts/Components/Actors/ActivationProvider.cs b/Scripts/Components/Actors/ActivationProvider.cs new file mode 100644 index 00000000..6bae5e02 --- /dev/null +++ b/Scripts/Components/Actors/ActivationProvider.cs @@ -0,0 +1,106 @@ +using Godot; + +namespace Cirno.Scripts.Components.Actors; + +public partial class ActivationProvider : Area2D +{ + public bool Enabled { get; set; } = false; + + private Selector _selector; + + [Export] + public PackedScene SelectorScene { get; set; } + + [Export] + private InputProvider _inputProvider; + + [Export] private AudioStreamPlayer2D _errorSound; + + [Signal] + public delegate void InteractableAreaEnteredEventHandler(Interactable interactable); + + [Signal] + public delegate void InteractableAreaExitedEventHandler(Interactable interactable); + + public void Init() + { + if (SelectorScene is not null && _selector is null) + { + _selector = this.CreateSibling(SelectorScene, this.GlobalPosition); + _selector.Visible = false; + } + } + + public void HandleInteraction() + { + if (_inputProvider.GetUseJustPressed()) + { + TrySelect(); + } + + if (_inputProvider.GetScanJustPressed()) + { + _selector.SelectNext(); + } + } + + private void TrySelect() + { + var selected = _selector.SelectedInteractable; + if (selected is null) + { + _errorSound?.Play(); + return; + }; + if (!selected.CanActivate()) + { + _errorSound?.Play(); + return; + }; + bool success = selected.Activate(); + + if (success) + { + // Deselect and scan for next + _selector.RemoveInteractable(selected); + //_selector.SelectedInteractable = null; + //_selector.SelectNext(); + } + else + { + _errorSound?.Play(); + } + + //var spaceState = GetWorld2D().DirectSpaceState; + + //var query = PhysicsRayQueryParameters2D.Create(Vector2.Zero, ) + } + + private void _on_interaction_controller_area_entered(Area2D area) + { + if (!Enabled) return; + if (area.IsInGroup("Interactable") && area is Interactable interactable && interactable.CanActivate()) + { + EmitSignal(nameof(InteractableAreaEntered), interactable); + + if (_selector == null) return; + + _selector.AddInteractable(interactable); + + //_selector.SelectedInteractable = interactable; + + } + } + + private void _on_interaction_controller_area_exited(Area2D area) + { + if (!Enabled) return; + if (area.IsInGroup("Interactable") && area is Interactable interactable) + { + EmitSignal(nameof(InteractableAreaExited), interactable); + + if (_selector == null) return; + _selector.RemoveInteractable(interactable); + } + } +} \ No newline at end of file diff --git a/Scripts/Components/Actors/ActivationProvider.cs.uid b/Scripts/Components/Actors/ActivationProvider.cs.uid new file mode 100644 index 00000000..75481fe6 --- /dev/null +++ b/Scripts/Components/Actors/ActivationProvider.cs.uid @@ -0,0 +1 @@ +uid://dv205x8msohpv diff --git a/Scripts/Components/Actors/InputProvider.cs b/Scripts/Components/Actors/InputProvider.cs index a84faef6..11556bc9 100644 --- a/Scripts/Components/Actors/InputProvider.cs +++ b/Scripts/Components/Actors/InputProvider.cs @@ -12,6 +12,7 @@ public abstract partial class InputProvider : Node2D public abstract bool GetShootPressed(); public abstract bool GetUseJustPressed(); + public abstract bool GetScanJustPressed(); public abstract bool GetStrafePressed(); public abstract bool GetWeaponNextJustPressed(); public abstract bool GetWeaponPreviousJustPressed(); diff --git a/Scripts/Components/Actors/KeyboardInputProvider.cs b/Scripts/Components/Actors/KeyboardInputProvider.cs index 931c24ec..06f32dd1 100644 --- a/Scripts/Components/Actors/KeyboardInputProvider.cs +++ b/Scripts/Components/Actors/KeyboardInputProvider.cs @@ -27,6 +27,7 @@ public partial class KeyboardInputProvider : InputProvider [ExportCategory("Action Names")] [Export] private string _shootActionName = "shoot"; [Export] private string _useActionName = "Use"; + [Export] private string _scanActionName = "scan"; [Export] private string _strafeActionName = "strafe"; [Export] private string _nextWeaponActionName = "next_weapon"; [Export] private string _previousWeaponActionName = "previous_weapon"; @@ -68,6 +69,10 @@ public partial class KeyboardInputProvider : InputProvider { return GetActionJustPressed(_useActionName); } + public override bool GetScanJustPressed() + { + return GetActionJustPressed(_scanActionName); + } public override bool GetStrafePressed() { diff --git a/Scripts/Components/FSM/Player/Active.cs b/Scripts/Components/FSM/Player/Active.cs index a9c6ab1a..8d2b4a29 100644 --- a/Scripts/Components/FSM/Player/Active.cs +++ b/Scripts/Components/FSM/Player/Active.cs @@ -28,6 +28,7 @@ public partial class Active : PlayerFSMState private InputProvider _inputProvider; [Export] private PlayerDamageReceiver _damageReceiver; + [Export] private ActivationProvider _activationProvider; private bool _isStrafing; @@ -58,6 +59,8 @@ public partial class Active : PlayerFSMState _damageReceiver.Init(); + _activationProvider.Init(); + //_weaponProvider = stateMachine.GetNode("WeaponProvider"); //_animationProvider = stateMachine.GetNode("AnimationProvider"); @@ -71,6 +74,7 @@ public partial class Active : PlayerFSMState _crosshairProvider.Show(); _damageReceiver.Enabled = true; + _activationProvider.Enabled = true; } public override void ExitState() @@ -80,6 +84,7 @@ public partial class Active : PlayerFSMState _hitboxSpriteProvider.Hide(); _damageReceiver.Enabled = false; + _activationProvider.Enabled = false; } public override void PhysicsProcessState(double delta) @@ -117,6 +122,8 @@ public partial class Active : PlayerFSMState _crosshairProvider.UpdatePosition(FacingDirection); HandleShoot(); + + HandleInteraction(); // FindInteractable(); // _crosshair.Position = CalculateCrosshairPosition(); @@ -129,5 +136,8 @@ public partial class Active : PlayerFSMState _weaponProvider.Shoot(this.FacingDirection); } - + private void HandleInteraction() + { + _activationProvider.HandleInteraction(); + } } diff --git a/Scripts/Components/FSM/Player/Controlling.cs b/Scripts/Components/FSM/Player/Controlling.cs new file mode 100644 index 00000000..5f87aa19 --- /dev/null +++ b/Scripts/Components/FSM/Player/Controlling.cs @@ -0,0 +1,29 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM.Player; + +public partial class Controlling : PlayerFSMState +{ + [Export] + private PlayerAnimationProvider _animationProvider; + + public override void EnterState() + { + + } + + public override void ExitState() + { + + } + + public override void ProcessState(double delta) + { + + } + + public override void PhysicsProcessState(double delta) + { + + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Player/Controlling.cs.uid b/Scripts/Components/FSM/Player/Controlling.cs.uid new file mode 100644 index 00000000..00d94785 --- /dev/null +++ b/Scripts/Components/FSM/Player/Controlling.cs.uid @@ -0,0 +1 @@ +uid://bwtcgcvfw8urt diff --git a/Scripts/Components/FSM/Player/Cutscene.cs b/Scripts/Components/FSM/Player/Cutscene.cs new file mode 100644 index 00000000..8bb1d064 --- /dev/null +++ b/Scripts/Components/FSM/Player/Cutscene.cs @@ -0,0 +1,29 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM.Player; + +public partial class Cutscene : PlayerFSMState +{ + [Export] + private PlayerAnimationProvider _animationProvider; + + public override void EnterState() + { + + } + + public override void ExitState() + { + + } + + public override void ProcessState(double delta) + { + + } + + public override void PhysicsProcessState(double delta) + { + + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Player/Cutscene.cs.uid b/Scripts/Components/FSM/Player/Cutscene.cs.uid new file mode 100644 index 00000000..736914e6 --- /dev/null +++ b/Scripts/Components/FSM/Player/Cutscene.cs.uid @@ -0,0 +1 @@ +uid://dn2rrgw3e027b diff --git a/Scripts/Components/FSM/Player/Dead.cs b/Scripts/Components/FSM/Player/Dead.cs index 29b5b8ea..f6d25dbb 100644 --- a/Scripts/Components/FSM/Player/Dead.cs +++ b/Scripts/Components/FSM/Player/Dead.cs @@ -6,19 +6,28 @@ public partial class Dead : PlayerFSMState { [Export] private PlayerAnimationProvider _animationProvider; + + public override void Init(ActorStateMachine stateMachine) + { + base.Init(stateMachine); + // get hud? + + } public override void EnterState() { _animationProvider.PlayDeathAnimation(); + // show game over } public override void ExitState() { - + // Hide game over } public override void ProcessState(double delta) { + // wait for button } diff --git a/Scripts/Components/FSM/Player/Teleporting.cs b/Scripts/Components/FSM/Player/Teleporting.cs new file mode 100644 index 00000000..51fb647f --- /dev/null +++ b/Scripts/Components/FSM/Player/Teleporting.cs @@ -0,0 +1,29 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM.Player; + +public partial class Teleporting : PlayerFSMState +{ + [Export] + private PlayerAnimationProvider _animationProvider; + + public override void EnterState() + { + + } + + public override void ExitState() + { + + } + + public override void ProcessState(double delta) + { + + } + + public override void PhysicsProcessState(double delta) + { + + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Player/Teleporting.cs.uid b/Scripts/Components/FSM/Player/Teleporting.cs.uid new file mode 100644 index 00000000..313a852a --- /dev/null +++ b/Scripts/Components/FSM/Player/Teleporting.cs.uid @@ -0,0 +1 @@ +uid://b0khv2fcrgm6t diff --git a/Scripts/PlayerMovement.cs b/Scripts/PlayerMovement.cs index 74557f5e..f4c2b1ca 100644 --- a/Scripts/PlayerMovement.cs +++ b/Scripts/PlayerMovement.cs @@ -584,6 +584,7 @@ public enum PlayerState Init, Active, Cutscene, + Teleporting, Controlling, Dead, } \ No newline at end of file diff --git a/Scripts/Selector.cs b/Scripts/Selector.cs index 7afdf4cd..428b9816 100644 --- a/Scripts/Selector.cs +++ b/Scripts/Selector.cs @@ -42,22 +42,22 @@ public partial class Selector : Node2D } } - public override void _Process(double delta) - { - if (Input.IsActionJustPressed("scan")) - { - SelectNext(); - } - - // if (SelectedInteractable is not null) { - // this.Visible = true; - // this.GlobalPosition = SelectedInteractable.GlobalPosition; - // } - // else - // { - // this.Visible = false; - // } - } + // public override void _Process(double delta) + // { + // if (Input.IsActionJustPressed("scan")) + // { + // SelectNext(); + // } + // + // // if (SelectedInteractable is not null) { + // // this.Visible = true; + // // this.GlobalPosition = SelectedInteractable.GlobalPosition; + // // } + // // else + // // { + // // this.Visible = false; + // // } + // } public void SelectNext() {