MagicNStuff/game/src/ui/setup/rhythm/rhythm_setup_menu.gd

83 lines
2.5 KiB
GDScript

class_name RhythmSetupMenu
extends Control
signal confirmed
var _previous_song_info: SongInfo
var _previous_paused: bool = true
var _previous_bpm: float = 120.0
var _previous_beats_per_bar: int = 4
var _previous_song_time: float = 0.0
var _previous_total_song_time: float = 0.0
var _previous_beat: float = 0.0
var _previous_beat_phase: float = 0.0
var _previous_bar: float = 0.0
var _previous_bar_phase: float = 0.0
@onready var user_offset_slider: HSlider = %UserOffsetSlider
@onready var rhythm_player: RhythmPlayer = $RhythmPlayer
@onready var rhythm_beat: AudioStreamPlayer = %RhythmBeat
@onready var confirm_button: Button = %Confirm
func _ready() -> void:
user_offset_slider.value_changed.connect(_on_user_offset_slider_value_changed)
visibility_changed.connect(_on_visibility_changed)
confirm_button.pressed.connect(close)
func close() -> void:
confirmed.emit()
func _on_user_offset_slider_value_changed(value: float) -> void:
SettingsHandler.set_setting("audio", "user_offset_ms", value, false)
SettingsHandler.commit_settings()
SettingsHandler.save_settings()
RhythmPlayer.set_user_offset_ms(value)
func _on_visibility_changed() -> void:
if not is_visible_in_tree():
rhythm_player.stop()
_restore_song_playback_data()
return
if not rhythm_beat.playing:
_store_song_playback_data()
user_offset_slider.set_value_no_signal(SettingsHandler.get_setting("audio", "user_offset_ms", 0.0))
rhythm_player.play()
func _store_song_playback_data() -> void:
_previous_song_info = RhythmPlayer.current_song_info
_previous_paused = RhythmPlayer.paused
_previous_bpm = RhythmPlayer.bpm
_previous_beats_per_bar = RhythmPlayer.beats_per_bar
_previous_song_time = RhythmPlayer.song_time
_previous_total_song_time = ShaderGlobals.total_song_time
_previous_beat = RhythmPlayer.beat
_previous_beat_phase = RhythmPlayer.beat_phase
_previous_bar = RhythmPlayer.bar
_previous_bar_phase = RhythmPlayer.bar_phase
func _restore_song_playback_data() -> void:
RhythmPlayer.current_song_info = _previous_song_info
RhythmPlayer.paused = _previous_paused
RhythmPlayer.bpm = _previous_bpm
RhythmPlayer.beats_per_bar = _previous_beats_per_bar
RhythmPlayer.song_time = _previous_song_time
ShaderGlobals.set_song_time(_previous_song_time)
ShaderGlobals.set_total_song_time(_previous_total_song_time)
RhythmPlayer.beat = _previous_beat
ShaderGlobals.set_beat(RhythmPlayer.beat)
RhythmPlayer.beat_phase = _previous_beat_phase
RhythmPlayer.bar = _previous_bar
ShaderGlobals.set_beat(RhythmPlayer.bar)
RhythmPlayer.bar_phase = _previous_bar_phase