Files
PixelDefense/game/game_state.h

95 lines
1.7 KiB
C

#ifndef PIXELDEFENSE_GAME_STATE_H
#define PIXELDEFENSE_GAME_STATE_H
#include <breeze.h>
#include <flecs.h>
#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;
} 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