summaryrefslogtreecommitdiff
path: root/src/scenes
diff options
context:
space:
mode:
authorphysick <mynameisgennadiy@vk.com>2026-07-15 17:46:13 +0500
committerphysick <mynameisgennadiy@vk.com>2026-07-15 17:46:13 +0500
commit8b79b8149d1e23d90b5871f980aec65d8aa7ae23 (patch)
tree88a8788b75270dba53a15cbc2b6e0916f05301c6 /src/scenes
parentf314b56da42e1ead200e2373e9b214f77290d03b (diff)
Puzzle infrastructure pt 1.
Diffstat (limited to 'src/scenes')
-rw-r--r--src/scenes/puzzleScene.c25
-rw-r--r--src/scenes/resultView.c10
-rw-r--r--src/scenes/scenes.h2
3 files changed, 26 insertions, 11 deletions
diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c
index 5590bb8..57ac15d 100644
--- a/src/scenes/puzzleScene.c
+++ b/src/scenes/puzzleScene.c
@@ -72,7 +72,7 @@ bool drawPuzzleScene(void *self) {
// return true;
Rectangle pane1, pane2;
- GetPanesSplit(&pane1, &pane2, body, 0.5, 0.4);
+ GetPanesSplit(&pane1, &pane2, body, 0.35, 0.4);
DrawRecBordered(pane1, WHITE, COLORSCHEME_ORANGE, BORDER);
DrawRecBordered(pane2, WHITE, COLORSCHEME_ORANGE, BORDER);
@@ -85,12 +85,19 @@ bool drawPuzzleScene(void *self) {
bool updatePuzzleScene(void *self) {
puzzleSceneData *data = ((Scene *)self)->data;
- HandleKeyboard(data->EditorInfo);
+
+ Rectangle body = GetBodyRect();
+ Rectangle pane1, pane2;
+ GetPanesSplit(&pane1, &pane2, body, 0.35, 0.4);
+ UpdateTextArea(data->EditorInfo, pane2);
+
if (IsKeyPressed(KEY_F5)) {
- char *txt = GetText(data->EditorInfo);
- char *outp = EvaluateScript(txt);
- free(txt);
- AddScene(CreateResultView(outp));
+ char *script = GetText(data->EditorInfo);
+ // char *outp = EvaluateScript(txt);
+ // free(txt);
+ // AddScene(CreateResultView(outp));
+ SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script);
+ AddScene(CreateResultView(res));
}
return true;
@@ -122,8 +129,12 @@ Scene *CreatePuzzleScene(Puzzle *puzzle) {
EditorDisplayParams->scroll_h = 0;
EditorDisplayParams->scroll_v = 0;
}
- data->EditorInfo = CreateTextArea(EditorDisplayParams);
+ if (puzzle->InitialCode != NULL) {
+ data->EditorInfo = CreateTextAreaFromText(EditorDisplayParams, puzzle->InitialCode);
+ } else {
+ data->EditorInfo = CreateTextArea(EditorDisplayParams);
+ }
outp->data = data;
return outp;
diff --git a/src/scenes/resultView.c b/src/scenes/resultView.c
index b433bd0..033d17e 100644
--- a/src/scenes/resultView.c
+++ b/src/scenes/resultView.c
@@ -11,7 +11,7 @@ static const int BORDER = 2;
static const int SCROLL_SPEED = 10;
typedef struct {
- char *value;
+ SubmitionResult *value;
int scroll;
/// For the fun popping up effect
float scroll_up;
@@ -57,17 +57,20 @@ bool drawResultView(void *self) {
// DrawBackground();
Rectangle body = GetResultViewBodyRect(data->scroll_up);
DrawRecBordered(body, WHITE, COLORSCHEME_ORANGE, BORDER);
- DrawTextInRec(body, data->value,
+ DrawTextInRec(body, data->value->stdout,
GetMainFont(), 20, COLORSCHEME_BROWN, 3, &data->scroll);
return true;
}
void deinitResultView(void *self) {
TraceLog(LOG_INFO, "Deleting a result view");
+ ResultViewData *data = ((Scene *)self)->data;
+ if (data->value != NULL) FreeSunmitionResult(data->value);
+ free(data);
free((Scene *)self);
}
-Scene *CreateResultView(char *result) {
+Scene *CreateResultView(SubmitionResult *result) {
TraceLog(LOG_INFO, "Creating a main menu");
Scene *outp = malloc(sizeof(Scene));
outp->Draw = drawResultView;
@@ -80,6 +83,7 @@ Scene *CreateResultView(char *result) {
free(outp);
return NULL;
}
+
data->value = result;
data->scroll = 0;
data->scroll_up = 1;
diff --git a/src/scenes/scenes.h b/src/scenes/scenes.h
index 37da761..b7fdf02 100644
--- a/src/scenes/scenes.h
+++ b/src/scenes/scenes.h
@@ -30,6 +30,6 @@ bool UpdateScene();
Scene *CreateMainMenu();
Scene *CreatePuzzleScene(Puzzle *puzzle);
-Scene *CreateResultView(char *result);
+Scene *CreateResultView(SubmitionResult *result);
#endif // SCENES_H