forked from UVASGD/student-game-developers-at-uva-spring-2025-student-game-developers-at-uva-fall-2024-ProjectTemplate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmusic.gd
106 lines (92 loc) · 2.76 KB
/
music.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
extends Node
@onready var songplayers = {} # dict with keys = song name (string), and values = AudioStreamPlayer2D
@onready var songplayers_snow = {}
@onready var songplayers_rain = {}
var path_to_music_dir = "res://assets/audio/music/"
var current_playing = null
var fade_duration = 5
var playlisting_random = false
enum{INFINITE}
var mode = null
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
load_music()
SignalBus.connect("play_random_song", play_random)
SignalBus.connect("snow_start", _on_snow_start)
SignalBus.connect("snow_end", _on_snow_end)
SignalBus.connect("rain_start", _on_rain_start)
SignalBus.connect("rain_end", _on_rain_end)
pass # Replace with function body.
func load_music():
var dir = DirAccess.open(path_to_music_dir)
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if file_name.ends_with(".mp3") or file_name.ends_with(".wav"):
var file_path = path_to_music_dir + file_name
var stream = load(file_path) as AudioStream
if stream:
var player = AudioStreamPlayer.new()
player.stream = stream
player.bus = "music"
var song_name = file_name.get_basename()
if song_name.contains("rain"):
songplayers_rain[song_name] = player
if song_name.contains("snow"):
songplayers_snow[song_name] = player
songplayers[song_name] = player
add_child(player) # Add the player to the scene tree
file_name = dir.get_next()
dir.list_dir_end()
func play(songname: String):
await fade_out()
var song = songplayers.get(songname)
if song:
current_playing = song
song.play()
song.connect("finished",_on_song_finish)
func set_mode(newmode):
mode = newmode
func _on_song_finish():
current_playing = null
if mode == INFINITE:
play_random()
func play_random():
var keys = songplayers.keys()
if keys.size() > 0:
var random_songname = keys[randi() % keys.size()]
play(random_songname)
return
func fade_out():
if current_playing:
var tween = get_tree().create_tween()
tween.tween_property(current_playing, "volume_db", current_playing.volume_db-80, fade_duration)
await tween.finished
current_playing.stop()
current_playing.volume_db = 0 # Reset volume for next play
current_playing = null
return
func play_random_snow():
var keys = songplayers_snow.keys()
if keys.size() > 0:
var random_songname = keys[randi() % keys.size()]
play(random_songname)
func play_random_rain():
#var keys = songplayers_rain.keys()
#if keys.size() > 0:
#var random_songname = keys[randi() % keys.size()]
#play(random_songname)
play("rainy_paws")
func _on_snow_start():
play_random_snow()
return
func _on_snow_end():
play_random()
return
func _on_rain_start():
play_random_rain()
return
func _on_rain_end():
play_random()
return