#pragma once // disable new_delete_type_mismatch asan warning #define IS_EDITOR 1 #include "game/assets.h" #include "render/gl.h" #include "render/gl_3d.h" #ifdef IS_EDITOR #include "editor/editor.h" #else #include "gui.h" #endif // HARDCODE BOSS const U32 TICKS_PER_SEC = 64; const F32 TICK_INTERVAL = 1.0f / (F32)TICKS_PER_SEC; extern struct CVAR* g_timescale; typedef struct { GL_SHADER_PROGRAM* gl2d; struct GL3D* gl3d; } GAME_SHADERS; typedef struct { GL_BATCH3D* batch_3d; } GAME_RENDER; typedef struct { U8 ingame; WORLD_MAP* map; U64 last_tick; } GAME_STATE; struct GAME_DATA { GL_DATA* gl; GAME_SHADERS shaders; GAME_ASSETS assets; GAME_STATE state; GAME_RENDER render; #ifdef IS_EDITOR GAME_EDITOR* editor; #endif }; extern void ui_draw_background( GAME_DATA* game, VEC2 pos, VEC2 dim, F32 progress, CLR col ); extern GAME_DATA* game_init( GL_DATA* gl ); extern void game_create_batches( GAME_DATA* game ); extern U8 game_main_loop( GAME_DATA* game ); extern void game_on_tick( GAME_DATA* game ); extern void game_destroy( GAME_DATA* game ); // loads map and populates entities extern WORLD_MAP* game_load_map( GAME_DATA* game, const char* mapname ); // unloads map and clears entity list including local player (no more level transitions can be made) extern void game_unload_map( GAME_DATA* game );