SE manager working. Mushroom pew now pows.
This commit is contained in:
parent
9cf13cc5b8
commit
e2c77b05e3
53
lib/singleton_autoloads/SoundEffectManager.gd
Normal file
53
lib/singleton_autoloads/SoundEffectManager.gd
Normal 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
|
||||
|
||||
|
|
@ -224,6 +224,7 @@ PlayerInfo="*res://lib/singleton_autoloads/PlayerInfo.gd"
|
|||
UiManager="*res://lib/singleton_autoloads/UIManager.gd"
|
||||
LevelInfo="*res://lib/singleton_autoloads/LevelInfo.gd"
|
||||
NetworkManager="*res://lib/singleton_autoloads/NetworkManager.gd"
|
||||
SoundEffectManager="*res://lib/singleton_autoloads/SoundEffectManager.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ extends Area2D
|
|||
|
||||
export var velocity_pps :float = 1
|
||||
export var lifespan :float = -1
|
||||
export var sound_effect :AudioStream
|
||||
var direction_normal := Vector2(0,0)
|
||||
puppet var puppet_direction_normal :Vector2
|
||||
puppet var puppet_position
|
||||
|
|
|
|||
|
|
@ -62,8 +62,10 @@ func shoot(direction = 1):
|
|||
|
||||
bullet.set_as_toplevel(true)
|
||||
add_child(bullet)
|
||||
|
||||
# sound_shoot.play()
|
||||
timer.start()
|
||||
SoundEffectManager.play_sound(bullet.sound_effect)
|
||||
|
||||
NetworkManager.instance_on_peer_players(loaded_scene, self.get_path(), global_position , true)
|
||||
return true
|
||||
|
|
|
|||
|
|
@ -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://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]
|
||||
radius = 6.0
|
||||
|
|
@ -10,6 +11,7 @@ height = 2.0
|
|||
[node name="MushroomPew" groups=["world"] instance=ExtResource( 1 )]
|
||||
velocity_pps = 300.0
|
||||
lifespan = 0.5
|
||||
sound_effect = ExtResource( 3 )
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="0"]
|
||||
shape = SubResource( 1 )
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user