Mercurial > molko
annotate libmlk-adventure/adventure/state/panic.c @ 260:60a214ec1ab4
adventure: change the way states are stored
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 06 Dec 2020 22:50:48 +0100 |
parents | 16be1ad3ddba |
children | bfde372bf152 |
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> |
162 | 22 #include <string.h> |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
23 |
182
f6497ec74b49
core: add alloc module, closes #2512
David Demelier <markand@malikania.fr>
parents:
174
diff
changeset
|
24 #include <core/alloc.h> |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
25 #include <core/error.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
26 #include <core/event.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
27 #include <core/font.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
28 #include <core/game.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
29 #include <core/painter.h> |
162 | 30 #include <core/panic.h> |
31 #include <core/state.h> | |
121
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
32 #include <core/sys.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
33 #include <core/texture.h> |
789b23e01f52
misc: reorganize hierarchy, closes #2490
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
34 #include <core/window.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
135
diff
changeset
|
35 |
162 | 36 #include <ui/align.h> |
37 #include <ui/theme.h> | |
38 | |
39 #include "panic.h" | |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 #define BACKGROUND 0x4f5070ff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 #define FOREGROUND 0xffffffff |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
91
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 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
46 struct self { |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
47 struct state state; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
48 |
162 | 49 struct { |
50 struct texture tex; | |
51 int x; | |
52 int y; | |
53 } texts[4]; | |
89
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 |
229
e71039d820a7
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
227
diff
changeset
|
56 static void |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
57 die(const char *fmt, ...) |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
58 { |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
59 assert(fmt); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
60 |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
61 va_list ap; |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
62 |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
63 va_start(ap, fmt); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
64 fprintf(stderr, "abort: "); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
65 vfprintf(stderr, fmt, ap); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
66 va_end(ap); |
162 | 67 abort(); |
95
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
68 exit(1); |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
69 } |
e82eca4f8606
core: simplify error/panic routines
David Demelier <markand@malikania.fr>
parents:
94
diff
changeset
|
70 |
229
e71039d820a7
doc: improve documentation
David Demelier <markand@malikania.fr>
parents:
227
diff
changeset
|
71 static void |
162 | 72 stop(void) |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 { |
162 | 74 die("%s", error()); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 static void |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
78 dump(void) |
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 FILE *fp; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
81 |
162 | 82 if ((fp = fopen(OUT, "w"))) { |
83 /* TODO: add more info here. */ | |
84 fprintf(fp, "Molko's Adventure crash dump report\n"); | |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
85 fclose(fp); |
162 | 86 } |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
87 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
88 abort(); |
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 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
91 static void |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
92 handle_keydown(const struct event_key *ev) |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
93 { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
94 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
95 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
96 switch (ev->key) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
97 case KEY_q: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
98 game_quit(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
99 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
100 case KEY_s: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
101 dump(); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
102 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
103 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
104 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
105 } |
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 |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
108 static void |
162 | 109 start(struct state *state) |
110 { | |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
111 struct self *self = state->data; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
112 struct theme *theme; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
113 struct font *font; |
162 | 114 |
115 /* We remove the panic handler to avoid infinite recursion. */ | |
116 panic_handler = stop; | |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
117 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
118 theme = theme_default(); |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
119 font = theme->fonts[THEME_FONT_INTERFACE]; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
120 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
121 if (!font_render(font, &self->texts[0].tex, "An unrecoverable error occured and the game cannot continue.", FOREGROUND) || |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
122 !font_render(font, &self->texts[1].tex, "Please report the detailed error as provided below.", FOREGROUND) || |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
123 !font_render(font, &self->texts[2].tex, "Press <s> to save information and generate a core dump.", FOREGROUND) || |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
124 !font_render(font, &self->texts[3].tex, "Press <q> to quit without saving information.", FOREGROUND)) |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
125 die("%s", error()); |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
126 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
127 /* All align x the same. */ |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
128 for (size_t i = 0; i < NELEM(self->texts); ++i) |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
129 self->texts[i].x = theme->padding; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
130 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
131 /* Header (0-1). */ |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
132 self->texts[0].y = theme->padding; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
133 self->texts[1].y = self->texts[0].y + self->texts[0].tex.h + theme->padding; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
134 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
135 /* Footer. (2-3). */ |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
136 self->texts[3].y = window.h - self->texts[2].tex.h - theme->padding; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
137 self->texts[2].y = self->texts[3].y - self->texts[3].tex.h - theme->padding; |
162 | 138 } |
139 | |
140 static void | |
141 handle(struct state *state, const union event *ev) | |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 { |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
143 assert(ev); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
144 |
162 | 145 (void)state; |
146 | |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
147 switch (ev->type) { |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
148 case EVENT_KEYDOWN: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
149 handle_keydown(&ev->key); |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
150 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
151 default: |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
152 break; |
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
153 } |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 static void |
162 | 157 draw(struct state *state) |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
159 struct self *self = state->data; |
162 | 160 struct theme *theme = theme_default(); |
161 struct texture tex; | |
174
6992085d47fd
ui: major theme overhaul, closes #2509 @1h
David Demelier <markand@malikania.fr>
parents:
162
diff
changeset
|
162 struct font *font; |
162 | 163 int x, y; |
89
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 painter_set_color(BACKGROUND); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 painter_clear(); |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
168 for (size_t i = 0; i < NELEM(self->texts); ++i) |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
169 texture_draw(&self->texts[i].tex, self->texts[i].x, self->texts[i].y); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 |
162 | 171 /* The error is only available here. */ |
174
6992085d47fd
ui: major theme overhaul, closes #2509 @1h
David Demelier <markand@malikania.fr>
parents:
162
diff
changeset
|
172 font = theme->fonts[THEME_FONT_INTERFACE]; |
91
8bfb90e85b28
adventure: add more details in panic
David Demelier <markand@malikania.fr>
parents:
89
diff
changeset
|
173 |
174
6992085d47fd
ui: major theme overhaul, closes #2509 @1h
David Demelier <markand@malikania.fr>
parents:
162
diff
changeset
|
174 if (!font_render(font, &tex, error(), FOREGROUND)) |
162 | 175 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
|
176 |
162 | 177 align(ALIGN_LEFT, &x, &y, tex.w, tex.h, 0, 0, window.w, window.h); |
178 | |
179 texture_draw(&tex, x + theme->padding, y); | |
180 texture_finish(&tex); | |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
181 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
182 painter_present(); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 static void |
162 | 186 finish(struct state *state) |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
188 struct self *self = state->data; |
162 | 189 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
190 for (size_t i = 0; i < NELEM(self->texts); ++i) |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
191 texture_finish(&self->texts[i].tex); |
162 | 192 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
193 free(self); |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 } |
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
196 struct state * |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
197 panic_state_new(void) |
162 | 198 { |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
199 struct self *self; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 |
259
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
201 self = alloc_new0(sizeof (*self)); |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
202 self->state.data = self; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
203 self->state.start = start; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
204 self->state.handle = handle; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
205 self->state.draw = draw; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
206 self->state.finish = finish; |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
207 |
16be1ad3ddba
adventure: start working on maps and teleport
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
208 return &self->state; |
89
30baadb6f6a2
core: add a panic_state in the adventure, continue #2484 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 } |