From 46402401b4b6b9733eff795d61cffb468d778bb9 Mon Sep 17 00:00:00 2001 From: Zenny Date: Wed, 26 Nov 2025 02:33:03 -0800 Subject: [PATCH] Add basic implementation for footsteps Add disengage to eden pillar Fix level up sound effect trigger --- .../src/Components/ExperiencePointsComponent.cs | 1 + .../src/audio/sfx/player_steps_concrete.ogg.import | 6 +++--- .../enemy_types/10. Eden Pillar/Eden Pillar.tscn | 13 ++++++++++++- .../enemy/enemy_types/10. Eden Pillar/EdenPillar.cs | 5 +++++ Zennysoft.Game.Ma/src/player/Player.cs | 7 ++++++- Zennysoft.Game.Ma/src/player/Player.tscn | 7 ++++++- 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/Zennysoft.Game.Ma/src/Components/ExperiencePointsComponent.cs b/Zennysoft.Game.Ma/src/Components/ExperiencePointsComponent.cs index cf0a41c6..bb731213 100644 --- a/Zennysoft.Game.Ma/src/Components/ExperiencePointsComponent.cs +++ b/Zennysoft.Game.Ma/src/Components/ExperiencePointsComponent.cs @@ -52,6 +52,7 @@ public class ExperiencePointsComponent : IExperiencePointsComponent public void LevelUp() { + SfxDatabase.Instance.Play(SoundEffect.LevelUp); _level.OnNext(_level.Value + 1); var expToNextLevel = ExpToNextLevelCalculation(_level.Value); _currentExp.OnNext(_currentExp.Value - _expToNextLevel.Value); diff --git a/Zennysoft.Game.Ma/src/audio/sfx/player_steps_concrete.ogg.import b/Zennysoft.Game.Ma/src/audio/sfx/player_steps_concrete.ogg.import index 6d59be15..ef04abdf 100644 --- a/Zennysoft.Game.Ma/src/audio/sfx/player_steps_concrete.ogg.import +++ b/Zennysoft.Game.Ma/src/audio/sfx/player_steps_concrete.ogg.import @@ -12,8 +12,8 @@ dest_files=["res://.godot/imported/player_steps_concrete.ogg-2210939b45b35c9b2fc [params] -loop=false -loop_offset=0 -bpm=0 +loop=true +loop_offset=0.0 +bpm=0.0 beat_count=0 bar_beats=4 diff --git a/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn b/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn index d95792c8..aaea93ad 100644 --- a/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn +++ b/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/Eden Pillar.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=3 uid="uid://cmvimr0pvsgqy"] +[gd_scene load_steps=17 format=3 uid="uid://cmvimr0pvsgqy"] [ext_resource type="Script" uid="uid://d2m7esc5ypl7y" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs" id="1_p8jc1"] [ext_resource type="PackedScene" uid="uid://cktycana6xxtp" path="res://src/enemy/enemy_types/10. Eden Pillar/EdenPillarModelView.tscn" id="3_o285m"] @@ -27,6 +27,9 @@ radius = 0.886719 [sub_resource type="CylinderShape3D" id="CylinderShape3D_xdeci"] radius = 7.98633 +[sub_resource type="CylinderShape3D" id="CylinderShape3D_t4xb3"] +radius = 20.0 + [node name="Eden Pillar" type="CharacterBody3D"] collision_layer = 10 collision_mask = 0 @@ -131,3 +134,11 @@ collision_mask = 32 [node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"] shape = SubResource("CylinderShape3D_xdeci") + +[node name="LoseTrackOfPlayer" type="Area3D" parent="."] +unique_name_in_owner = true +collision_layer = 0 +collision_mask = 32 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="LoseTrackOfPlayer"] +shape = SubResource("CylinderShape3D_t4xb3") diff --git a/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs b/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs index 6e8a8ce8..3660a15c 100644 --- a/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs +++ b/Zennysoft.Game.Ma/src/enemy/enemy_types/10. Eden Pillar/EdenPillar.cs @@ -38,6 +38,8 @@ public partial class EdenPillar : Enemy3D, IHasPrimaryAttack, IHasSecondaryAttac [Node] public Area3D PlayerDetector { get; set; } = default!; + [Node] public Area3D LoseTrackOfPlayer { get; set; } = default!; + [Node] public EngagePlayerBehavior EngagePlayerBehavior { get; set; } = default!; @@ -50,10 +52,13 @@ public partial class EdenPillar : Enemy3D, IHasPrimaryAttack, IHasSecondaryAttac public void OnReady() { PlayerDetector.BodyEntered += PlayerDetector_BodyEntered; + LoseTrackOfPlayer.BodyExited += LoseTrackOfPlayer_BodyExited; EngagePlayerBehavior.TakeAction += PerformAction; HealthComponent.HealthReachedZero += HealthComponent_HealthReachedZero; } + private void LoseTrackOfPlayer_BodyExited(Node3D body) => EngagePlayerBehavior.Disengage(); + private void HealthComponent_HealthReachedZero() { StoneRotation.Stop(); diff --git a/Zennysoft.Game.Ma/src/player/Player.cs b/Zennysoft.Game.Ma/src/player/Player.cs index 6274e701..c97ac584 100644 --- a/Zennysoft.Game.Ma/src/player/Player.cs +++ b/Zennysoft.Game.Ma/src/player/Player.cs @@ -81,6 +81,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide [Node] private Timer HealthTimer { get; set; } = default!; [Node] private RigidBody3D WallCheck { get; set; } = default!; + + [Node] private AudioStreamPlayer3D WalkSFX { get; set; } = default!; #endregion @@ -207,7 +209,6 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide var hpIncrease = rng.RandiRange(3, 6); HealthComponent.RaiseMaximumHP(hpIncrease); ExperiencePointsComponent.LevelUp(); - SfxDatabase.Instance.Play(SoundEffect.LevelUp); } public void Die() @@ -324,6 +325,10 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide _knockbackStrength *= 0.9f; Transform = Transform with { Basis = transform.Basis }; Velocity = velocity + (_knockbackDirection * _knockbackStrength); + if (!WalkSFX.Playing && !Velocity.IsZeroApprox()) + WalkSFX.Play(); + else if (Velocity.IsZeroApprox()) + WalkSFX.Stop(); MoveAndSlide(); } diff --git a/Zennysoft.Game.Ma/src/player/Player.tscn b/Zennysoft.Game.Ma/src/player/Player.tscn index 9c42a1a3..38e062e5 100644 --- a/Zennysoft.Game.Ma/src/player/Player.tscn +++ b/Zennysoft.Game.Ma/src/player/Player.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=54 format=3 uid="uid://cfecvvav8kkp6"] +[gd_scene load_steps=55 format=3 uid="uid://cfecvvav8kkp6"] [ext_resource type="Script" uid="uid://yxmiqy7i0t7r" path="res://src/player/Player.cs" id="1_xcol5"] [ext_resource type="AudioStream" uid="uid://cth2xgoqhdf0m" path="res://src/audio/sfx/player_hit_wall.ogg" id="3_565yv"] [ext_resource type="Texture2D" uid="uid://c4ps26w7h3vpq" path="res://src/minimap/textures/player_map_icon.png" id="4_3ojaj"] [ext_resource type="Texture2D" uid="uid://2ig1arptr1e8" path="res://src/vfx/Items Etc/slash_2.png" id="4_v7rlw"] [ext_resource type="Texture2D" uid="uid://qhxl3nejqlk1" path="res://src/vfx/World/DUST_1.png" id="5_v5qoq"] +[ext_resource type="AudioStream" uid="uid://bsprdc3ka6am0" path="res://src/audio/sfx/player_steps_concrete.ogg" id="6_v7rlw"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_dw45s"] radius = 1.0 @@ -631,3 +632,7 @@ animation = &"sample" [node name="HitWallSound" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true bus = &"SFX" + +[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] +unique_name_in_owner = true +stream = ExtResource("6_v7rlw")