From bb470d01884020b4f99d7d30de5acfdf325da8bf Mon Sep 17 00:00:00 2001 From: outfrost Date: Mon, 26 Apr 2021 02:26:15 +0200 Subject: [PATCH] Add walk sounds and audio bus setup --- character/Enemy.gd | 19 ++++++++++++++-- character/Enemy.tscn | 32 +++++++++++++++++++++++++- character/PlayerCharacter.gd | 12 ++++++++++ character/PlayerCharacter.tscn | 28 ++++++++++++++++++++++- default_bus_layout.tres | 41 ++++++++++++++++++++++++++++++++++ 5 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 default_bus_layout.tres diff --git a/character/Enemy.gd b/character/Enemy.gd index 82b5746..3ff1f95 100644 --- a/character/Enemy.gd +++ b/character/Enemy.gd @@ -1,5 +1,8 @@ extends KinematicBody2D +export var walk_sounds: Array +export var walk_sound_interval: float = 0.5 + var health = 100.0 var attack_range: float = 30.0 @@ -13,6 +16,8 @@ var run_speed: float = 50.0 var nearest_player = null onready var home = self.position +var walk_sound_timer: float = 0.0 + func take_damage(dmg: float): health -= dmg if health <= 0.0: @@ -22,7 +27,7 @@ func set_target(player: KinematicBody2D): nearest_player = player func _physics_process(delta:float): - + walk_sound_timer += delta if nearest_player: @@ -30,6 +35,7 @@ func _physics_process(delta:float): var towardsplayer = ((nearest_player.global_position - self.global_position).normalized() * self.run_speed) move_and_slide(towardsplayer) + try_play_walk_sound() var collision = move_and_collide((nearest_player.global_position - self.global_position).normalized() * self.attack_range,true,true,true) @@ -41,7 +47,10 @@ func _physics_process(delta:float): else: var towardshome = ((home - self.position).normalized() * self.run_speed) move_and_slide(towardshome) - + if (home - self.position).length_squared() > 4.0: + try_play_walk_sound() + else: + walk_sound_timer = 0.0 func _process(delta:float): if nearest_player: @@ -49,3 +58,9 @@ func _process(delta:float): DebugLabel.display(self, ((nearest_player.position - self.position).normalized() * self.run_speed)) else: pass + +func try_play_walk_sound(): + if walk_sound_timer > walk_sound_interval: + walk_sound_timer = 0.0 + if walk_sounds.size() > 0: + get_node(walk_sounds[randi() % walk_sounds.size()]).play() diff --git a/character/Enemy.tscn b/character/Enemy.tscn index a4cab2a..f048203 100644 --- a/character/Enemy.tscn +++ b/character/Enemy.tscn @@ -1,13 +1,19 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://character/Enemy_SpriteFrames.tres" type="SpriteFrames" id=1] [ext_resource path="res://character/Enemy.gd" type="Script" id=2] +[ext_resource path="res://sound/positional/SFX_EnemyWalk_4.wav" type="AudioStream" id=3] +[ext_resource path="res://sound/positional/SFX_EnemyWalk_1.wav" type="AudioStream" id=4] +[ext_resource path="res://sound/positional/SFX_EnemyWalk_3.wav" type="AudioStream" id=5] +[ext_resource path="res://sound/positional/SFX_EnemyWalk_2.wav" type="AudioStream" id=6] [sub_resource type="CircleShape2D" id=1] radius = 16.0 [node name="Enemy" type="KinematicBody2D"] script = ExtResource( 2 ) +walk_sounds = [ NodePath("AudioStreamPlayer2DWalk1"), NodePath("AudioStreamPlayer2DWalk2"), NodePath("AudioStreamPlayer2DWalk3"), NodePath("AudioStreamPlayer2DWalk4") ] +walk_sound_interval = 0.32 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) @@ -16,3 +22,27 @@ shape = SubResource( 1 ) frames = ExtResource( 1 ) playing = true offset = Vector2( 0, -16 ) + +[node name="AudioStreamPlayer2DWalk1" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource( 4 ) +volume_db = -6.0 +max_distance = 250.0 +bus = "Effects" + +[node name="AudioStreamPlayer2DWalk2" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource( 6 ) +volume_db = -6.0 +max_distance = 250.0 +bus = "Effects" + +[node name="AudioStreamPlayer2DWalk3" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource( 5 ) +volume_db = -6.0 +max_distance = 250.0 +bus = "Effects" + +[node name="AudioStreamPlayer2DWalk4" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource( 3 ) +volume_db = -6.0 +max_distance = 250.0 +bus = "Effects" diff --git a/character/PlayerCharacter.gd b/character/PlayerCharacter.gd index fcb953f..19d6035 100644 --- a/character/PlayerCharacter.gd +++ b/character/PlayerCharacter.gd @@ -2,6 +2,8 @@ extends KinematicBody2D export var run_speed: float = 50.0 export var attack_range: float = 32.0 +export var walk_sounds: Array +export var walk_sound_interval: float = 0.5 onready var sprite: AnimatedSprite = $AnimatedSprite @@ -16,10 +18,14 @@ var health: float = 100.00 var basic_attack_dmg: float = 40.0 +var walk_sound_timer: float = 0.0 + func _ready() -> void: $AnimatedSprite.playing = true func _physics_process(delta: float) -> void: + walk_sound_timer += delta + var direction = Vector2( Input.get_action_strength("move_right") - Input.get_action_strength("move_left"), Input.get_action_strength("move_down") - Input.get_action_strength("move_up") @@ -28,6 +34,12 @@ func _physics_process(delta: float) -> void: if moving: last_movement_dir = direction.normalized() + if walk_sound_timer > walk_sound_interval: + walk_sound_timer = 0.0 + if walk_sounds.size() > 0: + get_node(walk_sounds[randi() % walk_sounds.size()]).play() + else: + walk_sound_timer = 0.0 move_and_slide(direction * run_speed) # game_controller.camera_offset = direction * run_speed * 0.5 diff --git a/character/PlayerCharacter.tscn b/character/PlayerCharacter.tscn index 9da7fda..08c4900 100644 --- a/character/PlayerCharacter.tscn +++ b/character/PlayerCharacter.tscn @@ -1,8 +1,12 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://character/PlayerCharacter.gd" type="Script" id=1] [ext_resource path="res://character/PlayerCharacter_SpriteFrames.tres" type="SpriteFrames" id=2] [ext_resource path="res://game/MainCamera.gd" type="Script" id=3] +[ext_resource path="res://sound/static/SFX_GrassWalk_3.wav" type="AudioStream" id=4] +[ext_resource path="res://sound/static/SFX_GrassWalk_4.wav" type="AudioStream" id=5] +[ext_resource path="res://sound/static/SFX_GrassWalk_2.wav" type="AudioStream" id=6] +[ext_resource path="res://sound/static/SFX_GrassWalk_1.wav" type="AudioStream" id=7] [sub_resource type="CircleShape2D" id=1] radius = 16.0 @@ -10,6 +14,8 @@ radius = 16.0 [node name="PlayerCharacter" type="KinematicBody2D"] script = ExtResource( 1 ) run_speed = 70.0 +walk_sounds = [ NodePath("AudioStreamPlayerWalk1"), NodePath("AudioStreamPlayerWalk2"), NodePath("AudioStreamPlayerWalk3"), NodePath("AudioStreamPlayerWalk4") ] +walk_sound_interval = 0.32 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) @@ -22,3 +28,23 @@ offset = Vector2( 0, -16 ) [node name="Camera2D" type="Camera2D" parent="."] current = true script = ExtResource( 3 ) + +[node name="AudioStreamPlayerWalk1" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 7 ) +volume_db = -10.0 +bus = "Effects" + +[node name="AudioStreamPlayerWalk2" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 6 ) +volume_db = -10.0 +bus = "Effects" + +[node name="AudioStreamPlayerWalk3" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 4 ) +volume_db = -10.0 +bus = "Effects" + +[node name="AudioStreamPlayerWalk4" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 5 ) +volume_db = -10.0 +bus = "Effects" diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..2fb2810 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,41 @@ +[gd_resource type="AudioBusLayout" load_steps=2 format=2] + +[sub_resource type="AudioEffectEQ" id=1] +resource_name = "EQ" +band_db/32_hz = -10.0 +band_db/100_hz = -10.0 +band_db/1000_hz = -6.0 + +[resource] +bus/1/name = "Effects" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = "Master" +bus/1/effect/0/effect = SubResource( 1 ) +bus/1/effect/0/enabled = true +bus/2/name = "MusicMenu" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = 0.0 +bus/2/send = "Master" +bus/3/name = "MusicCamp" +bus/3/solo = false +bus/3/mute = false +bus/3/bypass_fx = false +bus/3/volume_db = 0.0 +bus/3/send = "Master" +bus/4/name = "MusicExpl" +bus/4/solo = false +bus/4/mute = false +bus/4/bypass_fx = false +bus/4/volume_db = 0.0 +bus/4/send = "Master" +bus/5/name = "MusicCombat" +bus/5/solo = false +bus/5/mute = false +bus/5/bypass_fx = false +bus/5/volume_db = 0.0 +bus/5/send = "Master"