Skip to content

Commit 3da5b0a

Browse files
Merge pull request #269 from Daniel-Cortez/music-controller
Implement MusicController
2 parents 211f5df + 1a9d355 commit 3da5b0a

16 files changed

Lines changed: 412 additions & 191 deletions

File tree

Entities/Misc/HUD.tscn

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[gd_scene load_steps=32 format=3 uid="uid://c30uceea18q1w"]
1+
[gd_scene load_steps=31 format=3 uid="uid://c30uceea18q1w"]
22

33
[ext_resource type="Material" uid="uid://bveqi5m5ihsgj" path="res://Shaders/PlayerPalette.tres" id="2_xy7bp"]
44
[ext_resource type="FontFile" uid="uid://cj70hn8i05uo5" path="res://Graphics/HUD/hud_lives_numerals.png" id="3_eauoj"]
@@ -16,7 +16,6 @@
1616
[ext_resource type="PackedScene" uid="uid://bass3w6af55vw" path="res://Tools/Timing/ProcessTimer.tscn" id="13_g84gd"]
1717
[ext_resource type="Texture2D" uid="uid://60ak1q0xrn1s" path="res://Graphics/HUD/hud_gametimeover.png" id="15_oja0m"]
1818
[ext_resource type="AudioStream" uid="uid://dh4rsaka62ph4" path="res://Audio/SFX/Gimmicks/Switch.wav" id="16"]
19-
[ext_resource type="AudioStream" uid="uid://dnyw7remih6op" path="res://Audio/Soundtrack/8. SWD_GameOver.ogg" id="16_vq3lx"]
2019
[ext_resource type="AudioStream" uid="uid://clgobastngtvy" path="res://Audio/SFX/Misc/Score.wav" id="17"]
2120

2221
[sub_resource type="Animation" id="5"]
@@ -1001,10 +1000,6 @@ libraries = {
10011000
"": SubResource("AnimationLibrary_dmnhc")
10021001
}
10031002

1004-
[node name="GameOverMusic" type="AudioStreamPlayer" parent="GameOver"]
1005-
stream = ExtResource("16_vq3lx")
1006-
bus = &"Music"
1007-
10081003
[node name="Water" type="CanvasLayer" parent="."]
10091004

10101005
[node name="WaterOverlay" type="ColorRect" parent="Water"]

Scene/Main.tscn

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
[gd_scene load_steps=16 format=3 uid="uid://byje3iiukvt4p"]
1+
[gd_scene load_steps=12 format=3 uid="uid://byje3iiukvt4p"]
22

3-
[ext_resource type="AudioStream" uid="uid://dec4ik84l88go" path="res://Audio/Soundtrack/2. SWD_SpeedUp.ogg" id="1"]
43
[ext_resource type="Script" path="res://Scripts/Global/Main.gd" id="2"]
5-
[ext_resource type="AudioStream" uid="uid://b30ai1lqlh32u" path="res://Audio/Soundtrack/3. SWD_1Up.ogg" id="3"]
64
[ext_resource type="PackedScene" uid="uid://c58ontqoxjuti" path="res://Scene/Presentation/PoweredByWorlds.tscn" id="4"]
7-
[ext_resource type="AudioStream" uid="uid://o4f15hnb5thp" path="res://Audio/Soundtrack/7. SWD_Drowning.ogg" id="5"]
85
[ext_resource type="PackedScene" uid="uid://b2xskcomtpo2x" path="res://Entities/Misc/ControllerMenu.tscn" id="6"]
96
[ext_resource type="PackedScene" uid="uid://c1xhc4uh26inb" path="res://Entities/Misc/PauseMenu.tscn" id="7"]
10-
[ext_resource type="AudioStream" uid="uid://25oy5g80wsxu" path="res://Audio/Soundtrack/5. SWD_Boss.ogg" id="8"]
117

128
[sub_resource type="CanvasItemMaterial" id="1"]
139

@@ -141,29 +137,6 @@ process_mode = 1
141137

142138
[node name="PoweredByWorlds" parent="SceneLoader" instance=ExtResource("4")]
143139

144-
[node name="Music" type="Node" parent="."]
145-
process_mode = 1
146-
147-
[node name="Music" type="AudioStreamPlayer" parent="Music"]
148-
autoplay = true
149-
bus = &"Music"
150-
151-
[node name="BossTheme" type="AudioStreamPlayer" parent="Music"]
152-
stream = ExtResource("8")
153-
bus = &"Music"
154-
155-
[node name="EffectTheme" type="AudioStreamPlayer" parent="Music"]
156-
stream = ExtResource("1")
157-
bus = &"Music"
158-
159-
[node name="Drowning" type="AudioStreamPlayer" parent="Music"]
160-
stream = ExtResource("5")
161-
bus = &"Music"
162-
163-
[node name="Life" type="AudioStreamPlayer" parent="Music"]
164-
stream = ExtResource("3")
165-
bus = &"Music"
166-
167140
[node name="GUI" type="CanvasLayer" parent="."]
168141
process_mode = 3
169142
layer = 128
@@ -186,5 +159,3 @@ autoplay = "RESET"
186159
[node name="ControllerMenu" parent="GUI" instance=ExtResource("6")]
187160

188161
[node name="Pause" parent="GUI" instance=ExtResource("7")]
189-
190-
[connection signal="finished" from="Music/Life" to="." method="_on_Life_finished"]

Scripts/Boss/BossBoundrySetter.gd

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,15 @@ func _on_BoundrySetter_body_entered(body):
4646
if lockBottom:
4747
i.limitBottom = min(global_position.y+screenSize.y/2,Global.hardBorderBottom)
4848

49-
Global.main.set_volume(-50)
50-
await Global.main.volume_set
51-
Global.main.set_volume(0,100)
5249

53-
Global.bossMusic.play()
50+
MusicController.play_music_theme(MusicController.MusicTheme.BOSS_THEME)
5451
boss.active = true
5552

5653
if boss.has_signal("boss_over"):
5754
boss.connect("boss_over",Callable(self,"boss_completed"))
5855

5956
func boss_completed():
60-
Global.bossMusic.stop()
61-
Global.music.play()
57+
MusicController.stop_music_theme(MusicController.MusicTheme.BOSS_THEME)
6258
# set boundries for players
6359
for i in Global.players:
6460
if is_instance_valid(i):

Scripts/Global/Global.gd

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,6 @@ func is_in_any_stage_clear_phase() -> bool:
4646
func reset_stage_clear_phase() -> void:
4747
set_stage_clear_phase(Global.STAGE_CLEAR_PHASES.NOT_STARTED)
4848

49-
# Music
50-
var musicParent = null
51-
var music = null
52-
var bossMusic = null
53-
var effectTheme = null
54-
var drowning = null
55-
var life = null
56-
# song themes to play for things like invincibility and speed shoes
57-
var themes = [preload("res://Audio/Soundtrack/1. SWD_Invincible.ogg"),preload("res://Audio/Soundtrack/2. SWD_SpeedUp.ogg"),preload("res://Audio/Soundtrack/4. SWD_StageClear.ogg")]
58-
# index for current theme
59-
var currentTheme = 0
6049

6150
# Sound, used for play_sound (used for a global sound, use this if multiple nodes use the same sound)
6251
var soundChannel = AudioStreamPlayer.new()
@@ -229,21 +218,15 @@ func play_sound(sound = null) -> void:
229218
## use a check function to see if a score increase would go above 50,000
230219
func check_score_life(score_add: int = 0) -> void:
231220
if score / 50000 < (score + score_add) / 50000:
232-
life.play()
221+
MusicController.play_music_theme(MusicController.MusicTheme._1UP)
233222
lives += 1
234-
effectTheme.volume_db = -100
235-
music.volume_db = -100
236-
bossMusic.volume_db = -100
237223

238224

239225
## use this to set the stage clear theme, only runs if stage clear phase is NONE
240226
func stage_clear() -> void:
241227
if !is_in_any_stage_clear_phase():
242-
currentTheme = 2
243-
music.stream = themes[currentTheme]
244-
music.play()
245-
effectTheme.stop()
246-
bossMusic.stop()
228+
MusicController.stop_music_theme(MusicController.MusicTheme.LEVEL_THEME)
229+
MusicController.play_music_theme(MusicController.MusicTheme.STAGE_CLEAR)
247230

248231

249232
## Emit the stage started signal

Scripts/Global/Main.gd

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@ var lastScene = null
66

77
# this gets emited when the scene fades, used to load in level details and data to hide it from the player
88
signal scene_faded
9-
# signal that emits when volume fades
10-
signal volume_set
11-
12-
# note: volumes can be set with set_volume(), these variables are just for volume control reference
13-
var startVolumeLevel = 0 # used as reference for when a volume change started
14-
var setVolumeLevel = 0 # where to fade the volume to
15-
var volumeLerp = 0 # current stage between start and set for volume level
16-
var volumeFadeSpeed = 1 # speed for volume changing
179

1810
# was paused enables menu control when the player pauses manually so they don't get stuck (get_tree().paused may want to be used by other intances)
1911
var wasPaused = false
@@ -23,38 +15,9 @@ var sceneCanPause = false
2315
func _ready():
2416
# global object references
2517
Global.main = self
26-
Global.musicParent = get_node_or_null("Music")
27-
Global.music = get_node_or_null("Music/Music")
28-
Global.bossMusic = get_node_or_null("Music/BossTheme")
29-
Global.effectTheme = get_node_or_null("Music/EffectTheme")
30-
Global.drowning = get_node_or_null("Music/Drowning")
31-
Global.life = get_node_or_null("Music/Life")
3218
# initialize game data using global reset (it's better then assigning variables twice)
3319
Global.reset_values()
3420

35-
func _process(delta):
36-
# verify scene isn't paused
37-
if !get_tree().paused and Global.music != null:
38-
# pause main music if effect theme, boss music or drowning songs are playing
39-
Global.music.stream_paused = Global.effectTheme.playing or Global.drowning.playing or Global.bossMusic.playing
40-
# pause boss music if drowning
41-
Global.bossMusic.stream_paused = Global.drowning.playing
42-
# pause effect music if drowning
43-
Global.effectTheme.stream_paused = Global.drowning.playing or Global.bossMusic.playing
44-
45-
# check that volume lerp isn't transitioned yet
46-
if volumeLerp < 1:
47-
# move volume lerp to 1
48-
volumeLerp = move_toward(volumeLerp,1,delta*volumeFadeSpeed)
49-
# use volume lerp to set the effect volume
50-
Global.music.volume_db = lerp(float(startVolumeLevel),float(setVolumeLevel),float(volumeLerp))
51-
# copy the volume to other songs (you'll want to add yours here if you add more)
52-
Global.effectTheme.volume_db = Global.music.volume_db
53-
Global.drowning.volume_db = Global.music.volume_db
54-
Global.bossMusic.volume_db = Global.music.volume_db
55-
if volumeLerp >= 1:
56-
volume_set.emit()
57-
5821
func _input(event):
5922
# Pausing
6023
if event.is_action_pressed("gm_pause") and sceneCanPause:
@@ -174,30 +137,3 @@ func change_scene_to_file(scene = null, fadeOut = "", fadeIn = "", length = 1, s
174137
# if fadeOut wasn't set either then just reset the fader
175138
elif fadeOut != "":
176139
$GUI/Fader.play("RESET")
177-
178-
# stop life sound (if it's still playing)
179-
if Global.life.is_playing():
180-
Global.life.stop()
181-
# set volume level to default
182-
Global.music.volume_db = 0
183-
# copy the volume to other songs (you'll want to add yours here if you add more)
184-
Global.bossMusic.volume_db = Global.bossMusic.volume_db
185-
Global.effectTheme.volume_db = Global.music.volume_db
186-
Global.drowning.volume_db = Global.music.volume_db
187-
188-
# executed when life sound has finished
189-
func _on_Life_finished():
190-
# set volume level to default
191-
set_volume()
192-
193-
# set the volume level
194-
func set_volume(volume = 0, fadeSpeed = 1):
195-
# set the start volume level to the curren volume
196-
startVolumeLevel = Global.music.volume_db
197-
# set the volume level to go to
198-
setVolumeLevel = volume
199-
# set volume transition
200-
volumeLerp = 0
201-
# set the speed for the transition
202-
volumeFadeSpeed = fadeSpeed
203-
# this is continued in _process() as it needs to run during gameplay

0 commit comments

Comments
 (0)