Files
Dunkanoid/Music.gd

139 lines
3.2 KiB
GDScript

extends Node
var MusicPlayer : AudioStreamPlayer
var JinglePlayer : AudioStreamPlayer
enum {
MUSIC_INTRO,
MUSIC_GAME,
MUSIC_GAME_OVER
}
enum {
JINGLE_LEVEL_START,
JINGLE_LEVEL_WON,
JINGLE_GAME_OVER
}
signal jingle_finished(type : int)
var music : int = MUSIC_INTRO
var pausepos : float = 0
var MP3 : Dictionary = {
"Through The Crystal": preload("res://Music/Through The Crystal - Jeremy Blake.mp3"),
"Powerup": preload("res://Music/Powerup! - Jeremy Blake.mp3"),
"Absolutely Nothing" : preload("res://Music/Absolutely Nothing - Jeremy Blake.mp3"),
"I'll Remember You": preload("res://Music/I'll Remember You - Jeremy Blake.mp3")
}
var JingleFileStart = preload("res://Sounds/Start.wav")
var JingleFileWin = preload("res://Sounds/Win.wav")
var JingleFileGameOver = preload("res://Sounds/GameOver.wav")
var jingle_playing : bool = false
var jingle_number : int = 0
var tween = null
func _ready() -> void:
MusicPlayer = AudioStreamPlayer.new();
MusicPlayer.bus = "Music"
MusicPlayer.process_mode = Node.PROCESS_MODE_ALWAYS
add_child(MusicPlayer)
MusicPlayer.stream = MP3["Through The Crystal"]
MusicPlayer.play()
music = MUSIC_INTRO
JinglePlayer = AudioStreamPlayer.new();
JinglePlayer.bus = "Music"
JinglePlayer.process_mode = Node.PROCESS_MODE_ALWAYS
JinglePlayer.finished.connect(_jingle_done)
add_child(JinglePlayer)
func fade_up(time : int = 1) -> void:
if MusicPlayer.volume_db < 0:
if tween != null:
tween.kill()
tween = get_tree().create_tween()
tween.tween_property(MusicPlayer, "volume_db", 0, time)
func fade_down(time : int = 1) -> void:
if MusicPlayer.volume_db > -80:
if tween != null:
tween.kill()
tween = get_tree().create_tween()
tween.tween_property(MusicPlayer, "volume_db", -80, time)
func play_game() -> void:
fade_up()
if music == MUSIC_GAME:
return
if jingle_playing:
pausepos = 0
else:
MusicPlayer.stream = MP3["Powerup"]
MusicPlayer.play()
music = MUSIC_GAME
func play_intro() -> void:
fade_up()
if music == MUSIC_INTRO:
return
if jingle_playing:
pausepos = 0
else:
MusicPlayer.stream = MP3["Through The Crystal"]
MusicPlayer.play()
music = MUSIC_INTRO
func play_game_over() -> void:
fade_up()
if music == MUSIC_GAME_OVER:
return
if jingle_playing:
pausepos = 0
else:
MusicPlayer.stream = MP3["I'll Remember You"]
MusicPlayer.play()
music = MUSIC_GAME_OVER
func pause() -> void:
pausepos = MusicPlayer.get_playback_position()
MusicPlayer.stop()
func resume() -> void:
MusicPlayer.play(pausepos)
func jingle(item : int) -> void:
fade_down()
# MusicPlayer.volume_db = 0
jingle_number = item
# pause()
match item:
JINGLE_LEVEL_START:
JinglePlayer.stream = JingleFileStart
JinglePlayer.play()
JINGLE_LEVEL_WON:
JinglePlayer.stream = JingleFileWin
JinglePlayer.play()
JINGLE_GAME_OVER:
JinglePlayer.stream = JingleFileGameOver
JinglePlayer.play()
jingle_playing = true
pass
func _jingle_done() -> void:
fade_up()
#match music:
#MUSIC_INTRO:
#MusicPlayer.stream = MP3["Through The Crystal"]
#MUSIC_GAME:
#MusicPlayer.stream = MP3["Powerup"]
#MUSIC_GAME_OVER:
#MusicPlayer.stream = MP3["I'll Remember You"]
#resume()
jingle_playing = false
jingle_finished.emit(jingle_number)