diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 14 | ||||
| -rw-r--r-- | src/puzzles/puzzle.c | 21 | ||||
| -rw-r--r-- | src/puzzles/puzzle.h | 31 | ||||
| -rw-r--r-- | src/resources/resources.c | 12 | ||||
| -rw-r--r-- | src/resources/resources.h | 9 | ||||
| -rw-r--r-- | src/scenes/puzzleScene.c | 46 | ||||
| -rw-r--r-- | src/scenes/scenes.h | 2 |
7 files changed, 132 insertions, 3 deletions
@@ -1,8 +1,10 @@ #include <stdio.h> #include <raylib.h> #include "scenes/scenes.h" +#include "resources/resources.h" int main(void) { + if (!InitSceneStack()) { printf("Failed to create a scene stack\n"); return 1; @@ -12,16 +14,22 @@ int main(void) { printf("Failed to create a main menu\n"); return 1; } + + if (!AddScene(CreatePuzzleScene(GetTestPuzzle()))) { + printf("Failed to create a puzzle menu\n"); + return 1; + } + SetConfigFlags(FLAG_WINDOW_RESIZABLE); InitWindow(800, 600, "Programming game"); + LoadResources(); SetTargetFPS(60); while (!WindowShouldClose()) { - BeginDrawing(); - UpdateScene(); - DrawScene(); + BeginDrawing(); + DrawScene(); EndDrawing(); } diff --git a/src/puzzles/puzzle.c b/src/puzzles/puzzle.c new file mode 100644 index 0000000..8c2c3de --- /dev/null +++ b/src/puzzles/puzzle.c @@ -0,0 +1,21 @@ +#include "puzzle.h" +#include <stdlib.h> +#include <string.h> + +Puzzle *GetTestPuzzle() { + Puzzle *outp = malloc(sizeof(Puzzle)); + if (outp == NULL) return NULL; + + outp->Name = strdup("Test puzzle"); + outp->Description = strdup("In this puzzle you will have to return the input string"); + + return outp; +} + +void FreePuzzle(Puzzle *self) { + free(self->Name); + free(self->Description); + free(self->PrivateTests); + free(self->PublicTests); + free(self); +} diff --git a/src/puzzles/puzzle.h b/src/puzzles/puzzle.h new file mode 100644 index 0000000..8f7ef0d --- /dev/null +++ b/src/puzzles/puzzle.h @@ -0,0 +1,31 @@ +#include <stddef.h> + +#ifndef PUZZLE_H + +typedef struct { + // TODO: figure it out + char *LuaSnippet; + char *ExpectedOutput; +} Test; + +typedef struct { + char *Name; + char *Description; + + /// The tests that are accessible for an end user + size_t PublicTestC; + Test *PublicTests; + + size_t PrivateTestC; + Test *PrivateTests; +} Puzzle; + +// TODO +void ReadPuzzleFromFile(const char *path); + +void FreePuzzle(Puzzle *self); +/// A prebuilt puzzle. Used for debuging +Puzzle *GetTestPuzzle(); + +#define PUZZLE_H +#endif // PUZZLE_H diff --git a/src/resources/resources.c b/src/resources/resources.c new file mode 100644 index 0000000..55bf3ce --- /dev/null +++ b/src/resources/resources.c @@ -0,0 +1,12 @@ +#include "resources.h" +#include <stddef.h> +#include <raylib.h> + +Font MainFont; + +void LoadResources() { + MainFont = LoadFontEx("assets/coolvetica.ttf", 100, NULL, 0); +} + +Font *GetMainFont() { return &MainFont; } + diff --git a/src/resources/resources.h b/src/resources/resources.h new file mode 100644 index 0000000..a368a02 --- /dev/null +++ b/src/resources/resources.h @@ -0,0 +1,9 @@ +#ifndef RESOURCES_H +#define RESOURCES_H + +#include <raylib.h> + +void LoadResources(); +Font *GetMainFont(); + +#endif // RESOURCES_H diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c new file mode 100644 index 0000000..10e3fc9 --- /dev/null +++ b/src/scenes/puzzleScene.c @@ -0,0 +1,46 @@ +#include <raylib.h> +#include <stdlib.h> +#include "scenes.h" +#include "../resources/resources.h" + +typedef struct { + Puzzle *PuzzlePtr; +} puzzleSceneData; + + +bool updatePuzzleScene(void *self) { + return true; +} + +Vector2 PuzzleNamePos = { .x = 0, .y = 0 }; + +bool drawPuzzleScene(void *self) { + puzzleSceneData *data = ((Scene *)self)->data; + ClearBackground(SKYBLUE); + + DrawTextEx(*GetMainFont(), + data->PuzzlePtr->Name, + PuzzleNamePos, + 100, 1, BLACK); + + return true; +} + +void deinitPuzzleScene(void *self) { + TraceLog(LOG_INFO, "Deleting a puzzle scene"); + free((puzzleSceneData *)((Scene *)self)->data); + free((Scene *)self); +} + +Scene *CreatePuzzleScene(Puzzle *puzzle) { + Scene *outp = malloc(sizeof(Scene)); + outp->Update = updatePuzzleScene; + outp->Draw = drawPuzzleScene; + outp->Deint = deinitPuzzleScene; + + puzzleSceneData *data = malloc(sizeof(puzzleSceneData)); + data->PuzzlePtr = puzzle; + + outp->data = data; + return outp; +} diff --git a/src/scenes/scenes.h b/src/scenes/scenes.h index 7ad34af..22d9a41 100644 --- a/src/scenes/scenes.h +++ b/src/scenes/scenes.h @@ -1,4 +1,5 @@ #include <stdbool.h> +#include "../puzzles/puzzle.h" #ifndef SCENES_H #define SCENES_H @@ -26,5 +27,6 @@ bool DrawScene(); bool UpdateScene(); Scene *CreateMainMenu(); +Scene *CreatePuzzleScene(Puzzle *puzzle); #endif // SCENES_H |
