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