MusicPlayer.gd 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. extends Node2D
  2. onready var layers = [$L0, $L1, $L2, $L3]
  3. onready var kick = $Kick
  4. onready var rain = $Rain
  5. onready var fade_in = $FadeIn
  6. var layer_count = 1
  7. var combat_intensity = 0.0
  8. var inside = false
  9. const fade_in_base = -30.0
  10. func _ready():
  11. #test
  12. #go_inside()
  13. # layers[0].set_stream(preload("res://music/ld51-0.ogg"))
  14. # layers[0].play()
  15. rain.play()
  16. func music_start():
  17. layers[0].play()
  18. #test
  19. #var debug_int = 0.0
  20. #func _input(event):
  21. # if event is InputEventKey and event.pressed:
  22. # if event.is_action_pressed("move_up"):
  23. # increase_intensity()
  24. # if event.is_action_pressed("fast_forward"):
  25. # decrease_intensity()
  26. # if event.is_action_pressed("move_left"):
  27. # debug_int -= 0.1
  28. # set_combat_intensity(debug_int)
  29. # if event.is_action_pressed("move_right"):
  30. # debug_int += 0.1
  31. # set_combat_intensity(debug_int)
  32. # print(debug_int)
  33. func _process(_delta: float):
  34. if !fade_in.is_stopped():
  35. layers[layer_count - 1].set_volume_db(fade_in_base * fade_in.time_left)
  36. func update():
  37. var l0position = layers[0].get_playback_position()
  38. for i in range(1, layer_count):
  39. if !layers[i].playing:
  40. layers[i].play()
  41. layers[i].seek(l0position)
  42. layers[i].set_volume_db(fade_in_base)
  43. for i in range(layer_count, layers.size()):
  44. layers[i].stop()
  45. if combat_intensity < 0.01:
  46. kick.stop()
  47. else:
  48. kick.set_volume_db(-45.0 + combat_intensity / 2.0)
  49. if !kick.playing:
  50. kick.play()
  51. kick.seek(l0position)
  52. kick.set_volume_db(-45.0 + combat_intensity * 50.0)
  53. var fx = AudioServer.get_bus_effect(AudioServer.get_bus_index("Music"), 0)
  54. if fx:
  55. if combat_intensity < 0.01:
  56. fx.cutoff_hz = 20500
  57. elif combat_intensity < 0.4:
  58. fx.cutoff_hz = 3000 - (combat_intensity - 0.4) * 2500
  59. elif combat_intensity < 0.8:
  60. fx.cutoff_hz = 1000 - (combat_intensity - 0.8) * 3000
  61. else:
  62. fx.cutoff_hz = 400
  63. func increase_intensity():
  64. layer_count += 1
  65. if layer_count > layers.size():
  66. layer_count = layers.size()
  67. else:
  68. fade_in.start()
  69. update()
  70. func decrease_intensity():
  71. layer_count -= 1
  72. if layer_count < 1:
  73. layer_count = 1
  74. update()
  75. func go_inside():
  76. inside = true
  77. if rain:
  78. rain.set_stream(preload("res://music/rain_inside.ogg"))
  79. rain.play()
  80. set_rain_intensity(0.0)
  81. func set_rain_intensity(var intensity: float):
  82. if inside:
  83. rain.set_volume_db(-20.0 + intensity)
  84. func set_combat_intensity(var intensity: float):
  85. combat_intensity = intensity
  86. update()
  87. func _on_L0_finished():
  88. if layers.size() > 0:
  89. layers[0].set_stream(preload("res://music/ld51-0.ogg"))
  90. layers[0].play()
  91. func _on_FadeIn_timeout():
  92. layers[layer_count - 1].set_volume_db(0.0)