1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#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 {
pke_level *level;
} main_mstr;
pke_level *pke_at_level_main_create() {
main_mstr.level = pke_level_create("main", pk_uuid_zed, pk_uuid_zed);
main_mstr.level->pke_cb_spinup.func = pke_at_level_main_init;
main_mstr.level->pke_cb_tick.func = (void(*)())pke_at_level_main_tick;
main_mstr.level->pke_cb_teardown.func = pke_at_level_main_teardown;
return main_mstr.level;
}
void pke_at_level_main_init() {
pke_ui_box *hello_world = pke_ui_box_new_root();
hello_world->flags |= PKE_UI_BOX_FLAG_POSITION_TYPE_DYNAMIC;
hello_world->flags |= PKE_UI_BOX_FLAG_CENTER_BOTH;
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() {
main_mstr.level = nullptr;
}
|