mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-04-15 13:51:43 +00:00
[client] Add a hud outline component for debug
Very handy for verifying views are placed correctly. Also fix some type issues with the func and update components.
This commit is contained in:
parent
b5087e79e1
commit
5f98dac214
2 changed files with 35 additions and 6 deletions
|
@ -41,11 +41,13 @@ enum {
|
|||
hud_fill,
|
||||
hud_charbuff,
|
||||
hud_func,
|
||||
hud_outline,
|
||||
|
||||
hud_comp_count
|
||||
};
|
||||
|
||||
typedef void (*hud_update_f) (struct view_s);
|
||||
typedef void (*hud_func_f) (struct view_pos_s, struct view_pos_s);
|
||||
|
||||
typedef struct hud_subpic_s {
|
||||
struct qpic_s *pic;
|
||||
|
|
|
@ -47,11 +47,11 @@ static const component_t hud_components[hud_comp_count] = {
|
|||
.name = "href",
|
||||
},
|
||||
[hud_update] = {
|
||||
.size = sizeof (void (*)(view_t)),
|
||||
.size = sizeof (hud_update_f),
|
||||
.name = "update",
|
||||
},
|
||||
[hud_updateonce] = {
|
||||
.size = sizeof (void (*)(view_t)),
|
||||
.size = sizeof (hud_update_f),
|
||||
.name = "updateonce",
|
||||
},
|
||||
[hud_tile] = {
|
||||
|
@ -71,7 +71,7 @@ static const component_t hud_components[hud_comp_count] = {
|
|||
.name = "cachepic",
|
||||
},
|
||||
[hud_fill] = {
|
||||
.size = sizeof (uint32_t),
|
||||
.size = sizeof (byte),
|
||||
.name = "fill",
|
||||
},
|
||||
[hud_charbuff] = {
|
||||
|
@ -79,9 +79,13 @@ static const component_t hud_components[hud_comp_count] = {
|
|||
.name = "charbuffer",
|
||||
},
|
||||
[hud_func] = {
|
||||
.size = sizeof (void (*)(view_pos_t)),
|
||||
.size = sizeof (hud_func_f),
|
||||
.name = "func",
|
||||
},
|
||||
[hud_outline] = {
|
||||
.size = sizeof (byte),
|
||||
.name = "outline",
|
||||
},
|
||||
};
|
||||
|
||||
ecs_registry_t *hud_registry;
|
||||
|
@ -362,7 +366,7 @@ draw_fill_views (ecs_pool_t *pool)
|
|||
{
|
||||
uint32_t count = pool->count;
|
||||
uint32_t *ent = pool->dense;
|
||||
uint32_t *fill = pool->data;
|
||||
byte *fill = pool->data;
|
||||
while (count-- > 0) {
|
||||
view_t view = { .id = *ent++, .reg = hud_registry };
|
||||
if (View_GetVisible (view)) {
|
||||
|
@ -395,7 +399,7 @@ draw_func_views (ecs_pool_t *pool)
|
|||
{
|
||||
uint32_t count = pool->count;
|
||||
uint32_t *ent = pool->dense;
|
||||
void (**func) (view_pos_t, view_pos_t) = pool->data;
|
||||
hud_func_f *func = pool->data;
|
||||
while (count-- > 0) {
|
||||
view_t view = { .id = *ent++, .reg = hud_registry };
|
||||
if (View_GetVisible (view)) {
|
||||
|
@ -407,6 +411,28 @@ draw_func_views (ecs_pool_t *pool)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
draw_outline_views (ecs_pool_t *pool)
|
||||
{
|
||||
uint32_t count = pool->count;
|
||||
uint32_t *ent = pool->dense;
|
||||
byte *col = pool->data;
|
||||
__auto_type line = r_funcs->Draw_Line;
|
||||
while (count-- > 0) {
|
||||
view_t view = { .id = *ent++, .reg = hud_registry };
|
||||
byte c = *col++;
|
||||
if (View_GetVisible (view)) {
|
||||
view_pos_t p = View_GetAbs (view);
|
||||
view_pos_t l = View_GetLen (view);
|
||||
view_pos_t q = { p.x + l.x - 1, p.y + l.y - 1 };
|
||||
line (p.x, p.y, q.x, p.y, c);
|
||||
line (p.x, q.y, q.x, q.y, c);
|
||||
line (p.x, p.y, p.x, q.y, c);
|
||||
line (q.x, p.y, q.x, q.y, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
HUD_Draw_Views (void)
|
||||
{
|
||||
|
@ -420,6 +446,7 @@ HUD_Draw_Views (void)
|
|||
[hud_fill] = draw_fill_views,
|
||||
[hud_charbuff] = draw_charbuff_views,
|
||||
[hud_func] = draw_func_views,
|
||||
[hud_outline] = draw_outline_views,
|
||||
};
|
||||
for (int i = 0; i < hud_comp_count; i++) {
|
||||
if (draw_func[i]) {
|
||||
|
|
Loading…
Reference in a new issue