File GameFramework.h

File List > engine > include > GameFramework.h

Go to the documentation of this file

#ifndef GAMEFRAMEWORK_H
#define GAMEFRAMEWORK_H

#ifdef __cplusplus
extern "C"{
#endif 

#include "InputContext.h"
#include "DrawContext.h"

struct GameFrameworkLayer;

typedef void (*UpdateFn)(struct GameFrameworkLayer* pLayer, float deltaT);
typedef void (*DrawFn)(struct GameFrameworkLayer* pLayer, DrawContext* context);
typedef void (*InputFn)(struct GameFrameworkLayer* pLayer, InputContext* context);
typedef void (*OnPushFn)(struct GameFrameworkLayer* pLayer, DrawContext* drawContext, InputContext* inputContext);
typedef void (*OnPopFn)(struct GameFrameworkLayer* pLayer, DrawContext* drawContext, InputContext* inputContext);
typedef void (*OnWindowDimsChangedFn)(struct GameFrameworkLayer* pLayer, int newW, int newH);

typedef enum
{
    EnableUpdateFn = 1,
    EnableDrawFn = 2,
    EnableInputFn = 8,
    EnableOnPush = 16,
    EnableOnPop = 32,
    MasksDraw = 64,
    MasksUpdate = 128,
    MasksInput = 256
}GameFrameworkLayerFlags;

#define GF_ANYMASKMASK (MasksInput | MasksUpdate | MasksDraw)

enum GameFrameworkLayerType
{
    GFT_Unknown,
    GFT_UI,
    GFT_Game2D,
};

struct GameFrameworkLayer
{
    UpdateFn update;
    DrawFn draw;
    InputFn input;
    OnPushFn onPush;
    OnPopFn onPop;
    OnWindowDimsChangedFn onWindowDimsChanged;
    unsigned int flags;
    void* userData; 
    enum GameFrameworkLayerType type;
};


void GF_InitGameFramework();
void GF_DestroyGameFramework();

void GF_PushGameFrameworkLayer(const struct GameFrameworkLayer* layer);
void GF_PopGameFrameworkLayer();

void GF_EndFrame(DrawContext* drawContext, InputContext* inputContext);

void GF_UpdateGameFramework(float deltaT);
void GF_InputGameFramework(InputContext* context);
void GF_DrawGameFramework(DrawContext* context);
void GF_OnWindowDimsChanged(int newW, int newH);

struct GameFrameworkLayer* GF_GetLayerBelow(struct GameFrameworkLayer* pLayer);

#ifdef __cplusplus
}
#endif

#endif