summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Credits.md3
-rw-r--r--assets/coolvetica.ttfbin0 -> 67464 bytes
-rw-r--r--build.zig3
-rw-r--r--src/main.c14
-rw-r--r--src/puzzles/puzzle.c21
-rw-r--r--src/puzzles/puzzle.h31
-rw-r--r--src/resources/resources.c12
-rw-r--r--src/resources/resources.h9
-rw-r--r--src/scenes/puzzleScene.c46
-rw-r--r--src/scenes/scenes.h2
10 files changed, 138 insertions, 3 deletions
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
--- /dev/null
+++ b/assets/coolvetica.ttf
Binary files 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 <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