summaryrefslogtreecommitdiff
path: root/src/level-main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/level-main.cpp')
-rw-r--r--src/level-main.cpp29
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() {