#@tool #@icon(icon_path: String) class_name RhythmManager extends Node2D ## Documentation comments ## signal ## enum ## const @export var tempo: int = 120 @export var beats_per_measure: int = 4 var beats_elapsed: int = 0 var beat_time_start: float = 0.0 var beat_time_elapsed: float = 0.0 var seconds_per_beat: float var useconds_per_beat: float var song_time_elapsed: float = 0.0 var total_time_elapsed: float = 0.0 #var fmod: float var is_running: bool = false var start_time: float var end_time: float var ready_time: float var delay_time: float @onready var click_track: AudioStreamPlayer2D = %ClickTrack ## OVERRIDES func _ready() -> void: ready_time = Time.get_ticks_usec() print("Ready time: %s" % ready_time) #var time_to_next_mix: float = AudioServer.get_time_to_next_mix() #print(time_to_next_mix) #var output_latency: float = AudioServer.get_output_latency() #print(output_latency) #var mix_rate: float = AudioServer.get_mix_rate() #print(mix_rate) #delay_time = time_to_next_mix + output_latency #print(delay_time) seconds_per_beat = 60.0/float(tempo) useconds_per_beat = seconds_per_beat * 1000000.0 #print(useconds_per_beat) func _process(_delta: float) -> void: total_time_elapsed = Time.get_ticks_usec() #print("total time: %s" % total_time_elapsed) if is_running: song_time_elapsed = total_time_elapsed - start_time #print("song time elapsed: %s" % song_time_elapsed) beat_time_elapsed = song_time_elapsed - beat_time_start #print("beat time elapsed: %s" % beat_time_elapsed) #fmod = fmod(total_time_elapsed, useconds_per_beat) #print(fmod) if beat_time_elapsed >= useconds_per_beat: beats_elapsed += 1 print("that's beat %s in the books" % beats_elapsed) beat_time_elapsed = 0.0 beat_time_start = song_time_elapsed func _input(event: InputEvent) -> void: if event.is_action_pressed("ui_accept"): if is_running == false: start_time = Time.get_ticks_usec() print("start time: %s" % start_time) is_running = true click_track.play() else: click_track.stop() is_running = false end_time = Time.get_ticks_usec() print("end_time: %s" % end_time) #func _physics_process(delta: float) -> void: #pass ## CORE ## PRIVATE/HELPER ## RECEIVERS ## SETTERS/GETTERS