diff --git a/docs/size_baseline.tsv b/docs/size_baseline.tsv index a2d3a04..1427363 100644 --- a/docs/size_baseline.tsv +++ b/docs/size_baseline.tsv @@ -41,7 +41,7 @@ mouse 4382 openenv 6124 palfile 5406 ptime 5744 -rpgwalk 9484 +rpgwalk 9683 rt_test 4892 seek 4188 simple 955 diff --git a/examples/rpgwalk/rpgwalk.c b/examples/rpgwalk/rpgwalk.c index dc65549..ea54bda 100644 --- a/examples/rpgwalk/rpgwalk.c +++ b/examples/rpgwalk/rpgwalk.c @@ -101,6 +101,22 @@ static void turn_90(uint8_t i) go_edge(i); } +/* FPS-плашка слева-сверху: значение раз в секунду, рисуется на ОБЕИХ + * страницах (fps_draw = 2 кадра), банк 0x50 — heal её учитывает. */ +static void show_fps(uint8_t v) +{ + char buf[4]; + + buf[0] = (char)('0' + (v / 100) % 10); + buf[1] = (char)('0' + (v / 10) % 10); + buf[2] = (char)('0' + v % 10); + buf[3] = 0; + setcolor(WHITE); + setfillstyle(SOLID_FILL, BLACK); + bar(0, 0, 27, 9); + outtextxy(2, 1, buf); +} + static void draw_field(void) { int i; @@ -124,6 +140,7 @@ static void draw_field(void) int main(void) { uint8_t i, page, hidden; + uint8_t frames = 0, last_sec, fps_val = 0, fps_draw = 0; datetime_t dt; if (atlas_load(&at1, "bard1.atl") != 0 && @@ -161,6 +178,7 @@ int main(void) gfx_set_visible_page(0); getdatetime(&dt); srand((unsigned)(dt.second * 77u + dt.minute)); + last_sec = dt.second; for (;;) { if (kbhit() && getch() == 27) @@ -176,6 +194,18 @@ int main(void) hidden = gfx_get_visible_page() ^ 1; gfx_set_draw_page(hidden); + frames++; + getdatetime(&dt); + if (dt.second != last_sec) { + last_sec = dt.second; + fps_val = frames; + frames = 0; + fps_draw = 2; + } + if (fps_draw) { + fps_draw--; + show_fps(fps_val); + } sprite_update(sp, NCHR); gfx_wait_vsync(); gfx_set_visible_page(hidden);