From 1a095735b1d8e7ade61ac4f936032e0c9dcc044f Mon Sep 17 00:00:00 2001 From: Physick <96335032+DegustatorPonos@users.noreply.github.com> Date: Tue, 7 Jul 2026 19:05:45 +0500 Subject: Resources loading --- Credits.md | 3 +++ assets/coolvetica.ttf | Bin 0 -> 67464 bytes build.zig | 3 +++ src/main.c | 14 +++++++++++--- src/puzzles/puzzle.c | 21 +++++++++++++++++++++ src/puzzles/puzzle.h | 31 +++++++++++++++++++++++++++++++ src/resources/resources.c | 12 ++++++++++++ src/resources/resources.h | 9 +++++++++ src/scenes/puzzleScene.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/scenes/scenes.h | 2 ++ 10 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 Credits.md create mode 100644 assets/coolvetica.ttf create mode 100644 src/puzzles/puzzle.c create mode 100644 src/puzzles/puzzle.h create mode 100644 src/resources/resources.c create mode 100644 src/resources/resources.h create mode 100644 src/scenes/puzzleScene.c diff --git a/Credits.md b/Credits.md new file mode 100644 index 0000000..e79a73c --- /dev/null +++ b/Credits.md @@ -0,0 +1,3 @@ +## FONTS +All the fonts were downloaded from https://www.1001freefonts.com +- https://www.1001freefonts.com/coolvetica.font diff --git a/assets/coolvetica.ttf b/assets/coolvetica.ttf new file mode 100644 index 0000000..16d39c1 Binary files /dev/null and b/assets/coolvetica.ttf differ diff --git a/build.zig b/build.zig index 49c314b..9b56446 100644 --- a/build.zig +++ b/build.zig @@ -13,8 +13,11 @@ pub fn build(b: *std.Build) void { root.addCSourceFiles(.{ .files = &[_][]const u8 { "src/main.c", + "src/resources/resources.c", "src/scenes/sceneManager.c", "src/scenes/mainMenu.c", + "src/scenes/puzzleScene.c", + "src/puzzles/puzzle.c", } }); diff --git a/src/main.c b/src/main.c index af955f0..7bf8c87 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,10 @@ #include #include #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 +#include + +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 + +#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 +#include + +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 + +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 +#include +#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 +#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 -- cgit v1.3