annotate libmlk-adventure/adventure/trace_hud.c @ 278:cc676046aac9

core: add sprite_scale function
author David Demelier <markand@malikania.fr>
date Tue, 15 Dec 2020 22:06:32 +0100
parents 8d41e317c07b
children 196264679079
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
141
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * trace_hud.c -- on screen hud
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <assert.h>
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <string.h>
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
276
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
23 #include <core/action.h>
141
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <core/font.h>
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <core/trace.h>
148
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
26 #include <core/window.h>
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
27
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
28 #include <ui/label.h>
c577c15df07f misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
29 #include <ui/theme.h>
141
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "trace_hud.h"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #define LINES_MAX (4)
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #define THEME(t) ((t) ? (t) : theme_default())
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 static struct {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 char lines[LINES_MAX + 1][TRACE_LINE_MAX];
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 unsigned int elapsed;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 } data;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 struct trace_hud trace_hud = {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 .timeout = TRACE_HUD_TIMEOUT_DEFAULT
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 };
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 void
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 trace_hud_handler(const char *str)
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 assert(str);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 /* 1.Try to find an empty line. */
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 for (size_t i = 0; i < LINES_MAX; ++i) {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 if (data.lines[i][0] == '\0') {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 snprintf(data.lines[i], sizeof (data.lines[i]), "%s", str);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 return;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 /* 2. All lines are full, put in last one and move other. */
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 memmove(&data.lines[0], &data.lines[1], sizeof (data.lines[0]) * LINES_MAX - 1);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 snprintf(data.lines[LINES_MAX - 1], sizeof (data.lines[0]), "%s", str);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 /* 3. Reset elapsed time now. */
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 data.elapsed = 0;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 void
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 trace_hud_update(unsigned int ticks)
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 data.elapsed += ticks;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 /*
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * We have an empty line in the data.lines at LINES_MAX, so we simply so
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * to move the whole array.
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 *
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 * [0] = "abc"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 * [1] = "def"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * [2] = "xyz"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * [3] = "zef"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * [n] = "ldkf"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 * [LINES_MAX + 1] = "\0"
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 */
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 if (data.elapsed >= trace_hud.timeout) {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 data.elapsed = 0;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 memmove(&data.lines[0], &data.lines[1], sizeof (data.lines[0]) * LINES_MAX);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 void
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 trace_hud_draw(void)
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 struct theme *th;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 int x, y;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
93
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 th = THEME(trace_hud.theme);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 x = th->padding;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 y = th->padding;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
97
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 for (int i = 0; i < LINES_MAX && data.lines[i][0]; ++i) {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 label_draw(&(struct label) {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 .x = x,
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 .y = y,
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 .text = data.lines[i],
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 .theme = th,
149
a43e79d489ea ui: allow custom position of labels
David Demelier <markand@malikania.fr>
parents: 148
diff changeset
104 .flags = LABEL_FLAGS_SHADOW
141
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 });
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
106
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 y += font_height(th->fonts[THEME_FONT_INTERFACE]);
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 y += th->padding;
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 }
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 void
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 trace_hud_clear(void)
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 {
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 memset(&data, 0, sizeof (data));
4eeeccf2b732 core: add trace/vtrace functions, closes #2493
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 }
276
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
117
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
118 static bool
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
119 update(struct action *a, unsigned int ticks)
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
120 {
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
121 (void)a;
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
122
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
123 trace_hud_update(ticks);
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
124
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
125 return false;
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
126 }
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
127
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
128 static void
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
129 draw(struct action *a)
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
130 {
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
131 (void)a;
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
132
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
133 trace_hud_draw();
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
134 }
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
135
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
136 struct action *
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
137 trace_hud_action(void)
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
138 {
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
139 static struct action a = {
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
140 .update = update,
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
141 .draw = draw
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
142 };
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
143
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
144 return &a;
8d41e317c07b adventure: enable trace_hud
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
145 }