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"
|
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]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 )
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user