97 lines
1.8 KiB
C
97 lines
1.8 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;
|
|
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
|