diff options
Diffstat (limited to 'src/scenes')
| -rw-r--r-- | src/scenes/puzzleScene.c | 4 | ||||
| -rw-r--r-- | src/scenes/resultView.c | 68 | ||||
| -rw-r--r-- | src/scenes/scenes.h | 1 |
3 files changed, 71 insertions, 2 deletions
diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c index 7c4e1b2..972335f 100644 --- a/src/scenes/puzzleScene.c +++ b/src/scenes/puzzleScene.c @@ -1,5 +1,4 @@ #include <raylib.h> -#include <stdio.h> #include <stdlib.h> #include "scenes.h" #include "../resources/resources.h" @@ -89,8 +88,9 @@ bool updatePuzzleScene(void *self) { HandleKeyboard(data->EditorInfo); if (IsKeyPressed(KEY_F5)) { char *txt = GetText(data->EditorInfo); - EvaluateScript(txt); + char *outp = EvaluateScript(txt); free(txt); + AddScene(CreateResultView(outp)); } return true; diff --git a/src/scenes/resultView.c b/src/scenes/resultView.c new file mode 100644 index 0000000..9985319 --- /dev/null +++ b/src/scenes/resultView.c @@ -0,0 +1,68 @@ +#include <raylib.h> +#include <stdarg.h> +#include <stddef.h> +#include <stdlib.h> +#include "scenes.h" +#include "../ui_elements/UI.h" +#include "../resources/resources.h" + +static const int PADDING = 10; +static const int BORDER = 2; + +typedef struct { + char *value; + int scroll; +} ResultViewData; + +Rectangle GetResultViewBodyRect() { + int HeaderOffset = PADDING * 2; + Rectangle outp = { + .x = PADDING, + .y = HeaderOffset, + .width = GetScreenWidth() - PADDING * 2, + .height = GetScreenHeight() - HeaderOffset - PADDING * 3, + }; + return outp; +} + +bool updateResultView(void *self) { + if (IsKeyDown(KEY_ESCAPE)) { + DeleteSceneFromStack(); + return true; + } + return true; +} + +bool drawResultView(void *self) { + ResultViewData *data = ((Scene *)self)->data; + DrawBackground(); + Rectangle body = GetResultViewBodyRect(); + DrawRecBordered(body, WHITE, COLORSCHEME_ORANGE, BORDER); + DrawTextInRec(body, data->value, + GetMainFont(), 20, COLORSCHEME_BROWN, 3, &data->scroll); + return true; +} + +void deinitResultView(void *self) { + TraceLog(LOG_INFO, "Deleting a result view"); + free((Scene *)self); +} + +Scene *CreateResultView(char *result) { + TraceLog(LOG_INFO, "Creating a main menu"); + Scene *outp = malloc(sizeof(Scene)); + outp->Draw = drawResultView; + outp->Update = updateResultView; + outp->Deint = deinitResultView; + + ResultViewData *data = malloc(sizeof(ResultViewData)); + if (data == NULL) { + free(outp); + return NULL; + } + data->value = result; + data->scroll = 0; + outp->data = data; + + return outp; +} diff --git a/src/scenes/scenes.h b/src/scenes/scenes.h index 22d9a41..d243a6d 100644 --- a/src/scenes/scenes.h +++ b/src/scenes/scenes.h @@ -28,5 +28,6 @@ bool UpdateScene(); Scene *CreateMainMenu(); Scene *CreatePuzzleScene(Puzzle *puzzle); +Scene *CreateResultView(char *result); #endif // SCENES_H |
