#ifndef PIXELDEFENSE_GAME_STATE_H #define PIXELDEFENSE_GAME_STATE_H #include #include #include "constants.h" typedef enum GameScreen { SCREEN_GAME, SCREEN_PAUSE_MENU, SCREEN_MAIN_MENU, SCREEN_SETTINGS, } GameScreen; typedef struct DrawData { Rectangle src; Rectangle dst; Vector2 origin; f32 rotation; u8 layer; bool canHaveAlpha; } DrawData; typedef struct Options { // Video bool fullscreen; bool vsync; // Audio f32 master; f32 music; f32 sound; } Options; static Options getDefaultOptions() { return (Options) { .fullscreen = false, .vsync = false, .master = 5.0f, .music = 5.0f, .sound = 5.0f, }; } typedef struct Game { GameScreen screen; GameScreen nextScreen; GameScreen screenPrevFrame; Camera2D camera; BzTileset tileset; BzTileMap map; BzSpatialGrid *entityGrid; f32 frameDuration; Font font; Options options; struct { i64 wood; i64 iron; i64 food; i64 gold; i64 pop; } resources; BzStackAlloc stackAlloc; struct { BzBTNode *workerHarvest; BzBTNode *moveTo; } BTs; struct { BzObjectPool *pathData; BzObjectPool *btNode; BzObjectPool *btNodeState; } pools; struct { bool drawPath; bool drawEntityColliders; bool drawMapColliders; bool drawSpatialGrid; ecs_entity_t *inspecting; } debug; f32 elapsed; ecs_query_t *drawQuery; } Game; static void setScreen(Game *game, GameScreen newScreen) { game->nextScreen = newScreen; } extern ecs_world_t *ECS; extern ECS_COMPONENT_DECLARE(Game); // defined in main.c #endif //PIXELDEFENSE_GAME_STATE_H