From 2284646db66fc117246225bd30298ddbef8ed13a Mon Sep 17 00:00:00 2001 From: physick Date: Sun, 6 Sep 2026 16:10:24 +0500 Subject: win condition --- src/scenes/puzzleScene.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'src/scenes') diff --git a/src/scenes/puzzleScene.c b/src/scenes/puzzleScene.c index 52652fe..1b11327 100644 --- a/src/scenes/puzzleScene.c +++ b/src/scenes/puzzleScene.c @@ -16,6 +16,8 @@ typedef struct { // Miliseconds elapsed float time_acc; float blackout_state; + // Set when the solution is submitted. Defines whether the puzzle was solved when the scene is reinvoked + enum PUZZLE_TEST_RESULT result; PopUpState state; } puzzleSceneData; @@ -39,19 +41,26 @@ void DrawControls(Scene *self, Rectangle rect) { .height = rect.height - BORDER * 4, }; - int acc = panel.width - panel.height + BORDER * 4; + int acc = panel.width + BORDER * 4; if (data->submitButton != NULL) { + acc -= (panel.height + PADDING); Rectangle submit_trg = { .x = acc, .y = panel.y, .width = panel.height, .height = panel.height, }; - // Hacky. Should find a way to update in update() DrawButton(data->submitButton, &submit_trg); - acc -= (panel.height + PADDING); } + + // Drawing a remaining time + char timer_buf[32]; + PrintTime(timer_buf, data->distraction_timer); + Vector2 timer_size = MeasureTextEx(*GetMainFont(), timer_buf, panel.height, 1); + acc -= (timer_size.x) + PADDING; + // DrawRectangle(acc, panel.y, timer_size.x, timer_size.y, COLORSCHEME_GREEN); + DrawTextEx(*GetMainFont(), timer_buf, (Vector2) { .x = acc, .y = panel.y + 2 }, panel.height, 1, COLORSCHEME_BROWN); } Rectangle GetBodyRect() { @@ -65,6 +74,16 @@ Rectangle GetBodyRect() { return outp; } +void reopenPuzzleScene(void *self, PopUpState PreviousSceneState) { + if (self == NULL) return; + puzzleSceneData *data = ((Scene *)self)->data; + if (data == NULL) return; + if (data->result == RESULT_OK) { + TraceLog(LOG_INFO, "YIPPEE!!! (puzzle accepted)"); + DeleteSceneFromStack(); + } +} + bool drawPuzzleScene(void *self) { puzzleSceneData *data = ((Scene *)self)->data; DrawBackground(); @@ -110,11 +129,17 @@ bool drawPuzzleScene(void *self) { void SubmitPuzzle(Scene *self) { puzzleSceneData *data = ((Scene *)self)->data; + if (data == NULL) { + TraceLog(LOG_ERROR, "Failed to submit a puzzle: the data is NULL"); + return; + } char *script = GetText(data->EditorInfo); SubmitionResult *res = SubmitSolution(data->PuzzlePtr, script); - if (res != NULL) + if (res != NULL) { + data->result = res->result; AddScene(CreateResultView(res)); + } } void AddTime(Scene *self, size_t additionalTime) { @@ -178,7 +203,7 @@ Scene *CreatePuzzleScene(Puzzle *puzzle) { outp->Deint = deinitPuzzleScene; outp->IsTransparent = false; - outp->Reopen = NULL; + outp->Reopen = reopenPuzzleScene; outp->GetCurrentState = NULL; puzzleSceneData *data = malloc(sizeof(puzzleSceneData)); -- cgit v1.3