diff --git a/Node2D.gd b/Node2D.gd index 94333ad..34e68f2 100644 --- a/Node2D.gd +++ b/Node2D.gd @@ -2,6 +2,7 @@ extends Node2D var PC = load('PC.tscn') var PCs = [] +var inst_buttons = [] var sfx_buttons = [] func _ready(): @@ -27,8 +28,6 @@ func _ready(): func _create_sfx_buttons(): var disable_btn := !SoundLoader.has_loaded_audio_samples - if disable_btn: - SoundLoader.connect('audio_samples_loaded', self, '_enable_sfx_buttons') for i in SoundLoader.INST_NUM: var btn = Button.new() btn.text = 'Play #%02X' % i @@ -37,7 +36,7 @@ func _create_sfx_buttons(): btn.set_scale(Vector2(0.5, 0.5)) add_child(btn) btn.connect('pressed', SoundLoader, 'play_sample', [i]) - sfx_buttons.append(btn) + inst_buttons.append(btn) btn.disabled = disable_btn for i in SoundLoader.SFX_NUM: var btn = Button.new() @@ -49,15 +48,26 @@ func _create_sfx_buttons(): btn.connect('pressed', SoundLoader, 'play_sfx', [i]) sfx_buttons.append(btn) btn.disabled = disable_btn + if disable_btn: + SoundLoader.connect('audio_samples_loaded', self, '_enable_sfx_buttons') + SoundLoader.connect('audio_inst_sample_loaded', self, '_enable_inst_button') + SoundLoader.connect('audio_sfx_sample_loaded', self, '_enable_sfx_button') func _enable_sfx_buttons(): for btn in sfx_buttons: btn.disabled = false + for btn in inst_buttons: + btn.disabled = false -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# update() -# pass +func _enable_sfx_button(id: int): + # NB: This assumes sequential loading (may change, probably won't) + for i in id+1: + sfx_buttons[i].disabled = false + +func _enable_inst_button(id: int): + # NB: This assumes sequential loading (may change, probably won't) + for i in id+1: + inst_buttons[i].disabled = false func _on_OptionButton_item_selected(ID): diff --git a/scripts/loaders/sound_loader.gd b/scripts/loaders/sound_loader.gd index 49679b8..40f4a0c 100644 --- a/scripts/loaders/sound_loader.gd +++ b/scripts/loaders/sound_loader.gd @@ -1,6 +1,8 @@ extends Node signal audio_samples_loaded +signal audio_inst_sample_loaded(id) +signal audio_sfx_sample_loaded(id) var has_loaded_audio_samples := false const BGM_NUM := 70 @@ -151,15 +153,17 @@ func load_sfx_samples_data(rom: File): rom.seek(brr_spc_addrs[i]) # print('Loading sfx sample #%X with BRR data offset $%06X' % [i, rom.get_position()]) sfx_samples.append(make_sample(rom, 900, sample_rates[i])) # Use 900 as a limit, it won't be hit, parser stops after End packet anyway + emit_signal('audio_sfx_sample_loaded', i) # print('size of %d samples' % sfx_samples[i].data.size()) # Called when the node enters the scene tree for the first time. func load_samples(rom: File): - pass load_sfx_samples_data(rom) + # For some reason, this is a bit slow currently. Might optimize later. for i in INST_NUM: instrument_samples.append(get_inst_sample_data(rom, i)) + emit_signal('audio_inst_sample_loaded', i)