#include #include "../puzzles/puzzle.h" #ifndef SCENES_H #define SCENES_H #define SCENE_STACK_SIZE 16 /// This structure represents a scene that is stored in a stack. /// The main appeal of this data type is dynamic creation of different /// scenes that don't depend on global state typedef struct { bool (*Update)(void *self); bool (*Draw)(void *self); void (*Deint)(void *self); /// A generic pointer to whatever data the scene needs. You will have to /// cast it yourself void *data; // Set this to true if the previous scene should be rendered bool IsTransparent; } Scene; bool InitSceneStack(); bool AddScene(Scene *newScene); void DeleteSceneFromStack(); bool DrawScene(); bool UpdateScene(); Scene *CreateMainMenu(); Scene *CreatePuzzleScene(Puzzle *puzzle); Scene *CreateDistractionScene(DistractionPuzzle *puzzle, void (*addTime)(Scene *, size_t)); Scene *CreateResultView(SubmitionResult *result); Scene *CreatePuzzleCollectionScene(char *path); #endif // SCENES_H