Mercurial > molko
annotate libadventure/adventure/panic_state.c @ 150:9733d379be89
ui: add a standalone align() function
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 15 Oct 2020 13:13:38 +0200 |
parents | c577c15df07f |
children |
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 |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
23 #include <core/error.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
24 #include <core/event.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
25 #include <core/font.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
26 #include <core/game.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
27 #include <core/painter.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
28 #include <core/sys.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
29 #include <core/texture.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
30 #include <core/util.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
31 #include <core/window.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
32 |
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
33 #include <rpg/map_state.h> |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
133
c46f80820b42
core: revamp debug using theme
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
35 #include <adventure/assets/fonts/lato.h> |
117
445035ace840
core: fix panic handling early
David Demelier <markand@malikania.fr>
parents:
98
diff
changeset
|
36 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include "panic_state.h" |
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 BACKGROUND 0x4f5070ff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 #define FOREGROUND 0xffffffff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
117
445035ace840
core: fix panic handling early
David Demelier <markand@malikania.fr>
parents:
98
diff
changeset
|
42 #define SIZE 16 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
43 #define PADDING 20 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
44 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
45 #define OUT "molko-adventure.txt" |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
46 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 struct label { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 const char *text; |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
49 struct texture texture; |
89
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 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 static struct { |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
53 struct font font; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 } data; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 static struct label headers[] = { |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
57 { .text = "An unrecoverable error occured and the game cannot continue." }, |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
58 { .text = "Please report the detailed error as provided below." }, |
89
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 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 static struct label bottom[] = { |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
62 { .text = "Press <s> to save information and generate a core dump." }, |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
63 { .text = "Press <q> to quit without saving information." } |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
66 static struct label lerror; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
67 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 static void |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
69 die(const char *fmt, ...) |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
70 { |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
71 assert(fmt); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
72 |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
73 va_list ap; |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
74 |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
75 va_start(ap, fmt); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
76 fprintf(stderr, "abort: "); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
77 vfprintf(stderr, fmt, ap); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
78 va_end(ap); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
79 exit(1); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
80 } |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
81 |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
82 static void |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 enter(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 static void |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
88 dump(void) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
89 { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
90 FILE *fp; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
91 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
92 if (!(fp = fopen(OUT, "w"))) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
93 goto dump; |
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 /* Print various information. */ |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
96 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
|
97 fprintf(fp, "== state map dump ==\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
98 fprintf(fp, "map:\n"); |
98
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
99 fprintf(fp, " w %u\n", map_state_data.map.data.w); |
c7e993455985
map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents:
97
diff
changeset
|
100 fprintf(fp, " h %u\n", map_state_data.map.data.h); |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
101 fprintf(fp, "player:\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
102 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
|
103 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
|
104 fprintf(fp, "view:\n"); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 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
|
109 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
110 dump: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
111 if (fp) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
112 fclose(fp); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
113 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
114 abort(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
115 } |
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 static void |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
118 handle_keydown(const struct event_key *ev) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
119 { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
120 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
121 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
122 switch (ev->key) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
123 case KEY_q: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
124 game_quit(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
125 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
126 case KEY_s: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
127 dump(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
128 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
129 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
130 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
131 } |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
132 } |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
133 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
134 static void |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 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
|
136 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
137 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
138 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
139 switch (ev->type) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
140 case EVENT_KEYDOWN: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
141 handle_keydown(&ev->key); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
142 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
143 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
144 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
145 } |
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 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 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
|
150 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
151 assert(labels); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
153 for (size_t i = 0; i < labelsz; ++i) { |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
154 if (texture_ok(&labels[i].texture)) |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
155 continue; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
156 |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
157 data.font.color = FOREGROUND; |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
158 font_render(&data.font, &labels[i].texture, labels[i].text); |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
159 |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
160 if (!texture_ok(&labels[i].texture)) |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
161 die("%s\n", error()); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 update(unsigned int ticks) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 (void)ticks; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
170 lerror.text = error(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
171 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 generate(headers, NELEM(headers)); |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
173 generate(&lerror, 1); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 generate(bottom, NELEM(bottom)); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 draw(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
180 int y = PADDING; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 painter_set_target(NULL); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 painter_set_color(BACKGROUND); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 painter_clear(); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 /* Header. */ |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 for (size_t i = 0; i < NELEM(headers); ++i) { |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
188 texture_draw(&headers[i].texture, PADDING, y); |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
189 y += headers[i].texture.h + 2; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
192 /* Error message. */ |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
193 texture_draw(&lerror.texture, PADDING, y + PADDING); |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
194 |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 /* Bottom. */ |
97
58133933ea17
window: expose some data to avoid functions
David Demelier <markand@malikania.fr>
parents:
95
diff
changeset
|
196 y = window.h - PADDING; |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
197 y -= bottom[0].texture.h; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 for (size_t i = 0; i < NELEM(bottom); ++i) { |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
200 texture_draw(&bottom[i].texture, PADDING, y); |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
91
diff
changeset
|
201 y -= bottom[i].texture.h + 2; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 } |
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 static void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 leave(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 } |
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 struct state panic_state = { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 .enter = enter, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 .handle = handle, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 .update = update, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 .draw = draw, |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 .leave = leave |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 }; |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 void |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 panic_state_init(void) |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 { |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 /* |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 * 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
|
223 * 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
|
224 * on the console. |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 */ |
134
197374e9f0b2
cmake: prefix assets with their directory
David Demelier <markand@malikania.fr>
parents:
133
diff
changeset
|
226 if (!(font_openmem(&data.font, fonts_lato, sizeof (fonts_lato), SIZE))) |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
227 die("%s", error()); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 } |