diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-09 02:50:22 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-09 02:50:22 +0800 |
| commit | 72ab7350ba8d5a1471f2bbbadd7f225065dd125d (patch) | |
| tree | 7c48c117067bda1eb41d741cd3249286250c036a /src | |
| parent | 12c955cf1911edc3fbab9d675c14204058b4a134 (diff) | |
Add window tricks: opacity, topmost, click through, message box
Diffstat (limited to 'src')
| -rw-r--r-- | src/engine.c | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/src/engine.c b/src/engine.c index efe760e..3dc442c 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1,5 +1,7 @@ #include "konwinlib.h" #include "konsofren.h" +#include <stdlib.h> + #include "kontime.h" #ifdef KON_MODULE_DEBUG @@ -23,15 +25,66 @@ typedef struct app { kon_assets_t *assets; kon_font_t *font; kon_debug_t *debug; + float shakeLeft; + int baseX, baseY; #endif } app_t; +#ifdef KON_MODULE_DEBUG +static void cmdOpacity(kon_debug_t *debug, void *user, int argc, char **argv) +{ + app_t *app = user; + + (void)debug; + if (argc > 1) kon_setWindowOpacity(app->window, (float)atof(argv[1])); +} + +static void cmdTopmost(kon_debug_t *debug, void *user, int argc, char **argv) +{ + app_t *app = user; + + (void)debug; + if (argc > 1) kon_setWindowTopmost(app->window, atoi(argv[1]) != 0); +} + +static void cmdBorderless(kon_debug_t *debug, void *user, int argc, char **argv) +{ + app_t *app = user; + + (void)debug; + if (argc > 1) kon_setWindowDecorated(app->window, atoi(argv[1]) == 0); +} + +static void cmdClickThrough(kon_debug_t *debug, void *user, int argc, char **argv) +{ + app_t *app = user; + + (void)debug; + if (argc > 1) kon_setWindowClickThrough(app->window, atoi(argv[1]) != 0); +} + +static void cmdMessage(kon_debug_t *debug, void *user, int argc, char **argv) +{ + (void)debug; (void)user; + kon_messageBox("konengine", argc > 1 ? argv[1] : "hello", KON_MESSAGE_INFO); +} + +static void cmdShake(kon_debug_t *debug, void *user, int argc, char **argv) +{ + app_t *app = user; + + (void)debug; (void)argc; (void)argv; + kon_getWindowPos(app->window, &app->baseX, &app->baseY); + app->shakeLeft = 0.5f; +} +#endif + static void frame(void *data) { app_t *app = (app_t *)data; kon_display_t *display = app->display; kon_event_t ev; - kon_time now; + kon_time now, dt; kon_mat4_t model, viewProjection; while (kon_pollEvent(app->window, &ev)) { @@ -48,9 +101,18 @@ static void frame(void *data) } now = kon_getTime(); - app->angle += (float)(now - app->last); + dt = now - app->last; + app->angle += (float)dt; app->last = now; +#ifdef KON_MODULE_DEBUG + if (app->shakeLeft > 0.0f) { + app->shakeLeft -= (float)dt; + if (app->shakeLeft > 0.0f) kon_setWindowPos(app->window, app->baseX + rand() % 21 - 10, app->baseY + rand() % 21 - 10); + else kon_setWindowPos(app->window, app->baseX, app->baseY); + } +#endif + model = kon_mat4Identity(); model = kon_mat4Rotate(model, KON_VEC3(app->angle * 0.5f, app->angle, 0)); viewProjection = kon_cameraViewProjection(&app->camera, display->game->width, display->game->height); @@ -99,6 +161,12 @@ int main(void) if (ttf) app.font = kon_loadFont(ttf->data, ttf->size, 14.0f); app.debug = kon_debugCreate(app.font); kon_debugSetAssets(app.debug, app.assets); + kon_debugCommand(app.debug, "opacity", "window opacity 0 to 1", cmdOpacity, &app); + kon_debugCommand(app.debug, "topmost", "topmost 0 or 1", cmdTopmost, &app); + kon_debugCommand(app.debug, "borderless", "borderless 0 or 1", cmdBorderless, &app); + kon_debugCommand(app.debug, "clickthrough", "clickthrough 0 or 1", cmdClickThrough, &app); + kon_debugCommand(app.debug, "message", "message \"text\"", cmdMessage, &app); + kon_debugCommand(app.debug, "shake", "shake the window", cmdShake, &app); kon_debugLog(app.debug, ttf ? "loaded font.ttf" : "put a font.ttf in assets/ for the console"); } #endif |
