sokoban
Diffstat (limited to 'Music.gd')
-rw-r--r--Music.gd82
1 files changed, 82 insertions, 0 deletions
diff --git a/Music.gd b/Music.gd
new file mode 100644
index 0000000..064a2b7
--- /dev/null
+++ b/Music.gd
@@ -0,0 +1,82 @@
+extends Node
+
+export(Array, AudioStream) var music_list = []
+
+var music_index = 0
+var lowering_sound = false
+const min_vol_db = -17
+
+onready var musicPlayer = $AudioStreamPlayer
+onready var tween = $Tween
+
+
+func _ready():
+ music_list.shuffle()
+ list_play()
+
+
+func list_play():
+ assert(music_list.size() > 0)
+ musicPlayer.stream = music_list[music_index]
+ musicPlayer.play()
+ music_index += 1
+ if music_index == music_list.size():
+ music_index = 0
+
+ tween.interpolate_property(
+ musicPlayer,
+ "volume_db",
+ musicPlayer.volume_db,
+ min_vol_db,
+ 40,
+ Tween.TRANS_LINEAR,
+ Tween.EASE_IN_OUT
+ )
+
+
+func lower_sound():
+ lowering_sound = true
+ var new_vol = musicPlayer.volume_db
+ new_vol -= 10
+ tween.interpolate_property(
+ musicPlayer,
+ "volume_db",
+ musicPlayer.volume_db,
+ new_vol,
+ .5,
+ tween.TRANS_LINEAR,
+ tween.EASE_IN_OUT
+ )
+ tween.start()
+
+
+func continue_playback():
+ lowering_sound = false
+ _on_Timer_timeout()
+
+
+func list_stop():
+ musicPlayer.stop()
+
+
+func _on_AudioStreamPlayer_finished():
+ music_list.shuffle()
+ list_play()
+
+
+func _on_Timer_timeout():
+ var new_pitch = rand_range(.9, 1.1)
+ tween.interpolate_property(
+ musicPlayer,
+ "pitch_scale",
+ musicPlayer.pitch_scale,
+ new_pitch,
+ 1,
+ tween.TRANS_LINEAR,
+ tween.EASE_IN_OUT
+ )
+ tween.start()
+# if not lowering_sound:
+# var new_vol = rand_range(-8, -12)
+# tween.interpolate_property(musicPlayer, "volume_db", musicPlayer.volume_db, new_vol, .5, tween.TRANS_LINEAR, tween.EASE_IN_OUT)
+# tween.start()