summaryrefslogtreecommitdiff
path: root/src/scenes
diff options
context:
space:
mode:
authorphysick <mynameisgennadiy@vk.com>2026-09-06 16:10:24 +0500
committerphysick <mynameisgennadiy@vk.com>2026-09-06 16:10:24 +0500
commit2284646db66fc117246225bd30298ddbef8ed13a (patch)
tree05f3d0ff88932c9f49db00821f12a3a1ee6f2ea8 /src/scenes
parentc88bb49416aaeb13c3969727a305bc7ed3263963 (diff)
win conditionHEADmaster
Diffstat (limited to 'src/scenes')
-rw-r--r--src/scenes/puzzleScene.c35
1 files changed, 30 insertions, 5 deletions
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));