131 lines
3.0 KiB
GDScript
131 lines
3.0 KiB
GDScript
extends Node
|
|
|
|
var MusicPlayer : 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
|
|
|
|
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:
|
|
MusicPlayer.volume_db = 0
|
|
jingle_number = item
|
|
MusicPlayer.finished.connect(_jingle_done)
|
|
pause()
|
|
match item:
|
|
JINGLE_LEVEL_START:
|
|
MusicPlayer.stream = JingleFileStart
|
|
MusicPlayer.play()
|
|
JINGLE_LEVEL_WON:
|
|
MusicPlayer.stream = JingleFileWin
|
|
MusicPlayer.play()
|
|
JINGLE_GAME_OVER:
|
|
MusicPlayer.stream = JingleFileGameOver
|
|
MusicPlayer.play()
|
|
jingle_playing = true
|
|
pass
|
|
|
|
func _jingle_done() -> void:
|
|
MusicPlayer.finished.disconnect(_jingle_done)
|
|
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)
|