summaryrefslogtreecommitdiff
path: root/src/scenes/puzzleScene.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scenes/puzzleScene.c')
-rw-r--r--src/scenes/puzzleScene.c64
1 files changed, 60 insertions, 4 deletions
diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c
index feeada8..67d3c86 100644
--- a/src/scenes/puzzleScene.c
+++ b/src/scenes/puzzleScene.c
@@ -7,6 +7,7 @@
typedef struct {
Puzzle *PuzzlePtr;
TextArea *EditorInfo;
+ Button *submitButton;
int scroll;
} puzzleSceneData;
@@ -22,6 +23,32 @@ void DrawPuzzleName(char *name) {
DrawTextEx(*GetMainFont(), name, pos, HEADER_FONT_SIZE, 1, COLORSCHEME_BROWN);
}
+void DrawControls(Scene *self, Rectangle rect) {
+ DrawRecBordered(rect, WHITE, COLORSCHEME_ORANGE, BORDER);
+ puzzleSceneData *data = ((Scene *)self)->data;
+ Rectangle panel = {
+ .x = rect.x + BORDER * 2,
+ .y = rect.y + BORDER * 2,
+ .width = rect.width - BORDER * 4,
+ .height = rect.height - BORDER * 4,
+ };
+
+ int acc = panel.width - panel.height + BORDER * 4;
+
+ if (data->submitButton != NULL) {
+ Rectangle submit_trg = {
+ .x = acc,
+ .y = panel.y,
+ .width = panel.height,
+ .height = panel.height,
+ };
+ // Hacky. Should find a way to update in update()
+ UpdateButton(data->submitButton, &submit_trg);
+ DrawButton(data->submitButton, &submit_trg);
+ acc -= (panel.height + PADDING);
+ }
+}
+
Rectangle GetBodyRect() {
int HeaderOffset = PADDING * 2 + HEADER_FONT_SIZE;
Rectangle outp = {
@@ -79,9 +106,26 @@ bool drawPuzzleScene(void *self) {
GetMainFont(), 20, COLORSCHEME_BROWN, 3, &data->scroll);
DrawTextArea(data->EditorInfo, pane2);
+ Rectangle controls_rect = {
+ .x = PADDING,
+ .y = body.y + body.height + PADDING,
+ .width = body.width,
+ .height = FOOTER_HEIGHT,
+ };
+ DrawControls(self, controls_rect);
+
return true;
}
+void SubmitPuzzle(Scene *self) {
+ puzzleSceneData *data = ((Scene *)self)->data;
+
+ char *script = GetText(data->EditorInfo);
+ SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script);
+ if (res != NULL)
+ AddScene(CreateResultView(res));
+}
+
bool updatePuzzleScene(void *self) {
puzzleSceneData *data = ((Scene *)self)->data;
@@ -91,10 +135,7 @@ bool updatePuzzleScene(void *self) {
UpdateTextArea(data->EditorInfo, pane2);
if (IsKeyPressed(KEY_F5)) {
- char *script = GetText(data->EditorInfo);
- SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script);
- if (res != NULL)
- AddScene(CreateResultView(res));
+ SubmitPuzzle(self);
}
return true;
@@ -104,6 +145,7 @@ void deinitPuzzleScene(void *self) {
puzzleSceneData *data = ((Scene *)self)->data;
TraceLog(LOG_INFO, "Deleting a puzzle scene");
FreeTextArea(data->EditorInfo);
+ if (data->submitButton != NULL) free(data->submitButton);
free(data);
free((Scene *)self);
}
@@ -128,6 +170,20 @@ Scene *CreatePuzzleScene(Puzzle *puzzle) {
EditorDisplayParams->scroll_v = 0;
}
+ Button *submitButton = malloc(sizeof(Button));
+ if (submitButton != NULL) {
+ submitButton->parent = outp;
+ submitButton->OnClick = SubmitPuzzle;
+ submitButton->atlas = GetButtonsAtlas();
+ submitButton->textrueLocation = (Rectangle) {
+ .x = 0,
+ .y = 0,
+ .width = 32,
+ .height = 32,
+ };
+ }
+ data->submitButton = submitButton;
+
if (puzzle->InitialCode != NULL) {
data->EditorInfo = CreateTextAreaFromText(EditorDisplayParams, puzzle->InitialCode);
} else {