annotate src/adventure/panic_state.c @ 91:8bfb90e85b28

adventure: add more details in panic
author David Demelier <markand@malikania.fr>
date Sat, 21 Mar 2020 14:39:43 +0100
parents 30baadb6f6a2
children ed72843a7194
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * panic_state.c -- panic state
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
19 #include <assert.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
20 #include <stdio.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
21 #include <stdlib.h>
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
22
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <error.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
24 #include <event.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <font.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
26 #include <game.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <painter.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <sys.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <texture.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <util.h>
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <window.h>
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
32 #include <map_state.h>
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include "panic_state.h"
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #define BACKGROUND 0x4f5070ff
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #define FOREGROUND 0xffffffff
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #define FONT "fonts/Lato-Regular.ttf"
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #define FONT_SZ 16
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
42 #define PADDING 20
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
43
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
44 #define OUT "molko-adventure.txt"
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
45
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 struct label {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 const char *text;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 struct texture *texture;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 static struct {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 struct font *font;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 } data;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 static struct label headers[] = {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 { "An unrecoverable error occured and the game cannot continue.", NULL },
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 { "Please report the detailed error as provided below.", NULL },
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 static struct label bottom[] = {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 { "Press <s> to save information and generate a core dump.", NULL },
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 { "Press <q> to quit without saving information.", NULL }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
65 static struct label lerror;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
66
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 enter(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 static void
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
73 dump(void)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
74 {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
75 FILE *fp;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
76
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
77 if (!(fp = fopen(OUT, "w")))
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
78 goto dump;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
79
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
80 /* Print various information. */
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
81 fprintf(fp, "Molko's Adventure crash dump report\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
82 fprintf(fp, "== state map dump ==\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
83 fprintf(fp, "map:\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
84 fprintf(fp, " w %u\n", map_state_data.map.w);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
85 fprintf(fp, " h %u\n", map_state_data.map.h);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
86 fprintf(fp, "player:\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
87 fprintf(fp, " x: %u\n", map_state_data.player.x);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
88 fprintf(fp, " y: %u\n", map_state_data.player.y);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
89 fprintf(fp, "view:\n");
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
90 fprintf(fp, " w: %u\n", map_state_data.view.w);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
91 fprintf(fp, " h: %u\n", map_state_data.view.h);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
92 fprintf(fp, " x: %u\n", map_state_data.view.x);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
93 fprintf(fp, " y: %u\n", map_state_data.view.y);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
94
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
95 dump:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
96 if (fp)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
97 fclose(fp);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
98
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
99 abort();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
100 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
101
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
102 static void
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
103 handle_keydown(const struct event_key *ev)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
104 {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
105 assert(ev);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
106
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
107 switch (ev->key) {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
108 case KEY_q:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
109 game_quit();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
110 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
111 case KEY_s:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
112 dump();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
113 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
114 default:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
115 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
116 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
117 }
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
118
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
119 static void
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 handle(const union event *ev)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
122 assert(ev);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
123
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
124 switch (ev->type) {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
125 case EVENT_KEYDOWN:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
126 handle_keydown(&ev->key);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
127 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
128 default:
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
129 break;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
130 }
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 generate(struct label labels[], size_t labelsz)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
136 assert(labels);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
138 for (size_t i = 0; i < labelsz; ++i) {
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
139 if (labels[i].texture)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
140 continue;
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
141
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
142 labels[i].texture = font_render(data.font, labels[i].text, FOREGROUND);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
143
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
144 if (!labels[i].texture)
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
145 error_fatal();
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 update(unsigned int ticks)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 (void)ticks;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
154 lerror.text = error();
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
155
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 generate(headers, NELEM(headers));
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
157 generate(&lerror, 1);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 generate(bottom, NELEM(bottom));
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 draw(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
164 int y = PADDING;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 painter_set_target(NULL);
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 painter_set_color(BACKGROUND);
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 painter_clear();
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 /* Header. */
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 for (size_t i = 0; i < NELEM(headers); ++i) {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
172 texture_draw(headers[i].texture, PADDING, y);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 y += texture_height(headers[i].texture) + 2;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
176 /* Error message. */
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
177 texture_draw(lerror.texture, PADDING, y + PADDING);
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
178
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 /* Bottom. */
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
180 y = window_height() - PADDING;
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 y -= texture_height(bottom[0].texture);
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 for (size_t i = 0; i < NELEM(bottom); ++i) {
91
8bfb90e85b28 adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents: 89
diff changeset
184 texture_draw(bottom[i].texture, PADDING, y);
89
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 y -= texture_height(bottom[i].texture) + 2;
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
188
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 static void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 leave(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 }
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 struct state panic_state = {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 .enter = enter,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 .handle = handle,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 .update = update,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 .draw = draw,
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 .leave = leave
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 };
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 void
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 panic_state_init(void)
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 {
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 /*
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 * If the panic state can not be loaded we're unable to show any
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 * useful information to the screen so as last resort print them
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 * on the console.
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 */
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 if (!(data.font = font_openf(sys_datapath(FONT), FONT_SZ)))
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 error_fatal();
30baadb6f6a2 core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 }