diff options
Diffstat (limited to 'src/level-main.cpp')
| -rw-r--r-- | src/level-main.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/level-main.cpp b/src/level-main.cpp index d0cfcba..26618e4 100644 --- a/src/level-main.cpp +++ b/src/level-main.cpp @@ -1,6 +1,10 @@ #include "level-main.hpp" +#include "pke-at-common.hpp" +#include "pke-at-settings.hpp" +#include "pke/audio-types.hpp" +#include "pke/audio.hpp" #include "pke/level.hpp" struct pke_level_main_master { @@ -22,10 +26,35 @@ void pke_at_level_main_init() { hello_world->min_size = glm::vec2(0.9); hello_world->max_size = glm::vec2(0.9); pke_level_register_root_ui_box(main_mstr.level, hello_world); + pke_at_bpm_reset(120); + g_at.mtrnm.beep = pke_at_audio_get_or_generate_sawtooth(440.f, 0.30); + g_at.mtrnm.beep_accent = pke_at_audio_get_or_generate_sawtooth(440.f * (3/2.f), 0.30); + pke_audio_set_volume(pke_audio_source_sfx, 0.25); } void pke_at_level_main_tick(double delta) { (void)delta; + g_at.bpm.delta_since_last_beat += delta; + if (g_at.bpm.lerp_delta <= g_at.bpm.lerp_delta_duration) { + g_at.bpm.lerp_delta += delta; + g_at.bpm.current = std::lerp(g_at.bpm.last, g_at.bpm.target, g_at.bpm.lerp_delta / g_at.bpm.lerp_delta_duration); + } else { + g_at.bpm.current = g_at.bpm.target; + } + g_at.bpm.delta_per_beat = 60.f / g_at.bpm.current; + g_at.bpm.delta_since_last_beat += delta; + if (g_at.bpm.delta_since_last_beat >= g_at.bpm.delta_per_beat) { + if (g_at.mtrnm.beat == 0) { + pke_audio_play(g_at.mtrnm.beep_accent, pke_audio_source_sfx, pke_audio_flag_none); + fprintf(stdout, "beat accent %f\n", delta); + } else { + pke_audio_play(g_at.mtrnm.beep, pke_audio_source_sfx, pke_audio_flag_none); + fprintf(stdout, "beat %f\n", delta); + } + g_at.bpm.delta_since_last_beat = std::fmod(g_at.bpm.delta_since_last_beat, g_at.bpm.delta_per_beat); + g_at.mtrnm.beat += 1; + g_at.mtrnm.beat %= g_at.mtrnm.beats_per_bar; + } } void pke_at_level_main_teardown() { |
