Nimbin2git.christianimmanuel.de / Games / strichmaennchen / main.c

strichmaennchen git · main

git clone https://git.christianimmanuel.de/games/strichmaennchen.gitwget https://git.christianimmanuel.de/games/strichmaennchen/archive/strichmaennchen.tar.gz
main.c 2.1 KB · 94 lines raw
#include <SDL3/SDL.h>
#include <SDL3/SDL_video.h>

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "renderer.h"
#include "object.h"
#include "camera.h"
#include "mesh.h"
#include "input.h"
#include "game.h"
#include "platform.h"
#include "time.h"
#include "skybox.h"
#include "ui.h"

#include "glfuncs.h"




// ----------------------
// Main
// ----------------------
int main(void) {

    Renderer* renderer = Renderer_create(800, 800) ;
    if (!renderer) return 1;

    Camera camera;
    Camera_init(&camera, vec3(0.0f, 1.8f, 5.0f), -90.0f, 0.0f, 70.0f);

    Game game;
    if (!Game_init(&game)) return 1;

    Userinput userinput;
    Input_reset(&userinput);
    Uint64 prev_ticks = SDL_GetTicks();

    Skybox skybox;
    Skybox_init(&skybox, "shaders/skybox.vert", "shaders/skybox.frag");

    SDL_GetWindowSize(renderer->window, &renderer->width, &renderer->height);

    Ui ui;
    if (!Ui_init(&ui, renderer, "fonts/uifont.ttf", 24)) {
        SDL_Log("UI init failed");
        return 1;
    }

    while (userinput.running) {
        float dt = Time_delta(&prev_ticks);
        if (dt > 0.05f) dt = 0.05f;

        Time_update(game.time, dt);

        prev_ticks = SDL_GetTicks();

        Renderer_resize(renderer);

        SDL_GetWindowSize(renderer->window, &renderer->width, &renderer->height);


        Ui_resize(&ui, renderer->window);

        Input_reset(&userinput);
        Input_process(&userinput);
        //printf("%.2f:%.2f\n", worldTime.hours, worldTime.minutes);

        Camera_rotate(&camera, userinput.yaw_delta, userinput.pitch_delta);

        Player_update(game.player, &userinput, &camera);
        Game_update(&game, &userinput, dt);

        Camera_followPlayer(&camera, game.player);
        Camera_update(&camera, renderer);

        Game_render(&game, renderer, &camera);
        Skybox_draw(&skybox, renderer, &camera, game.time);
        Ui_render(&ui, renderer, game.time);

        SDL_GL_SwapWindow(renderer->window);
    }



    Ui_shutdown(&ui);
    Skybox_destroy(&skybox);
    Renderer_shutdown(renderer);
    Platform_shutdown(renderer);
    free(renderer);
    return 0;
}