#include "konprogram.h" /* the starting point for a game. with the 3d module (./build.sh -m 3d) it is a spinning cube, without it a square that bounces around */ typedef struct demo { #ifdef KONSOFREN_3D kon_camera_t camera; kon_material_t material; kon_light_t light; int ortho; #else float x, y, vx, vy; #endif float angle; } demo_t; static int init(kon_program_t *program, void *user) { demo_t *demo = user; (void)program; #ifdef KONSOFREN_3D demo->camera = kon_cameraDefault(); demo->camera.position = KON_VEC3(3, 3, 6); demo->material = kon_materialColor(0xFFC8C8FF); demo->light = kon_lightDefault(); #else demo->x = 40.0f; demo->y = 30.0f; demo->vx = 70.0f; demo->vy = 50.0f; #endif return 1; } static int event(kon_program_t *program, const kon_event_t *ev, void *user) { (void)program; #ifdef KONSOFREN_3D { demo_t *demo = user; if (ev->type == KON_EVENT_KEY_DOWN && ev->key == KON_KEY_O) { demo->ortho = !demo->ortho; demo->camera.projection = demo->ortho ? KON_PROJECTION_ORTHOGRAPHIC : KON_PROJECTION_PERSPECTIVE; return 1; } } #else (void)ev; (void)user; #endif return 0; } static void update(kon_program_t *program, double dt, void *user) { demo_t *demo = user; demo->angle += (float)dt; #ifndef KONSOFREN_3D demo->x += demo->vx * (float)dt; demo->y += demo->vy * (float)dt; if (demo->x < 0.0f || demo->x > (float)program->display->game->width - 24.0f) demo->vx = -demo->vx; if (demo->y < 0.0f || demo->y > (float)program->display->game->height - 24.0f) demo->vy = -demo->vy; #else (void)program; #endif } static void draw(kon_program_t *program, kon_framebuffer_t *game, void *user) { demo_t *demo = user; (void)program; #ifdef KONSOFREN_3D { kon_mat4_t model = kon_mat4Rotate(kon_mat4Identity(), KON_VEC3(demo->angle * 0.5f, demo->angle, 0)); kon_mat4_t viewProjection = kon_cameraViewProjection(&demo->camera, game->width, game->height); kon_drawMesh(game, viewProjection, model, &kon_cubeMesh, &demo->material, &demo->light, KON_RENDER_DEFAULT); } #else kon_fillRectangle(game, (int)demo->x, (int)demo->y, 24, 24, 0xFFF2A7C3); #endif } int main(void) { demo_t demo = {0}; kon_programConfig_t config = {0}; config.title = "engine"; config.user = &demo; config.init = init; config.event = event; config.update = update; config.draw = draw; return kon_programRun(&config); }