File Game2DLayer.h
File List > engine > include > Game2DLayer.h
Go to the documentation of this file
#ifndef H_GAME2DLAYER
#define H_GAME2DLAYER
#ifdef __cplusplus
extern "C" {
#endif
#include "IntTypes.h"
#include "DynArray.h"
#include "HandleDefs.h"
#include <cglm/cglm.h>
#include "InputContext.h"
#include "FreeLookCameraMode.h"
#include "Entity2DCollection.h"
#include "TimerPool.h"
#define MAX_GAME_LAYER_ASSET_FILE_PATH_LEN 128
typedef struct InputMapping InputMapping;
struct GameFrameworkEventListener;
struct GameLayer2DData;
struct BinarySerializer;
struct Vert2DTexture;
typedef void (*PreFirstInitFn)(struct GameLayer2DData* pGameLayerData);
typedef void (*PreLoadLevelFn)(struct GameLayer2DData* pGameLayerData);
typedef void (*LevelDataPacketExtenderFn)(struct GameLayer2DData* pGameLayerData, struct BinarySerializer* pBS);
typedef void (*LevelDataRequestHandlerExtenderFn)(struct GameLayer2DData* pGameLayerData, struct BinarySerializer* pBS);
typedef void (*LevelDataHandlerExtenderFn)(struct GameLayer2DData* pGameLayerData, struct BinarySerializer* pBS);
struct GameFrameworkLayer;
struct DrawContext;
typedef struct DrawContext DrawContext;
// the real type of this should be hSprite ie u32 but i want to save memory so u16 it is - that
// should be enough for anyone - just store the tiles in the first 16 bits worth of indexes
struct Transform2D
{
vec2 position;
vec2 scale;
vec2 rotationPointRelative; /* relative to position */
float rotation;
bool bMirrored;
};
struct TilemapRenderData;
struct TilemapLayerRenderData;
enum ObjectLayer2DDrawOrder
{
DrawOrder_TopDown,
DrawOrder_Index
};
struct TileMapLayer
{
struct TilemapLayerRenderData* pRenderData;
struct Transform2D transform;
int tileWidthPx;
int tileHeightPx;
int widthTiles;
int heightTiles;
bool bIsObjectLayer;
enum ObjectLayer2DDrawOrder drawOrder;
TileIndex* Tiles;
u32 type;
};
struct TileMap
{
VECTOR(struct TileMapLayer) layers;
char* dataFilePath;
struct TilemapRenderData* pRenderData;
};
struct GameLayer2DData
{
struct GameFrameworkLayer* pLayer;
HEntity2DQuadtreeNode hEntitiesQuadTree;
hAtlas hAtlas;
struct TileMap tilemap;
bool bLoaded;
bool bFreeLookMode;
struct Transform2D camera;
int cameraClampedToTilemapLayer;
struct FreeLookCameraModeControls freeLookCtrls;
VECTOR(struct Vert2DTexture) pWorldspaceVertices;
VECTOR(VertIndexT) pWorldspaceIndices;
H2DWorldspaceVertexBuffer vertexBuffer;
char atlasFilePath[MAX_GAME_LAYER_ASSET_FILE_PATH_LEN];
char tilemapFilePath[MAX_GAME_LAYER_ASSET_FILE_PATH_LEN];
bool bDebugLayerAttatched;
char debugMsg[256];
struct GameFrameworkEventListener* pDebugListener;
int windowW;
int windowH;
HPhysicsWorld hPhysicsWorld;
struct Entity2DCollection entities;
void* pUserData;
PreFirstInitFn preFirstInitCallback;
PreLoadLevelFn preLoadLevelFn;
DrawContext* pDrawContext;
/*
@brief
don't draw
*/
bool bSkipDraw;
bool bCurrentLocationIsDirty;
LevelDataPacketExtenderFn levelDataPacketExtender;
LevelDataRequestHandlerExtenderFn levelDataRequestHandlerExtender;
LevelDataHandlerExtenderFn levelDataHandlerExtender;
struct SDTimerPool timerPool;
HTimer hNetworkStateUpdateTimer;
};
struct Game2DLayerOptions
{
const char* atlasFilePath;
const char* levelFilePath;
};
void TilemapLayer_GetTLBR(vec2 tl, vec2 br, struct TileMapLayer* pTMLayer);
void Game2DLayer_Get(struct GameFrameworkLayer* pLayer, struct Game2DLayerOptions* pOptions, DrawContext* pDC);
void Game2DLayer_SaveLevelFile(struct GameLayer2DData* pData, const char* outputFilePath);
void GameLayer2D_OnPush(struct GameFrameworkLayer* pLayer, DrawContext* drawContext, InputContext* inputContext);
void Game2DLayer_OnPop(struct GameFrameworkLayer* pLayer, DrawContext* drawContext, InputContext* inputContext);
void G2D_SaveLevelDataInternal(struct GameLayer2DData* pData, struct BinarySerializer* pBS);
VECTOR(HEntity2D) Et2D_QueryDynEntities(struct GameFrameworkLayer* pLayer, struct Entity2DCollection* pCollection, vec2 regionTL, vec2 regionBR, VECTOR(HEntity2D) pOutEntities);
void Et2D_Transform2DToMat3(struct Transform2D* pTrans, mat3 out);
#ifdef __cplusplus
}
#endif
#endif // !H_GAME2DLAYER