Make sample button enabling more granular, like a loading bar

This commit is contained in:
Luke Hubmayer-Werner 2023-07-27 19:53:52 +09:30
parent 17fd68bbbb
commit cbd624c53d
2 changed files with 22 additions and 8 deletions

View File

@ -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):

View File

@ -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)