SE manager working. Mushroom pew now pows.

This commit is contained in:
Dustin 2025-06-01 17:10:04 -07:00
parent 9cf13cc5b8
commit e2c77b05e3
5 changed files with 60 additions and 1 deletions

View File

@ -0,0 +1,53 @@
extends Node
export (int) var player_count = 5
class SoundRequest:
var stream
var priority = 0
func _init(_stream: AudioStream, _priority: int = 0):
stream = _stream
priority = _priority
var players := []
var sound_queue := []
func _ready():
## Singletons don't run process unless explicitly enabled
set_process(true)
for i in range(player_count):
var player = AudioStreamPlayer.new()
add_child(player)
players.append(player)
func play_sound(stream: AudioStream, priority: int = 0):
# Try to find an available player
for i in range(player_count):
if not players[i].playing:
players[i].stream = stream
players[i].play()
return
##TODO: This may be slow, perhaps just a pop push front is good enough
# No player is available, add to queue
sound_queue.append(SoundRequest.new(stream, priority))
# Sort queue by priority (descending)
sound_queue.sort_custom(self, "_sort_by_priority")
func _process(_delta):
if sound_queue.empty():
return
for i in range(player_count):
if not players[i].playing:
var request = sound_queue.pop_front()
players[i].stream = request.stream
players[i].play()
# only play one queued sound per frame
break
func _sort_by_priority(a: SoundRequest, b: SoundRequest) -> bool:
return a.priority > b.priority

View File

@ -224,6 +224,7 @@ PlayerInfo="*res://lib/singleton_autoloads/PlayerInfo.gd"
UiManager="*res://lib/singleton_autoloads/UIManager.gd" UiManager="*res://lib/singleton_autoloads/UIManager.gd"
LevelInfo="*res://lib/singleton_autoloads/LevelInfo.gd" LevelInfo="*res://lib/singleton_autoloads/LevelInfo.gd"
NetworkManager="*res://lib/singleton_autoloads/NetworkManager.gd" NetworkManager="*res://lib/singleton_autoloads/NetworkManager.gd"
SoundEffectManager="*res://lib/singleton_autoloads/SoundEffectManager.gd"
[debug] [debug]

View File

@ -9,6 +9,7 @@ extends Area2D
export var velocity_pps :float = 1 export var velocity_pps :float = 1
export var lifespan :float = -1 export var lifespan :float = -1
export var sound_effect :AudioStream
var direction_normal := Vector2(0,0) var direction_normal := Vector2(0,0)
puppet var puppet_direction_normal :Vector2 puppet var puppet_direction_normal :Vector2
puppet var puppet_position puppet var puppet_position

View File

@ -62,8 +62,10 @@ func shoot(direction = 1):
bullet.set_as_toplevel(true) bullet.set_as_toplevel(true)
add_child(bullet) add_child(bullet)
# sound_shoot.play() # sound_shoot.play()
timer.start() timer.start()
SoundEffectManager.play_sound(bullet.sound_effect)
NetworkManager.instance_on_peer_players(loaded_scene, self.get_path(), global_position , true) NetworkManager.instance_on_peer_players(loaded_scene, self.get_path(), global_position , true)
return true return true

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=4 format=2] [gd_scene load_steps=5 format=2]
[ext_resource path="res://src/parent_scenes/projectile.tscn" type="PackedScene" id=1] [ext_resource path="res://src/parent_scenes/projectile.tscn" type="PackedScene" id=1]
[ext_resource path="res://assets/items/mushroom_icon.png" type="Texture" id=2] [ext_resource path="res://assets/items/mushroom_icon.png" type="Texture" id=2]
[ext_resource path="res://assets_tmp/SE/pop.wav" type="AudioStream" id=3]
[sub_resource type="CapsuleShape2D" id=1] [sub_resource type="CapsuleShape2D" id=1]
radius = 6.0 radius = 6.0
@ -10,6 +11,7 @@ height = 2.0
[node name="MushroomPew" groups=["world"] instance=ExtResource( 1 )] [node name="MushroomPew" groups=["world"] instance=ExtResource( 1 )]
velocity_pps = 300.0 velocity_pps = 300.0
lifespan = 0.5 lifespan = 0.5
sound_effect = ExtResource( 3 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="0"] [node name="CollisionShape2D" type="CollisionShape2D" parent="." index="0"]
shape = SubResource( 1 ) shape = SubResource( 1 )