From 8b79b8149d1e23d90b5871f980aec65d8aa7ae23 Mon Sep 17 00:00:00 2001 From: physick Date: Wed, 15 Jul 2026 17:46:13 +0500 Subject: Puzzle infrastructure pt 1. --- src/scenes/puzzleScene.c | 25 ++++++++++++++++++------- src/scenes/resultView.c | 10 +++++++--- src/scenes/scenes.h | 2 +- 3 files changed, 26 insertions(+), 11 deletions(-) (limited to 'src/scenes') 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 -- cgit v1.3